{"version":3,"file":"js/613-5f560f17c05ccdd4b434.js","mappings":"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,KAC1B3lB,GAASh/E,KAAK,CACZ,CACElpC,KAAM,cACNokB,KAAM,eACNziB,OAAQ,iBACR07K,KAAM,gBAER,CACEr9K,KAAM,OACNokB,KAAM,OACNziB,OAAQ,OACR07K,KAAM,OACN2P,SAAU,SACVtrL,QAAS,OAEX,CACE1B,KAAM,YACNokB,KAAM,aACNziB,OAAQ,YACR07K,KAAM,aACN2P,SAAU,SACVtrL,QAAS,OAEX,CACE1B,KAAM,QACNokB,KAAM,WACNziB,OAAQ,WACR07K,KAAM,QACN2P,SAAU,SACVtrL,QAAS,SAEV29Q,IACDxxI,EAAOuvC,GAAGx2G,SAASsmH,YAAYmyF,EAASr/Q,KAAM,CAC5CokB,KAAMi7P,EAASj7P,KACfi5J,KAAMgiG,EAAShiG,KACf2P,SAAUqyF,EAASryF,SACnBnP,SAAUm1F,GAAoBnlI,EAAQwxI,EAAS19Q,QAC/CD,QAAS29Q,EAAS39Q,SAClB,IAEJwmH,GAASh/E,KAAK,CACZ,CACElpC,KAAM,OACNokB,KAAM,OACNziB,OAAQ,OACR07K,KAAM,OACN2P,SAAU,UAEZ,CACEhtL,KAAM,SACNokB,KAAM,SACNziB,OAAQ,SACR07K,KAAM,SACN2P,SAAU,UAEZ,CACEhtL,KAAM,YACNokB,KAAM,YACNziB,OAAQ,YACR07K,KAAM,YACN2P,SAAU,UAEZ,CACEhtL,KAAM,gBACNokB,KAAM,gBACNziB,OAAQ,gBACR07K,KAAM,kBAER,CACEr9K,KAAM,YACNokB,KAAM,YACNziB,OAAQ,YACR07K,KAAM,aAER,CACEr9K,KAAM,cACNokB,KAAM,cACNziB,OAAQ,cACR07K,KAAM,eAER,CACEr9K,KAAM,eACNokB,KAAM,mBACNziB,OAAQ,eACR07K,KAAM,qBAER,CACEr9K,KAAM,MACNokB,KAAM,MACNziB,OAAQ,MACR07K,KAAM,MACN2P,SAAU,UAEZ,CACEhtL,KAAM,QACNokB,KAAM,QACNziB,OAAQ,QACR07K,KAAM,QACN2P,SAAU,UAEZ,CACEhtL,KAAM,KACNokB,KAAM,kBACNziB,OAAQ,uBACR07K,KAAM,qBAEPgiG,IACDxxI,EAAOuvC,GAAGx2G,SAASsmH,YAAYmyF,EAASr/Q,KAAM,CAC5CokB,KAAMi7P,EAASj7P,KACfi5J,KAAMgiG,EAAShiG,KACf2P,SAAUqyF,EAASryF,SACnB5O,QAASg0F,GAAsBvkI,GAC/BgwC,SAAUm1F,GAAoBnlI,EAAQwxI,EAAS19Q,SAC/C,IAEJksI,EAAOuvC,GAAGx2G,SAASsmH,YAAY,aAAc,CAC3C9oK,KAAM,OACNi5J,KAAM,aACNe,QAASg0F,GAAsBvkI,GAC/BgwC,SAAUgxJ,GAAqBhhM,EAAQ,SACvC,EAIFqhM,CAAoBrhM,EAAO,EAGvBshM,GAAuB,CAACthM,EAAQ1pI,IAASkuQ,GAAaxkI,EAAQ,sDAAsD1C,IACxHA,EAAI2xC,YAAYjvC,EAAOhkH,KAAK+wJ,cAAgB/sC,EAAOoqB,YAAY9zJ,KAAQ,IAoCnEw6K,GAAa9wC,IAlCSA,KAC1BA,EAAOuvC,GAAGx2G,SAASsmH,YAAY,OAAQ,CACrC9oK,KAAM,OACNi5J,KAAM,OACN2P,SAAU,SACV5O,QAAS+wJ,GAAqBthM,EAAQ,WACtCgwC,SAAUm1F,GAAoBnlI,EAAQ,UAExCA,EAAOuvC,GAAGx2G,SAASsmH,YAAY,OAAQ,CACrC9oK,KAAM,OACNi5J,KAAM,OACN2P,SAAU,SACV5O,QAAS+wJ,GAAqBthM,EAAQ,WACtCgwC,SAAUm1F,GAAoBnlI,EAAQ,SACtC,EAqBFuhM,CAAoBvhM,GAnBEA,KACtBA,EAAOuvC,GAAGx2G,SAAS43G,UAAU,OAAQ,CACnCx7J,QAAS,OACTq6J,KAAM,OACNtyJ,SAAS,EACTqzJ,QAAS+wJ,GAAqBthM,EAAQ,WACtCgwC,SAAUm1F,GAAoBnlI,EAAQ,QACtCm/C,SAAU,WAEZn/C,EAAOuvC,GAAGx2G,SAAS43G,UAAU,OAAQ,CACnCx7J,QAAS,OACTq6J,KAAM,OACNtyJ,SAAS,EACTqzJ,QAAS+wJ,GAAqBthM,EAAQ,WACtCgwC,SAAUm1F,GAAoBnlI,EAAQ,QACtCm/C,SAAU,UACV,EAIFqiJ,CAAgBxhM,EAAO,EAGnByhM,GAAwBzhM,GAAUwkI,GAAaxkI,EAAQ,aAAa1C,IACxEA,EAAI0xC,UAAUhvC,EAAO0hM,UAAU,IAkB3B7wJ,GAAa7wC,IARWA,KAC5BA,EAAOuvC,GAAGx2G,SAAS43G,UAAU,YAAa,CACxCx7J,QAAS,cACToB,KAAM,cACNy5J,SAAUm1F,GAAoBnlI,EAAQ,sBACtCnsI,QAAS,OACT,EAGF8tU,CAAsB3hM,GAjBEA,KACxBA,EAAOuvC,GAAGx2G,SAAS6oQ,kBAAkB,YAAa,CAChDrrT,KAAM,cACNg6J,QAASkxJ,GAAsBzhM,GAC/BgwC,SAAUm1F,GAAoBnlI,EAAQ,sBACtCnsI,QAAS,OACT,EAYFguU,CAAkB7hM,EAAO,EAGrB8hM,GAAU,CAAC9hM,EAAQsyH,KAjkBNtyH,KA2BjBphB,EA1B4B,CAC1B,CACEzsH,KAAM,YACNokB,KAAM,aACNu3J,IAAK,cACL0B,KAAM,cAER,CACEr9K,KAAM,cACNokB,KAAM,eACNu3J,IAAK,gBACL0B,KAAM,gBAER,CACEr9K,KAAM,aACNokB,KAAM,cACNu3J,IAAK,eACL0B,KAAM,eAER,CACEr9K,KAAM,eACNokB,KAAM,UACNu3J,IAAK,cACL0B,KAAM,mBAGkBtyI,IAC1B8iG,EAAOuvC,GAAGx2G,SAAS03G,gBAAgBvzI,EAAK/qC,KAAM,CAC5CgjB,QAAS+nB,EAAK3mB,KACdi5J,KAAMtyI,EAAKsyI,KACXQ,SAAUm1F,GAAoBnlI,EAAQ9iG,EAAK4wI,KAC3CyC,QAASk0F,GAAmBzkI,EAAQ9iG,EAAK/qC,OACzC,IAEJ6tI,EAAOuvC,GAAGx2G,SAAS43G,UAAU,YAAa,CACxCx7J,QAAS,eACTq6J,KAAM,aACNe,QAASg0F,GAAsBvkI,GAC/BgwC,SAAUm1F,GAAoBnlI,EAAQ,gBACtC,EA0hBF+hM,CAAW/hM,GACXoyD,GAAWpyD,GACXqgM,GAAWrgM,EAAQsyH,GACnBxhF,GAAW9wC,GAnubMA,KA3LMA,KACvBA,EAAOyvB,WAAW,qBAAqB,CAAC7pH,EAAQz3C,KAf9B,EAAC6xI,EAAQp6F,EAAQz3C,KACnC6xI,EAAOoqB,YAAY+rB,UAAS,KAC1Bn2C,EAAO0L,QACP1L,EAAO/hH,UAAU6L,MAAM8b,EAAQ,CAAEz3C,UACjC6xI,EAAO0uB,aAAa,GACpB,EAWAszK,CAAYhiM,EAAQp6F,EAAQz3C,EAAM,IAEpC6xI,EAAOyvB,WAAW,sBAAsB7pH,IAXrB,EAACo6F,EAAQp6F,KAC5Bo6F,EAAOoqB,YAAY+rB,UAAS,KAC1Bn2C,EAAO0L,QACP1L,EAAO/hH,UAAUyjC,OAAO9b,EAAQ,CAAEz3C,MAAO,WAAQyB,GAAW,GAC5DowI,EAAO0uB,aAAa,GACpB,EAOAuzK,CAAajiM,EAAQp6F,EAAO,GAC5B,EAsLFymH,CAAiBrsB,GACjB,MAAMkiM,EAA0B/6D,GAA0BnnI,GACpDmiM,EAA0B/6D,GAA0BpnI,GACpDoiM,EAAgBxoK,GAAKsoK,GACrBG,EAAgBzoK,GAAKuoK,GAC3Bv5D,GAAwB5oI,EAAQ,YAAa,YAAaoiM,GAC1Dx5D,GAAwB5oI,EAAQ,YAAa,cAAeqiM,GAC5Dx5D,GAA0B7oI,EAAQ,YAAa,YAAa,aAAcoiM,GAC1Ev5D,GAA0B7oI,EAAQ,YAAa,cAAe,mBAAoBqiM,EAAc,EA2tbhGC,CAAWtiM,GACX6wC,GAAW7wC,GACX4gM,GAAW5gM,GACXggM,GAAWhgM,GAnYMA,KACjB,MAAM8gM,EAAclnK,GAAKgkF,GAAe59G,IAClCgwC,EAAW,IAAMhwC,EAAO+tC,YAAY,2BAC1C/tC,EAAOuvC,GAAGx2G,SAAS03G,gBAAgB,YAAa,CAC9CnnI,QAAQ,EACRkmI,KAAM,aACNr6J,QAAS,gBACT66J,WACAO,QAAS7B,GAAiB1uC,EAAQ8gM,KAEpC9gM,EAAOuvC,GAAGx2G,SAAS6oQ,kBAAkB,YAAa,CAChDrrT,KAAM,gBACNi5J,KAAM,aACNQ,WACAO,QAAS7B,GAAiB1uC,EAAQ8gM,IAClC,EAqXFyB,CAAWviM,GAlbMA,KACjBA,EAAOuvC,GAAGx2G,SAASypQ,WAAW,YAAY,IACjCxiM,EAAOI,UAAUme,eAE1Bve,EAAOuvC,GAAGx2G,SAASypQ,WAAW,QAAQxmT,GAC7BgkH,EAAOhkH,KAAKtuB,QAAUsuB,IAE/BgkH,EAAOuvC,GAAGx2G,SAASypQ,WAAW,MAAO/mN,GACrCukB,EAAOuvC,GAAGx2G,SAASypQ,WAAW,cAAc58R,GACnCo6F,EAAO/hH,UAAUktS,SAASvlR,KAEnCo6F,EAAOuvC,GAAGx2G,SAASypQ,WAAW,UAAU77M,GAC/BqZ,EAAO5vI,OAAOm0L,aAAavkD,EAAOI,UAAUyuC,UAAUx+K,QAASs2H,IACtE,EAsaF87M,CAAWziM,EAAO,EAGd0iM,GAAkB/gT,GAAUi5F,EAASj5F,GAAUA,EAAOzwB,MAAM,QAAUywB,EACtE7M,GAAS3iB,GAAQ6tI,GAAUA,EAAO7uI,QAAQzD,IAAIyE,GAiC9CwwU,GAAuB7tT,GAAO,gCAC9B8tT,GAA0B9tT,GAAO,6BAEjC+tT,GAAiB7iM,IACrB,MAAM8iM,EAAe9iM,EAAOuvC,GAAGx2G,SAAS1zD,SAASy9T,aAC3CC,EAAc/iM,EAAO7uI,QAAQzD,IAAI,eACvC,OAAIsyI,EAAO7uI,QAAQkwI,MAAM,eAChB0hM,EAEAhlN,EAASglN,GAAa7lS,GAAQw2J,GAAMovI,EAAc5lS,IAC3D,EAGIwnF,GAAK,CAAC3uG,EAAGJ,KAAM,CACnBrf,KAAM,YACNyf,IACAJ,MAKIqtT,GAAiB5vU,GAAgB,cAAXA,EAAEkD,MAAoD,IAA5BlD,EAAEkD,KAAKsyB,QAAQ,SAiB/Dq6S,GAAgC,CAACz0U,EAAS6qD,KAC9C,MAAM6pR,EAAe/nF,GAASj5D,IAAIihJ,OAAO30U,GACzC,MAtBgB,EAAC6qD,EAAK0rC,EAAIq3D,IACnB13B,GAAGrrE,EAAItjC,EAAIgvE,EAAI1rC,EAAI1jC,EAAIymI,GAqBvB31C,CAAUptD,EAAK6pR,EAAantT,EAAGmtT,EAAavtT,EAAE,EAEjDytT,GAAiB,CAACpjM,EAAQ5sI,IACf,gBAAXA,EAAEkD,MAAqC,cAAXlD,EAAEkD,KAC5B0pI,EAAO2sC,OAtBIv5K,KACjB,GAAI4vU,GAAe5vU,GAAI,CACrB,MAAMmhR,EAAQnhR,EAAEwmD,QAAQ,GACxB,OAAO8qE,GAAG6vJ,EAAM8uD,MAAO9uD,EAAM+uD,MAC/B,CACE,OAAO5+M,GAAGtxH,EAAEiwU,MAAOjwU,EAAEkwU,MACvB,EAiBWC,CAAWnwU,GAEX6vU,GAA8BjjM,EAAOoyC,0BAjB7Bh/K,KACnB,GAAI4vU,GAAe5vU,GAAI,CACrB,MAAMmhR,EAAQnhR,EAAEwmD,QAAQ,GACxB,OAAO8qE,GAAG6vJ,EAAMr6N,QAASq6N,EAAMp6N,QACjC,CACE,OAAOuqE,GAAGtxH,EAAE8mD,QAAS9mD,EAAE+mD,QACzB,EAW2EqpR,CAAapwU,IAG/EqwU,GAAmBzjM,GAGxByjM,GAAqBzjM,IAClB,CACL1pI,KAAM,YACNwwC,KAAMi6E,GAAaS,QAAQwe,EAAOI,UAAUyuC,aAQ1C60J,GAAkB,CAAC1jM,EAAQ5sI,EAAGuwU,KAClC,OAAQA,GACR,IAAK,OACH,MARkB3jM,KAAU,CAC9B1pI,KAAM,OACNU,KAAM0kH,EAAS/iH,KAAKooH,GAAaS,QAAQwe,EAAOI,UAAUyuC,YAC1D/nI,KAAMi6E,GAAaS,QAAQwe,EAAO5tC,aAKzBwxO,CAAc5jM,GACvB,IAAK,QACH,OAAOojM,GAAepjM,EAAQ5sI,GAChC,IAAK,YACH,OAAOqwU,GAAmBzjM,GAC5B,EAGI6jM,GAAgB,CAAC7jM,EAAQ5sI,EAAG0wU,EAAWxxE,EAAWyxE,EAAaJ,KACnE,MAAMxiS,EAAQ2iS,IACRE,EAAaN,GAAgB1jM,EAAQ5sI,EAAGuwU,GAC9C3xH,GAAM7wK,EAAOqzN,GAAeoK,iBAAkBtM,EAAW,CACvDgf,kBAAkB,EAClB3mJ,OAAQjP,EAASE,SAChBhvH,KAAIo7T,IACL50T,EAAE9E,iBACFurP,GAAWa,WAAWqpF,EAAa,CAAE7qK,OAAQ8qK,GAAc,CACzD7rJ,KAAM,CAAEw5D,QAASA,GAAQ,WACzB9zO,KAAMmqT,GACN,GACF,EAGErsP,GAAU,CACdotJ,MAAO,IAAM,CACXrL,GACAL,GACAC,GACAC,GACAC,GACAC,GACAxB,GACAD,GACAF,GACAF,GACAG,GACAF,IAEFoN,MAAO,IAAM,CACXvL,GACAJ,GACAD,GACAG,GACAD,GACAE,GACAxB,GACAD,GACAD,GACAF,GACAC,GACAF,KAIEqoH,GAAmB,CACvBn4B,aAAc,GACdC,YAAa,GACbC,UAAW,CAAC,uBACZC,WAAY,CAAC,wBACbtgT,MAAO,CAAC,kBACRD,KAAM,CAAC,iBACPm+C,OAAQ,CAAC,mBACTxpB,IAAK,CAAC,iBAgDFkpB,GAAO,CAACy2F,EAAQ5sI,EAAG+tC,EAAOmxN,EAAWyxE,EAAaJ,EAAYO,KAClE,MAAMF,EAdc,EAAChkM,EAAQ5sI,EAAGuwU,KAChC,MAAMK,EAAaN,GAAgB1jM,EAAQ5sI,EAAGuwU,GAE9C,MAAO,CACLtoH,OAAQ4L,GAAK,EAFsB,UAAf08G,EA9CL,GA8C2C,EAE3BM,IAC/BtoQ,WACA/0B,UAAW,CACTmgL,iBAAkBm3F,KAClBp3F,kBAAmBN,SAElBw9G,EACJ,EAGkBG,CAAcnkM,EAAQ5sI,EAAGuwU,GAC5C3xH,GAAM7wK,EAAOqzN,GAAeoK,iBAAkBtM,EAAW,CACvDgf,kBAAkB,EAClB3mJ,OAAQjP,EAASE,SAChBhvH,KAAIo7T,IACL50T,EAAE9E,iBACF,MAAMgqP,EAAkB4rF,EAAuB5uF,GAAgBG,qBAAuBH,GAAgB26B,cACtGp2B,GAAWG,qBAAqB+pF,EAAa,CAAE7qK,OAAQ8qK,GAAc,CACnE7rJ,KAAM,CACJw5D,QAASA,GAAQ,UACjB2G,mBAEFz6O,KAAMmqT,EACN1xT,KAAM,eACL,IAAMolH,EAAS/iH,KAAK0gU,GAAwBr5L,EAAQsyH,EAAUpsM,OAAuB,SAAfy9Q,EAAwB,OAAS,gBAC1G3jM,EAAO7xH,SAASkqT,GAAwB,GACxC,EAEE+L,GAAc,CAACpkM,EAAQ5sI,EAAG0wU,EAAWxxE,EAAWyxE,EAAaJ,KACjE,MAAMlQ,EAAYl9L,KACZ7J,EAAQ+mM,EAAU5lM,GAAGnB,QACrBE,EAAU6mM,EAAU5lM,GAAGjB,UACvBD,EAAY8mM,EAAU5lM,GAAGlB,YACzBwB,EAAUslM,EAAU1lM,WAAWI,UAE/B/oG,EAAO,KACX,MAAM+b,EAAQ2iS,IACdv6R,GAAKy2F,EAAQ5sI,EAAG+tC,EAAOmxN,EAAWyxE,EAAaJ,IAHNh3M,GAAaD,GAASE,GAAWuB,GAGc,EAE1F,IAAKvB,GAAWF,IAAyB,SAAfi3M,EAAuB,CAC/C,MAAMU,EAAU,KAlEMrkM,KACxB,MAAMskM,EAAoBtkM,EAAOI,UAAUwjC,SACrC2gK,EAAiB,KACrBrpF,GAASphE,iBAAiB95C,GAAQ,KAChCA,EAAOI,UAAU0kB,OAAOw/K,EAAkB,GACzC,IACHE,GAAsB,EAExBxkM,EAAO+kI,KAAK,WAAYw/D,GACxB,MAAME,EAAmBrxU,IACvBA,EAAE9E,iBACF8E,EAAEtI,0BAA0B,EAE9Bk1I,EAAO8K,GAAG,YAAa25L,GAAkB,GACzC,MAAMC,EAAsB,IAAMF,IAClCxkM,EAAO+kI,KAAK,kBAAmB2/D,GAC/B,MAAMF,EAAuB,KAC3BxkM,EAAO6lC,IAAI,WAAY0+J,GACvBvkM,EAAO6lC,IAAI,kBAAmB6+J,GAC9B1kM,EAAO6lC,IAAI,YAAa4+J,EAAiB,CAC1C,EA+CGE,CAAkB3kM,GAClB56G,GAAM,EA/EmB,EAAC46G,EAAQ5sI,KACtC,MAAMgtI,EAAYJ,EAAOI,UACzB,GAAIA,EAAU+8C,eAAiB/pL,EAAEwmD,QAAQv+C,OAAS,EAChD,OAAO,EACF,CACL,MAAMk5Q,EAAQnhR,EAAEwmD,QAAQ,GAClB+qG,EAAMvkB,EAAUwjC,SAEtB,OADmB1G,GAAal9B,EAAO46B,SAAUH,GAAavI,SAASvN,IACrDtoC,QAAOuoN,GAAWA,EAAQl5U,MAAQ6oR,EAAMr6N,SAAW0qR,EAAQj5U,OAAS4oR,EAAMr6N,SAAW0qR,EAAQvkT,KAAOk0P,EAAMp6N,SAAWyqR,EAAQ/6R,QAAU0qO,EAAMp6N,SACjK,GAwEM0qR,CAAuB7kM,EAAQ5sI,GACjCixU,KAEArkM,EAAO+kI,KAAK,kBAAmBs/D,GAC/BrkM,EAAO+kI,KAAK,YAAY,IAAM/kI,EAAO6lC,IAAI,kBAAmBw+J,KAEhE,MACEj/S,GACF,EAGIsyO,GAAcx6N,GAAQ09E,EAAS19E,GAAiB,MAATA,EAA6B,cAAdA,EAAK5mC,KAC3Dg7O,GAAY,CAAEh7O,KAAM,aACpBwuU,GAAkB5nS,IACtB,MAAM6nS,EAAiB7nS,IAAQ,CAC7B3mB,KAAM2mB,EAAK3mB,KACXi5J,KAAMtyI,EAAKsyI,KACXtyJ,QAASggB,EAAKhgB,QACdiiK,SAAUjiJ,EAAKiiJ,WAEjB,GAAIvkE,EAAS19E,GACX,OAAOA,EAEP,OAAQA,EAAK5mC,MACb,IAAK,YACH,OAAOg7O,GACT,IAAK,UACH,MAAO,CACLh7O,KAAM,oBACHyuU,EAAe7nS,GAClBm8N,gBAAiB,KACf,MAAMl4N,EAAQjE,EAAKm8N,kBACnB,OAAIz+I,EAASz5E,GACJA,EAEA6xJ,EAAM7xJ,EAAO2jS,GACtB,GAGN,QACE,MAAME,EAAa9nS,EACnB,MAAO,CACL5mC,KAAM,cACHyuU,EAAeC,GAClBh1J,SAAUyiB,EAAMuyI,EAAWh1J,WAGjC,EAEIi1J,GAAsB,CAAC3nN,EAAI4nN,KAC/B,GAA0B,IAAtBA,EAAW7pU,OACb,OAAOiiH,EAET,MAAM6nN,EAAelnM,GAAO3gB,GAAIzrH,QAAOqrC,IAASw6N,GAAYx6N,KACtD0xD,EAASu2O,EAAarpN,MAAK,IAAM,KAAI7sH,GAAK,CAACqiP,MACjD,OAAOh0H,EAAGzwH,OAAO+hG,GAAQ/hG,OAAOq4U,GAAYr4U,OAAO,CAACykP,IAAW,EAuB3D8zF,GAAwB,CAACplM,EAAQ5sI,KADlBA,IAAgB,cAAXA,EAAEkD,MAAwBo9L,GAAMtgM,EAAG,WACfiyU,CAAajyU,KAAoB,IAAbA,EAAEJ,QAAgBI,EAAE3E,SAAWuxI,EAAO5tC,WAA+B,KAAlBh/F,EAAEkyU,aACjHC,GAAqB,CAACvlM,EAAQ5sI,IAAMgyU,GAAsBplM,EAAQ5sI,GAAK4sI,EAAOI,UAAUC,UAAS,GAAQjtI,EAAE3E,OAY3G+2U,GAAU,CAACxlM,EAAQ+5G,EAAUuY,KACjC,MACMnkI,EADYoI,KACQxI,WAAWI,QAC/B41M,EAAc3pH,GAAQy/B,GAAWvjB,OAAO,CAC5C32G,IAAK,CAAEhE,IAAK,OACZo+H,WACApX,SAAU,IAAM3iG,EAAO0L,QACvBq9D,OAAQ,IAAMupD,EAAUugD,qBAAoB,GAC5C5pG,OAAQ,IAAMqpD,EAAUugD,qBAAoB,GAC5C/3D,0BAA2B,CAAC,EAC5BH,iBAAkB1zC,GAAS,CAACtlL,GAAO,qBAAsB,CAAC6hL,GAAMjB,MAAoB,CAAC/xD,EAAM2iF,KACrFtB,GAAWh2C,MAAMrrC,GACjBxQ,EAAO0L,OAAO,WAGhB+5L,EAAkB,IAAM5rF,GAAWnwM,KAAKq6R,GACxC2B,EAAkBtyU,IAItB,GAHIuvU,GAAqB3iM,IACvB5sI,EAAE9E,iBAjCyB,EAAC0xI,EAAQ5sI,IAAMA,EAAER,UAAY+vU,GAAqB3iM,GAmC3E2lM,CAAyB3lM,EAAQ5sI,IAjUX4sI,IAA4C,IAAlC6iM,GAAe7iM,GAAQ3kI,OAiUhBuqU,CAAsB5lM,GAC/D,OAEF,MAAM2jM,EAlCY,EAAC3jM,EAAQ5sI,KAC7B,MAAM0E,EAAW8qU,GAAwB5iM,GACnC2jM,EAAayB,GAAsBplM,EAAQ5sI,GAAK,YAAc,QACpE,GAAIk0H,GAAWxvH,GAAW,CACxB,MAAMrJ,EAAS82U,GAAmBvlM,EAAQ5sI,GAE1C,OADuByU,GAAQk5G,GAAaS,QAAQ/yH,GAASqJ,GACrC,OAAS6rU,CACnC,CACE,OAAOA,CACT,EAyBqBkC,CAAc7lM,EAAQ5sI,IAOnB+6H,IAAYi2M,GAAcP,IAClC7jM,EAAQ5sI,GAPJ,KAChB,MAAM0yU,EAAkBP,GAAmBvlM,EAAQ5sI,GAC7C2lE,EAAWinE,EAAOuvC,GAAGx2G,SAAS1zD,SAC9B8kO,EAAa04F,GAAe7iM,GAClC,MA9DsB,EAAC8iM,EAAc34F,EAAY27F,KACrD,MAAMC,EAAW7nN,EAAMisH,GAAY,CAAC7oL,EAAKnvD,IAChCshM,GAAMqvI,EAAc3wU,EAAK1C,eAAe7C,KAAIurL,IACjD,MAAMh3I,EAAQg3I,EAAKx1H,OAAOmjR,GAC1B,GAAIlrN,EAASz5E,IAAUmmF,GAAWssE,GAAOzyJ,IACvC,OAAO8jS,GAAoB3jR,EAAKngB,EAAMjwC,MAAM,MACvC,GAAIiO,EAAQgiC,IAAUA,EAAM9lC,OAAS,EAAG,CAC7C,MAAM2qU,EAAWhzI,EAAM7xJ,EAAO2jS,IAC9B,OAAOG,GAAoB3jR,EAAK0kR,EAClC,CACE,OAAO1kR,CACT,IACCo7D,YAAW,IAAMp7D,EAAIz0D,OAAO,CAACsF,OAC/B,IAIH,OAHI4zU,EAAS1qU,OAAS,GAAKq8P,GAAYquE,EAASA,EAAS1qU,OAAS,KAChE0qU,EAAS9kR,MAEJ8kR,CAAQ,EA6CJE,CAAoBltQ,EAAS+pQ,aAAc34F,EAAY27F,EAAgB,GAG5CxzE,EAAWyxE,EAAaJ,EAAW,EAEzE3jM,EAAO8K,GAAG,QAAQ,KAChB,MAAMo7L,EAAa,2DAA6D/3M,IAAY,GAAK,iBACjG6R,EAAO8K,GAAGo7L,EAAYT,GACtBzlM,EAAO8K,GAAG,wBAAyB46L,EAAgB,GACnD,EAGEhrL,GAAMH,GAAa,CACvB,CACEzwG,OAAQ,CACN,IACA,MAGJ,CACE+qF,SAAU,CACR,IACA,MAGJ,CACE6B,MAAO,CACL,IACA,QAIAyvM,GAAWpnQ,GAAUvjD,GAASA,EAAMkyB,WAAWqxB,EAAOrzE,MAAOqzE,EAAO1+C,KACpE71B,GAAMu0E,GAAUvjD,GAASA,EAAMkyB,UAAUqxB,EAAOrzE,KAAMqzE,EAAO1+C,KAC7DmpJ,GAAY/wF,GAAW,CAAC1iE,EAAGJ,IAAMuoG,EAAMzlC,GAAS,CAACttE,EAAMogB,IAAMA,EAAEpgB,IAAOwpH,GAAc5+G,EAAGJ,IACvFywT,GAAU,CAACC,EAAOxwI,EAAQz+E,IAAWivN,EAAMvqN,KAAK0tD,GAAU,CAC9Dh/K,GAAI4sH,GACJ+uN,GAAStwI,KACPrsB,GAAU,CAAC28J,GAAStwI,KAAWrsB,GAAU,KACvC88J,GAAa,CAACD,EAAOxwI,EAAQz+E,IAAWivN,EAAMvqN,KAAK0tD,GAAU,CAACh/K,GAAI4sH,KAAWoyD,GAAU,IAAKA,GAAU,CAACh/K,GAAIqrM,MAC3G0wI,GAAW,CAACF,EAAOxwI,EAAQz+E,IAAWivN,EAAMvqN,KAAK0tD,GAAU,IAAKA,GAAU,CAAC28J,GAAS/uN,KAAWoyD,GAAU,CAC7Gh/K,GAAIqrM,GACJswI,GAAS/uN,MAcLovN,GAAW,CAACH,EAAOxwI,EAAQz+E,KAC/B,MAAMqvN,EAAYJ,EAAMvqN,MAAK,CAAC/lG,EAAGJ,KAAM,CACrCU,SAAUqlG,EAAS/iH,KAAK,YACxBjN,KAAMgwH,EAAS/iH,KAAKod,EAAI,MACxBsK,IAAKq7F,EAAS/iH,KAAKgd,EAAI,UACrB,CAACI,EAAGJ,KAAM,CACZU,SAAUqlG,EAAS/iH,KAAK,YACxBjN,KAAMgwH,EAAS/iH,KAAKod,EAAIqhG,EAAO1rH,KAAO,MACtC20B,IAAKq7F,EAAS/iH,KAAKgd,EAAIyhG,EAAO/2F,IAAM,UAClC,CAACtK,EAAGJ,KAAM,CACZU,SAAUqlG,EAAS/iH,KAAK,SACxBjN,KAAMgwH,EAAS/iH,KAAKod,EAAI,MACxBsK,IAAKq7F,EAAS/iH,KAAKgd,EAAI,UAEzB,MAAO,CACLhqB,MAAO+vH,EAASE,OAChB/xE,OAAQ6xE,EAASE,UACd6qN,EACJ,EAGGC,GAAS,CAACC,EAAcC,EAAe/wI,EAAQz+E,KACnD,MAAMyvN,EAAY,CAACC,EAASpiN,IAAO,CAACqiN,EAAMC,KACxC,MAAM9pR,EAAW4pR,EAAQF,EAAe/wI,EAAQz+E,GAChD,OAAOsN,EAAGqiN,EAAKxqN,MAAMr/D,EAASxxD,MAAOs7U,EAAKzqN,MAAMr/D,EAAS78B,KAAK,EAEhE,OAAOsmT,EAAa7qN,KAAK+qN,EAAUN,GAAUz8R,IAAS+8R,EAAUP,GAAYzxM,IAAWgyM,EAAUT,GAAS1vM,IAAO,EAE7G5sF,GAAS4wG,GAAI5wG,OACb+qF,GAAW6lB,GAAI7lB,SACf6B,GAAQgkB,GAAIhkB,MAEZuwM,GAAiB,CAACz4U,EAAS2D,KAC/B,MAAMhE,EAAQmmM,GAAM9lM,EAAS2D,GAC7B,OAAO4oH,EAAY5sH,GAASs8D,IAAMj6C,SAASriB,EAAO,GAAG,EAmBjD+4U,GAAY,CAACj3P,EAAWk3P,EAAUd,EAAOpgS,IAjBjC,EAACgqC,EAAWm3P,KACxB,MAAM54U,EAAUyhF,EAAUzhF,QACpBunB,EAAIkxT,GAAez4U,EAAS44U,EAAUC,UACtC1xT,EAAIsxT,GAAez4U,EAAS44U,EAAUE,SAC5C,OAAO7zT,MAAMsC,IAAMtC,MAAMkC,GAAK+lG,EAASE,OAASF,EAAS/iH,KAAKg8H,GAAc5+G,EAAGJ,GAAG,EAa3BkqK,CAAM5vG,EAAWk3P,GAAUrrN,MAAK,IAAMuqN,IAAOvlH,GAAWpqF,GAAMoqF,EAAQp1N,KAAOu6C,EAAMv6C,KAAMo1N,EAAQzgM,IAAM4lB,EAAM5lB,OAChKknT,GAAa,CAACt3P,EAAWk3P,EAAUd,EAAOpgS,EAAO4vJ,EAAQz+E,KAC7D,MAAMowN,EAAWN,GAAUj3P,EAAWk3P,EAAUd,EAAOpgS,GACjDg5O,EAAOkoD,EAASM,SAAWC,GAAgBz3P,EAAWk3P,EAAUK,EAAU3xI,EAAQz+E,GAAUuwN,GAAS13P,EAAWk3P,EAAUK,EAAU3xI,EAAQz+E,GAC5IwwN,EAAaxB,GAAQoB,EAAU3xI,EAAQz+E,GAE7C,MAjBU,EAACnnC,EAAWm3P,EAAWvvR,KACjC,MAAMrpD,EAAUyhF,EAAUzhF,QAC1B6lM,GAAM7lM,EAAS44U,EAAUC,SAAUxvR,EAAGnsD,KAAO,MAC7C2oM,GAAM7lM,EAAS44U,EAAUE,QAASzvR,EAAGx3B,IAAM,KAAK,EAahDzyB,CAAIqiF,EAAWk3P,EAAUS,GAClB3oD,EAAKnjK,MAAK,KAAM,CACrBuqN,MAAO3vM,GAAMkxM,EAAWl8U,KAAMk8U,EAAWvnT,KACzCu5E,MAAO8hB,EAASE,WACdisN,IAAW,CACbxB,MAAOwB,EAAQz0L,OACfx5C,MAAOiuO,EAAQjuO,SACd,EAECkuO,GAAW,CAAC73P,EAAWk3P,KApBf,EAACl3P,EAAWm3P,KACxB,MAAM54U,EAAUyhF,EAAUzhF,QAC1B+lM,GAAS/lM,EAAS44U,EAAUC,UAC5B9yI,GAAS/lM,EAAS44U,EAAUE,QAAQ,EAkBpCpqU,CAAM+yE,EAAWk3P,EAAS,EAEtBY,GAAmB,CAACC,EAAOR,EAAU3xI,EAAQz+E,IAAWuH,GAAQqpN,GAAO/oD,IAC3E,MAAMgpD,EAAShpD,EAAKgpD,OACd9tQ,EApFY,EAAC+tQ,EAAQC,EAAQxpD,EAAQC,EAAQ/oF,EAAQz+E,KAC3D,MAAM37E,EAAK6qS,GAAW4B,EAAQryI,EAAQz+E,GAChCi8E,EAAKizI,GAAW6B,EAAQtyI,EAAQz+E,GACtC,OAAO97G,KAAK8b,IAAIqkB,EAAG/vC,KAAO2nM,EAAG3nM,OAASizR,GAAUrjR,KAAK8b,IAAIqkB,EAAGpb,IAAMgzK,EAAGhzK,MAAQu+P,CAAM,EAiFnEwpD,CAAYZ,EAAUS,EAAQhpD,EAAKhhP,MAAMvyC,KAAMuzR,EAAKhhP,MAAM5d,IAAKw1K,EAAQz+E,GACvF,OAAOj9C,EAAUuhD,EAAS/iH,KAAK,CAC7By6I,OAAQszL,GAAOznD,EAAK7rI,OAAQo0L,EAAU3xI,EAAQz+E,GAC9Cxd,MAAOqlL,EAAKrlL,QACT8hB,EAASE,MAAM,IAEhB8rN,GAAkB,CAACz3P,EAAWk3P,EAAUK,EAAU3xI,EAAQz+E,KAC9D,MAAM4wN,EAAQb,EAASkB,cAAcp4P,GAErC,OADkB83P,GAAiBC,EAAOR,EAAU3xI,EAAQz+E,GAC3CwF,SAAQ,KACvB,MAAM0rN,EAAWpqN,EAAM8pN,GAAO,CAAC1mR,EAAK29N,KAClC,MAAMgpD,EAAShpD,EAAKgpD,OACdlsL,EA3FM,EAACmsL,EAAQC,EAAQxpD,EAAQC,EAAQ/oF,EAAQz+E,KACzD,MAAM37E,EAAK6qS,GAAW4B,EAAQryI,EAAQz+E,GAChCi8E,EAAKizI,GAAW6B,EAAQtyI,EAAQz+E,GAChC1rH,EAAO4P,KAAK8b,IAAIqkB,EAAG/vC,KAAO2nM,EAAG3nM,MAC7B20B,EAAM/kB,KAAK8b,IAAIqkB,EAAGpb,IAAMgzK,EAAGhzK,KACjC,OAAOs0G,GAAcjpI,EAAM20B,EAAI,EAsFZkoT,CAAUf,EAAUS,EAAQhpD,EAAKhhP,MAAMvyC,KAAMuzR,EAAKhhP,MAAM5d,IAAKw1K,EAAQz+E,GACpF,OAAO91D,EAAIy6F,OAAOjgC,MAAK,KAAM,CAC3BigC,OAAQrgC,EAAS/iH,KAAKojJ,GACtBkjI,KAAMvjK,EAAS/iH,KAAKsmR,OAClBupD,IACezsL,EAAOrwJ,KAAOqwJ,EAAO17H,KAAO,IAC5BmoT,EAAW98U,KAAO88U,EAAWnoT,KAAO,EAE5C,CACL07H,OAAQrgC,EAAS/iH,KAAKojJ,GACtBkjI,KAAMvjK,EAAS/iH,KAAKsmR,IAGf39N,GAET,GACD,CACDy6F,OAAQrgC,EAASE,OACjBqjK,KAAMvjK,EAASE,SAEjB,OAAO0sN,EAASrpD,KAAKryR,KAAIqyR,IAAQ,CAC/B7rI,OAAQszL,GAAOznD,EAAK7rI,OAAQo0L,EAAU3xI,EAAQz+E,GAC9Cxd,MAAOqlL,EAAKrlL,SACX,GACH,EAEE+tO,GAAW,CAAC13P,EAAWk3P,EAAUK,EAAU3xI,EAAQz+E,KACvD,MAAM4wN,EAAQb,EAASkB,cAAcp4P,GACrC,OAAO83P,GAAiBC,EAAOR,EAAU3xI,EAAQz+E,EAAO,EAmB1D,IAAIqxN,GAA4B19U,OAAOqhE,OAAO,CAC1CriC,UAAW,KACX2+S,OAdW,CAACz4P,EAAW04P,EAAYnhG,EAAQy3C,KAC7C,MAAMxwR,EAASk6U,EAAWp2R,UAAU09B,EAAUzhF,SAC9C,GAAIm6U,EAAWC,iBAAkB,CAC/B,MAAMljN,EAAMwuE,GAAQjkH,EAAUzhF,SACxBqnM,EAAS1oC,GAAMznC,GACftO,EAASqxF,GAAUh6M,GACnBo6U,EAXO,EAAC5pD,EAAMppF,EAAQz+E,KAAW,CACzCivN,MAAOK,GAAOznD,EAAK7rI,OAAQ6rI,EAAK7rI,OAAQyiD,EAAQz+E,GAChDxd,MAAOqlL,EAAKrlL,QASMkvO,CAAS7pD,EAAMppF,EAAQz+E,GACjCh+D,EAASotR,GAASqC,EAAQxC,MAAOxwI,EAAQz+E,GAC/C5uF,GAAW/5B,EAAQ2qD,EACrB,KAQF,MAAM2vR,GAAmB,uBAenBC,GAAY,CAACC,EAAcjiK,KAC/BiiK,EAAa7lI,YAAYgP,SAASprC,GATfA,KACnB9xH,GAAO8xH,EAAQx4K,SAASqD,OAAOsuL,IAAa9kJ,MAAKyL,IAC/Ci7F,GAAOj7F,EAAM,WAAWzL,MAAK6tS,IAC3B70I,GAAMvtJ,EAAMiiS,GAAkBG,EAAO,IAEvC10I,GAAM1tJ,EAAM,UAAW2tJ,GAAMztB,EAAQx4K,QAAS,WAAW,GACzD,EAIF26U,CAAaniK,EAAQ,EAEjBoiK,GAAUpiK,IAlBIA,KAClB9xH,GAAO8xH,EAAQx4K,SAASqD,OAAOsuL,IAAa9kJ,MAAKyL,IAC/C45E,GAAO55E,EAAMiiS,IAAkBjtN,MAAK,IAAM6E,GAAS75E,EAAM,aAAYhgB,GAAU0tK,GAAM1tJ,EAAM,UAAWhgB,KACtGytK,GAASztJ,EAAMiiS,GAAiB,GAChC,EAeFM,CAAYriK,GACZA,EAAQo8B,YAAYiP,cAAcrrC,EAAQ,EAEtCsiK,GAAkB,CAACr5P,EAAWs5P,EAAcC,IAAkBv5P,EAAUmzH,YAAY4O,MAAMwlE,GAAUlhD,OAAO,CAC/G32G,IAAK,CACHvmE,OAAQ,CACN,KAAQ,MACR,IAAO,MACP,MAAS,OACT,OAAU,OACV,SAAY,QACZ,UAAW,oBAEbxxC,QAAS,CAAC2hU,IAEZliS,OAAQmiS,KAGV,IAAIC,GAAaprI,GAAY,QAAS,CACpCjB,GAAW,iBACXuS,GAAU,YACVvS,GAAW,YACXA,GAAW,WACXkB,GAAU,eAAgBxpE,IAC1BwpE,GAAU,YAAY,KAGxB,MAAMorI,GAAW,CACfprI,GAAU,WAAY9iF,GACtB4hF,GAAW,gBACXkB,GAAU,YAAapjF,GACvBojF,GAAU,SAAU7jK,GACpB6jK,GAAU,oBAAoB,GAC9BA,GAAU,SAAU7jK,GACpBmkK,GAAkB,YAAa9pE,IAC/B20M,IAGIE,GAAkBl7U,GAht1BV,EAACwxL,EAAIC,EAAI0pJ,EAAIr+S,IAAM00J,EAAGhkE,UAAYikE,EAAGjkE,UAAY2tN,EAAG3tN,SAAWP,EAAS/iH,KAAK4yB,EAAE00J,EAAGpjE,WAAYqjE,EAAGrjE,WAAY+sN,EAAG/sN,aAAenB,EAASE,OAgt1BpHiuN,CAAM9nM,GAAOtzI,EAAQ,QAASszI,GAAOtzI,EAAQ,OAAQszI,GAAOtzI,EAAQ,aAAa,CAAC/C,EAAM20B,EAAKhK,KACrG,UAAbA,EAAuBqgH,GAAQ5sF,IAChCt5B,SAAS9kB,EAAM,IAAK8kB,SAAS6P,EAAK,OAC3Cq8F,YAAW,KACZ,MAAMrF,EAAW29E,GAAWvmM,GAC5B,OAAOomI,GAASxd,EAAS3rH,KAAM2rH,EAASh3F,IAAI,IAgBxCypT,GAAe,CAAC75P,EAAW85P,EAAUC,EAAcn0I,EAAQz+E,EAAQnxE,EAAOmuO,IAd5D,EAACnkM,EAAWg6P,EAAQp0I,EAAQz+E,EAAQg9J,KACtD,MAAMpqO,EAASoqO,EAAUpqO,OACnBkgS,EAAgB5D,GAAW2D,EAAQp0I,EAAQz+E,GAC3C2qG,EAAOpR,GAAMu5H,EAAcx+U,KAAMs+C,EAAOj0B,EAAGi0B,EAAOj0B,EAAIi0B,EAAOnvB,MAAQu5P,EAAUv5P,OAC/EmnM,EAAOrR,GAAMu5H,EAAc7pT,IAAK2pB,EAAOr0B,EAAGq0B,EAAOr0B,EAAIq0B,EAAO1pB,OAAS8zP,EAAU9zP,QAC/E6pT,EAAYt1M,GAASktF,EAAMC,GACjC,OAAOioH,EAAOnuN,MAAK,KACjB,MAAMsuN,EAAW7D,GAAS4D,EAAWt0I,EAAQz+E,GAC7C,OAAOttE,GAAOsgS,EAAS1+U,KAAM0+U,EAAS/pT,IAAI,GACzCsyK,EAAWw3I,IAAY,KACxB,MAAMrpH,EAAUslH,GAAQ+D,EAAWt0I,EAAQz+E,GAC3C,OAAOsf,GAAMoqF,EAAQp1N,KAAMo1N,EAAQzgM,IAAI,GACvC,EAcKgqT,CAAYp6P,EAXF85P,EAASjuN,MAAK,KAC7B,MAAMwuN,GArMSjE,EAqMc2D,EArMPxvQ,EAqMqBv0B,EAAMv6C,KArMnB+uE,EAqMyBx0B,EAAM5lB,IArMpBgmT,EAAMvqN,MAAK,CAAC/lG,EAAGJ,IAAMm0B,GAAO/zB,EAAIykD,EAAQ7kD,EAAI8kD,KAAS,CAAC1kD,EAAGJ,IAAMk/G,GAAS9+G,EAAIykD,EAAQ7kD,EAAI8kD,KAAS,CAAC1kD,EAAGJ,IAAM+gH,GAAM3gH,EAAIykD,EAAQ7kD,EAAI8kD,MAA5J,IAAC4rQ,EAAO7rQ,EAAQC,EAsM9B,MAAMmtQ,EAAaxB,GAAQkE,EAAYz0I,EAAQz+E,GAC/C,OAAOsf,GAAMkxM,EAAWl8U,KAAMk8U,EAAWvnT,IAAI,IAC5C8mT,IACD,MAAMoD,EAAWhD,GAAWt3P,EAAWk3P,EAAU6C,EAAc/jS,EAAO4vJ,EAAQz+E,GAI9E,OAHAmzN,EAAS3wO,MAAMv+D,MAAKu+D,IAClButO,EAASqD,SAASv6P,EAAW2pB,EAAM,IAE9B2wO,EAASlE,KAAK,IAEiBxwI,EAAQz+E,EAAQg9J,GAgBpDq2D,GAAgB,CAAC9B,EAAYn4L,KAAS,CAC1CxmG,OAAQ2+R,EAAW56G,YACnBztM,OAAQovG,GAAW8gB,EAAKhiJ,SACxBqsB,MAAO45G,GAAW+b,EAAKhiJ,WAEnBo/D,GAAO,CAACqiB,EAAW04P,EAAY/iK,EAAW8kK,EAAU9/U,KACxD,MAAMq7C,EAAQ2/H,EAAUjjH,OAAO+nR,EAAU9/U,GACnC+/U,EAAgB/kK,EAAUglK,eAAeluN,YAAW,IAAM+tN,GAAc9B,EAAY14P,KAC1FhqC,EAAM5K,MAAKwvS,IAtBE,EAAC56P,EAAW04P,EAAYv0D,EAAWnuO,KAChD,MAAMx3C,EAASk6U,EAAWp2R,UAAU09B,EAAUzhF,SAC9C,GAAIm6U,EAAWC,iBAAkB,CAC/B,MAAMljN,EAAMwuE,GAAQjkH,EAAUzhF,SACxBqnM,EAAS1oC,GAAMznC,GACftO,EAASqxF,GAAUh6M,GACnBu7U,EAAeL,GAAgBl7U,GAC/B+4U,EAAWsC,GAAa75P,EAAW04P,EAAWX,MAAOgC,EAAcn0I,EAAQz+E,EAAQnxE,EAAOmuO,GAC1Fh7N,EAASotR,GAASgB,EAAU3xI,EAAQz+E,GAC1C5uF,GAAW/5B,EAAQ2qD,EACrB,CACAuvR,EAAWmC,OAAO76P,EAAWxhF,EAAQw3C,EAAM,EAYzC8kS,CAAO96P,EAAW04P,EAAYgC,EAAeE,EAAI,GACjD,EAEEr+U,GAAO,CAACyjF,EAAW+2F,EAAS2hK,EAAY/iK,KAC5CoB,EAAQ3rI,KAAK+tS,IACbT,EAAWX,MAAM3sS,MAAK8rS,IACpBW,GAAS73P,EAAWk3P,EAAS,IAE/B,MAAM14U,EAASk6U,EAAWp2R,UAAU09B,EAAUzhF,SAC9Co3K,EAAUn9G,QACVkgR,EAAWqC,OAAO/6P,EAAWxhF,EAAO,EAEhC6vK,GAAWj3H,GAAU,CAACshS,EAAY/iK,KACtC,MAAMqlK,EAAmBz6L,IACvBo1B,EAAUslK,aAAaT,GAAc9B,EAAYn4L,GAAM,EAEzD,OAAO8yD,GAAS,CACdE,GAAMrB,MAAgB3xD,IACpBo1B,EAAUglK,eAAevvS,MAAK,IAAM4vS,EAAiBz6L,IAAM,OAE1DnpG,EAAOshS,EAAY/iK,EAAWqlK,IACjC,EAeJ,IAAIE,GAAyBpgV,OAAOqhE,OAAO,CACvCriC,UAAW,KACX7B,QALct9B,GAAS8wH,EAASlwH,KAAKmpI,GAAc/pI,EAAMmrB,EAAGnrB,EAAM+qB,IAMlEm0J,SALe,CAACvE,EAAK7gD,IAAOiQ,GAAcjQ,EAAGh5H,KAAO65K,EAAI75K,KAAMg5H,EAAGrkG,IAAMklJ,EAAIllJ,OAQ/E,MAAM+qT,GAAW,CAACzC,EAAY/iK,EAAWqlK,IAAqB,CAACznI,GAAM3kC,MAAa,CAAC5uF,EAAWkwH,KAE1F,GAAmB,IADPA,EAAev1M,MAAMotB,IACzBhlB,OACN,OAEFmtM,EAAe3zM,OACf,MAAM6+U,EAAS,IAAM7+U,GAAKyjF,EAAWyrC,EAAS/iH,KAAKquK,GAAU2hK,EAAY/iK,GACnEa,EAAYutG,GAAgBq3D,EAAQ,KACpCtkK,EAAU,CACdd,KAAMolK,EACN5kK,UAAWA,EAAUwtG,SACrBztG,UAAW6kK,EACXz9Q,KAAMhjE,IACJ67K,EAAUhlH,SACVmM,GAAKqiB,EAAW04P,EAAY/iK,EAAWulK,GAAWvgV,EAAM,GAGtDo8K,EAAUsiK,GAAgBr5P,EAAW04P,EAAWY,aAnC3CxiK,IAAWu8B,GAAS,CACjCE,GAAM3kC,KAAakI,EAAQP,WAC3Bg9B,GAAMzkC,KAAWgI,EAAQd,MACzBu9B,GAAM7C,MAAa,CAACnwD,EAAM2vD,KACxBp5B,EAAQn5G,KAAKuyI,EAAev1M,MAAM,IAEpC44M,GAAM5C,KAAY75B,EAAQN,aA6B4C6kK,CAAOvkK,IAEzEkkK,EAAiBh7P,GACjB+4P,GAAU/4P,EAAW+2F,EAEhB,KAELukK,GAAW,IACZ7B,GACH35H,GAAS,UAAW,CAAEzxC,SAAUA,GAAS8sK,OAuB3C,IAAII,GAAyBzgV,OAAOqhE,OAAO,CACvCriC,UAAW,KACX7B,QATYt9B,IACd,MACMgvD,EADMhvD,EAAMotB,IACE4hC,QACpB,OAA0B,IAAnBA,EAAQv+C,OAPGu+C,KAClB,MAAM26N,EAAQ36N,EAAQ,GACtB,OAAO8hE,EAAS/iH,KAAKg8H,GAAc4/I,EAAMr6N,QAASq6N,EAAMp6N,SAAS,EAKnCsxR,CAAY7xR,GAAW8hE,EAASE,MAAM,EAOlEkuD,SALa,CAACvE,EAAK7gD,IAAOiQ,GAAcjQ,EAAGh5H,KAAO65K,EAAI75K,KAAMg5H,EAAGrkG,IAAMklJ,EAAIllJ,OAQ7E,MAAMqrT,GAAW,CAAC/C,EAAY/iK,EAAWqlK,KACvC,MAAMU,EAAmB10I,KACnB20I,EAAe37P,IACnBzjF,GAAKyjF,EAAW07P,EAAiBj+U,MAAOi7U,EAAY/iK,GACpD+lK,EAAiBzuU,OAAO,EAE1B,MAAO,CACLsmM,GAAM/jI,MAAc,CAACwQ,EAAWkwH,KAC9BA,EAAe3zM,OACf,MAAMA,EAAO,IAAMo/U,EAAa37P,GAC1B82F,EAAU,CACdd,KAAMz5K,EACNi6K,UAAWhsI,EACX+rI,UAAWh6K,EACXohE,KAAMhjE,IACJgjE,GAAKqiB,EAAW04P,EAAY/iK,EAAW4lK,GAAW5gV,EAAM,GAGtDo8K,EAAUsiK,GAAgBr5P,EAAW04P,EAAWY,aA5C7CxiK,IAAWu8B,GAAS,CACjCE,GAAM/jI,KAAcsnG,EAAQP,WAC5Bg9B,GAAM7jI,KAAYonG,EAAQd,MAC1Bu9B,GAAM9C,KAAe35B,EAAQd,MAC7Bu9B,GAAM9jI,MAAa,CAAC8wE,EAAM2vD,KACxBp5B,EAAQn5G,KAAKuyI,EAAev1M,MAAM,MAuCoCihV,CAAO9kK,IAC3E4kK,EAAiB/9U,IAAIo5K,GAEnBikK,EAAiBh7P,GACjB+4P,GAAU/4P,EAAW+2F,EAEhB,IAETw8B,GAAM9jI,MAAa,CAACuQ,EAAWkwH,KAC7BA,EAAe3zM,OACfohE,GAAKqiB,EAAW04P,EAAY/iK,EAAW4lK,GAAWrrI,EAAev1M,MAAM,IAEzE44M,GAAM7jI,MAAY,CAACsQ,EAAWkwH,KAC5BA,EAAe3zM,OACfo/U,EAAa37P,EAAU,IAEzBuzH,GAAM9C,KAAekrI,GACtB,EAgBGxtK,GAAQmtK,GACRh3D,GAfW,IACZm1D,GACH35H,GAAS,UAAW,CAAEzxC,SAAUA,GAASotK,OAcrCI,GAPW,IACZpC,GACH35H,GAAS,UAAW,CAAEzxC,SAAUA,IANjB,CAACqqK,EAAY/iK,EAAWqlK,IAAqB,IACzDG,GAASzC,EAAY/iK,EAAWqlK,MAChCS,GAAS/C,EAAY/iK,EAAWqlK,SAWrC,IAAIc,GAAgChhV,OAAOqhE,OAAO,CAC9CriC,UAAW,KACXq0I,MAAOA,GACPm2G,MAAOA,GACPu3D,aAAcA,KA8BlB,IAAIE,GAAyBjhV,OAAOqhE,OAAO,CACvCriC,UAAW,KACXmvC,KA7BW,KACb,IAAIzqB,EAAWitE,EAASE,OACpBw4J,EAAY14J,EAASE,OACzB,MAcMorF,EAAYrU,EAAW,CAAC,GAC9B,OAAOoU,GAAK,CACVC,YACAv+I,MAjBY,KACZha,EAAWitE,EAASE,OACpBw4J,EAAY14J,EAASE,MAAM,EAgB3Bj5D,OATa,CAAC3mC,EAAMiwT,IAAcjwT,EAAKkM,QAAQ+jT,GAAW/3Q,MAAKg4Q,GAL1C,EAAClwT,EAAM0oG,KAC5B,MAAM71G,EAAS4/B,EAAS7hD,KAAI24K,GAAOvpJ,EAAK8tJ,SAASvE,EAAK7gD,KAEtD,OADAj2E,EAAWitE,EAAS/iH,KAAK+rH,GAClB71G,CAAM,EAE4Ds3B,CAAenqB,EAAMkwT,KAU9FtB,aANmB,IAAMx2D,EAOzB82D,aAVmBrtU,IACnBu2Q,EAAY14J,EAAS/iH,KAAKkF,EAAK,GAU/B,IAQJ,MAAMsuU,GAAW5kI,GAAY,CAC3BE,UAAW,OACX1sD,SAAUgxL,GACV55U,KAAM,WACNm3C,OAAQ,CACNjC,OAAQ,CAACshS,EAAY/iK,IACH+iK,EAAWyD,QACZ9tK,SAASqqK,EAAY/iK,IAGxChsE,MAAO,CACLqlL,KAAMlvD,IAAW,CACfk4G,OAAQl4G,EAAQk4G,OAChBhqS,MAAO8xL,EAAQ9xL,MACfm1G,OAAQ28E,EAAQ38E,OAChBx5C,MAAO8hB,EAASlwH,KAAKukO,EAAQn2H,UAGjCw3E,MAAO46J,GACP/lI,KAAMwiI,KAKF4D,GAAW,CAACC,EAAahxM,EAAIvlH,EAAGJ,EAAGkF,EAAOyF,IAAWgsT,EAAYxwN,MAAK,IAAMqwN,GAASltD,KAAK,CAC9FgpD,OAAQpzM,GAAS9+G,EAFAw2T,GAEgB52T,EAFhB42T,IAGjBtuS,MAAO02F,GAAc95G,EAAOyF,GAC5B8yH,OAAQve,GAASnZ,EAAS/iH,KAAKod,GAAI2lG,EAAS/iH,KAAKgd,IACjDikF,MAAO,CAAE0hC,UACPkxM,IACF,MAAMC,EAAa12T,EAPFw2T,GAQXG,EAAY/2T,EARD42T,GAWXr+R,EAAOs+R,EAAeh+U,QAAQmxH,IAAI1lE,wBACxC,OAAOkyR,GAASltD,KAAK,CACnBgpD,OAAQpzM,GAAS43M,EAAYC,GAC7BzuS,MAAO02F,GAfO,OAgBdye,OAAQve,GAASnZ,EAAS/iH,KAAKod,EAAIm4B,EAAKrzB,MAAQ,GAAI6gG,EAAS/iH,KAAKgd,EAAIu4B,EAAK5tB,OAAS,IACpFs5E,MAAO,CAAE0hC,OACT,IAEEqxM,GAAiB,CAACtE,EAAelgN,EAAMoxD,KAEpC,CACL8uJ,gBACAhB,SAAU,iBACVC,QAAS,gBACTkD,SAAU,CAACv6P,EAAW2pB,KACpB,MAAM0hC,EAAK1hC,EAAM0hC,GANF,EAACtC,EAASsC,IAAOtC,EAAQ3c,QAAOuwN,GAAalhT,GAAGkhT,EAAWtxM,KAOrEuxM,CAAW1kN,EAAKz6H,MAAO4tI,KAC1BnT,EAAKv6H,IAAI0tI,GACTi+C,EAASj+C,GACX,EAEFmsM,UAAU,IAGRqF,GAAiB9E,GAASpnF,GAAOL,GAAOjqB,OAAO,CACnD32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,iBAEZ64O,iBAAkBx5C,GAAS,CACzBklI,GAASxqT,OAAO,CACd3F,KAAM,eACNutT,aAAc,UACdvB,UAEFjsD,GAAYp6P,OAAO,CAAC,KAEtB2xL,WAAY,CACVz0C,UAAW,CACT,WACA,wBAEFp/F,WAAY,CACV,WACA,4BAIAstQ,GAAU,CAAC/sM,EAAQkmC,KACvB,MAAM8mK,EAAQpzK,GAAK,IACbqzK,EAAQrzK,GAAK,IACbyyC,EAAYzyC,IAAK,GACjBv2B,EAAY4zD,KACZ3zD,EAAa2zD,KACbi2I,EAAiB5xM,IACrB,MAAM3hF,EAAMi9I,GAAWt7D,GACvB,OAAO+wM,GAASc,EAAWzsN,OAAOwlD,GAAO5qC,EAAI3hF,EAAI5jC,EAAG4jC,EAAIhkC,EAAGgkC,EAAI9+B,MAAO8+B,EAAIr5B,OAAO,EAG7E8sT,EAAqB9xM,IACzB,MAAM3hF,EAAMi9I,GAAWt7D,GACvB,OAAO+wM,GAASgB,EAAe3sN,OAAOwlD,GAAO5qC,EAAI3hF,EAAIhuD,MAAOguD,EAAI9P,OAAQ8P,EAAI9+B,MAAO8+B,EAAIr5B,OAAO,EAG1FgtT,EAAeX,IANG,IAAM35I,EAAMg6I,EAAMt/U,OAAO4tI,GAAM4xM,EAAe5xM,MAMjB+H,GAAWj3I,IAC9Dk3I,EAAW51I,MAAM2tC,MAAK6oG,IACpBlE,EAAO7xH,SAAS,sBAAuB,CACrC/hB,QACA83I,UACA,GACF,IAEEqpM,EAAmBZ,IATG,IAAM35I,EAAMi6I,EAAMv/U,OAAO4tI,GAAM8xM,EAAmB9xM,MASjBgI,GAAYY,IACvEb,EAAU31I,MAAM2tC,MAAKjvC,IACnB4zI,EAAO7xH,SAAS,sBAAuB,CACrC/hB,QACA83I,UACA,GACF,IAEEipM,EAAaL,GAAeQ,GAC5BD,EAAiBP,GAAeS,GAChC18R,EAAUupK,GAAQ+yH,EAAWpsF,UAC7BhwM,EAAcqpK,GAAQizH,EAAetsF,UAWrC2nF,EAAS,CAAC5wU,EAAUqwH,EAAMqlN,EAAen0R,KAC7C,MAAM4lO,EAAOuuD,EAAcrlN,GAC3BgkN,GAASzD,OAAO5wU,EAAUmnR,GAZH,EAACnnR,EAAUqwH,EAAMslN,EAASC,KACjD,MAAMC,EAAWxlN,EAAKxI,IAAI1lE,wBAC1B0mE,GAAS7oH,EAAStJ,QAAS,WAC3B,MAAMo/U,EAAiB30R,GAAY8nE,GAAaS,QAAQwe,EAAO5tC,YAAYutB,IAAIm+C,YACzE+vK,EAAgBJ,EAAQE,GACxBG,EAAgBJ,EAAQC,EAAUC,IACpCC,GAAiBC,IACnBt5I,GAAM18L,EAAStJ,QAAS,UAAW,OACrC,EAOAu/U,CAAiBj2U,EAAUqwH,GAFXj6E,GAAQA,EAAKmL,GAAO,IACpB,CAACnL,EAAM0/R,IAAmB1/R,EAAKmL,GAAOu0R,GACJ,EAE9CI,EAAc7lN,GAAQugN,EAAO73R,EAASs3E,EAAM+kN,EAAgB,OAE5De,EAAkB9lN,GAAQugN,EAAO33R,EAAao3E,EAAMilN,EAAoB,UAE9E,GAAI72M,KAAWxI,WAAWI,UAAW,CACnC,MAAM+/M,EAAar9T,GAAOmiL,EAAMniL,EAAKkwG,GAAaS,SAClDwe,EAAO8K,GAAG,wBAAwB13I,IAC3Bi5M,EAAU3+M,QACbs0E,GAAOkkG,EAAMr1H,GACbmxB,GAAOkkG,EAAMn1H,GACbs7J,EAAUz+M,KAAI,IAEhB,MAAMxB,EAAQ20H,GAAaS,QAAQpuH,EAAEhH,OAC/B83I,EAASnjB,GAAaS,QAAQpuH,EAAE8wI,QACtCb,EAAUz1I,IAAIxB,GACdk3I,EAAW11I,IAAIs2I,GACfxoB,EAASlwH,KAAK4H,EAAEkvK,YAAYjnI,MAAKinI,IAC/B0qK,EAAMp/U,IAAIsgV,EAAW5rK,EAAW5B,gBAChCusK,EAAMr/U,IAAIsgV,EAAW5rK,EAAWvB,mBAChCitK,EAAY5hV,GACZ6hV,EAAgB/pM,EAAO,GACvB,IAEJlE,EAAO8K,GAAG,2CAA2C,KAtBzBzH,EAAU31I,MAAM2tC,KAAK2yS,GAEjB1qM,EAAW51I,MAAM2tC,KAAK4yS,EAsB/B,IAEvBjuM,EAAO8K,GAAG,uBAAuB,KAC3BuhE,EAAU3+M,QACZu0E,GAAOpxB,GACPoxB,GAAOlxB,GACPs7J,EAAUz+M,KAAI,IAEhBy1I,EAAUnmI,QACVomI,EAAWpmI,OAAO,GAEtB,GAKF,MAaMixU,GAAoB,CAACnuM,EAAQgmC,EAAUg5F,KAC3C,IAAIrgQ,EACJ,MAAMo0G,EAA0C,QAA7Bp0G,EAAKqnK,EAASjzD,iBAA8B,IAAPp0G,EAAgBA,EAAK,SACvEyvU,EAAgB,CAACj8U,EAAM3D,EAAS3C,IAAU00P,GAAOjqB,OAAO,CAC5D32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,4BACVxV,WAAY,CAAE,aAAcvG,IAE9BqsN,WAAY,CAACqC,GAAOpoN,IACpB2B,OAAQu6U,IACNruM,EAAO0L,QACP1L,EAAOI,UAAU9sI,OAAO9E,GACxBwxI,EAAO0uB,aAAa,EAEtB+xF,iBAAkBx5C,GAAS,CACzBi8C,GAAYvhO,OAAO,IACdq9O,EAAmBnN,SAAS3rD,UAAU,CACvC4rD,YAAakN,EAAmBtxN,UAAU,CACxC,yBACAl/C,EAAQoxH,SAASnwH,gBAEnBs5M,OAAQ,CAACv4D,EAAMr7H,KAnCL,EAACm5T,EAAkBC,KACrC,MAAMC,EAAa9yN,EAASlwH,KAAK8oM,GAAMg6I,EAAkB,OAAO5xN,YAAW,KACzE,MAAM59F,EAAK8xL,GAAW,QAEtB,OADAvc,GAAMk6I,EAAiB,KAAMzvT,GACtBA,CAAE,IAEXu1K,GAAMi6I,EAAkB,mBAAoBE,EAAW,EA8B7CC,CAAYj+L,EAAKhiJ,QAAS2mB,EAAQ3mB,QAAQ,EAE5Cy6M,OAAQz4D,IA9BH89L,QA+BI99L,EAAKhiJ,QA9BtB+lM,GAAS+5I,EAAkB,mBA8BG,MAI1BlxE,GAAwB4B,EAAmB9iC,YAC3CkiC,IAAgB,IAAMY,EAAmBE,wBAAwB,aA0CrE,MAAO,CACLv/I,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,uBACVxV,WAAY,CAAE49O,KAAM,eAEtBl+F,WAAYm1D,GAAS,CACnBwkC,GAAO9pN,OAAO,CACZ3F,KAAM,OACNlkB,SAAU,qBAEZ0kO,GAAU76M,OAAO,CAAE4pC,SAAUyzM,EAAmB9iC,aAChDkiC,IAAgB,IAAMY,EAAmBE,wBAAwB,SACjE9d,GAAYz/N,OAAO,CAAC,GACpB0rN,GAAU1rN,OAAO,CAAC,GAClBA,GAAO,oBAAqB,CAAC6iL,IAAc,CAACh0D,EAAMkyB,KAC9C1iC,EAAOo+L,UAAU5zU,IAAI,UAAW,+BAA+B,IAAMihP,GAAOzK,QAAQxwF,KACpFxQ,EAAO8K,GAAG,cAAc13I,IACtB,MAAMs7U,EAtCG7rN,KACjB,MAAM6rN,EAAU,GAChB,IAAI59T,EAAI+xG,EAAQxnH,OAChB,KAAOyV,KAAM,GAAG,CACd,MAAMokC,EAAS2tE,EAAQ/xG,GACvB,GAAwB,IAApBokC,EAAO59C,UA3DwB,QAAxBuxH,EA2D4B3zE,GA3DjB0qE,WAAuBiJ,EAAIx1H,aAAa,mBAA2D,aAAtCw1H,EAAIx1H,aAAa,iBA2DpD,CAC9C,MAAM2P,EAAOqhQ,GAAgBrkI,EAAQ9qF,GAOrC,GANKlyC,EAAK+7K,sBACR2vJ,EAAQ1gV,KAAK,CACXmE,KAAM6Q,EAAK7Q,KACX3D,QAAS0mD,IAGTlyC,EAAK2rU,uBACP,KAEJ,CACF,CAvEa9lN,MAwEb,OAAO6lN,CAAO,EAoBUE,CAAWx7U,EAAEyvH,SACvB+xB,EAAc85L,EAAQrzU,OAAS,EAlDhB6iH,EAkDmCwwN,GAlDvB,CAACptR,EAAK09B,EAAMnzF,KACrD,MAAM2C,EAAU4/U,EAAcpvP,EAAK7sF,KAAM6sF,EAAKxwF,QAAS3C,GACvD,OAAc,IAAVA,EACKy1D,EAAIz0D,OAAO,CAAC2B,IAEZ8yD,EAAIz0D,OAAO,CAbM,CAC1B8yH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,+BACVxV,WAAY,CAAE,eAAe,IAE/B8lN,WAAY,CAACqC,GAAO,IAAKxnG,QASrBvkH,GAEJ,GACC,IAwC0E,GACnE6+O,GAAUz/O,IAAI4iJ,EAAMoE,EAAY,GAChC,QAGRsjE,WAAY,GACb,EAGH,IAAI22H,IACH,SAAUA,GACTA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAsB,SAAI,GAAK,UAC7C,CAJA,CAIEA,KAAgBA,GAAc,CAAC,IACjC,MAOMxtT,GAAS,CAAC2+G,EAAQ+b,EAAQ+yL,KAC9B,MAAMj0R,EAAYkmE,GAAaS,QAAQwe,EAAOmyC,gBACxC6xD,EATc,EAAChkG,EAAQ+b,EAAQ+yL,EAAYC,EAAgBC,KACjE,MAAMhrG,EAAa,CAAE1jN,OAAQ60S,GAAe4Z,EAAiBhzL,EAAO17H,IAAK07N,GAAmB/7G,GAASi8G,GAAmBj8G,KAIxH,OAHI8uM,IAAeD,GAAYI,OAC7BjrG,EAAWnpN,MAAQs6S,GAAe6Z,EAAgBjzL,EAAOrwJ,KAAMowP,GAAkB97G,GAASg8G,GAAkBh8G,KAEvGgkG,CAAU,EAIEkrG,CAAclvM,EAAQ+b,EAAQ+yL,EAAYh6I,GAAMj6I,GAAY4jE,GAAM5jE,IACrFxf,GAAK2oM,GAAY,CAAChqM,EAAKm1S,KACjBz7T,EAASsmB,IACXw6J,GAAM35I,EAAWs0R,EAAKja,GAAQl7R,GAChC,IAp7eqBgmG,KACvBA,EAAO7xH,SAAS,eAAe,EAq7e/BokK,CAAiBvyC,EAAO,EAapBovM,GAAkB,CAACpvM,EAAQ8uM,EAAY/4T,EAAGJ,KAC9C,MACMswB,EAAQ0uF,GADA,GACc5+G,EADd,GACyBJ,GAEvC,OADA0L,GAAO2+G,EAAQ/5F,EAAO6oS,GACfpzN,EAAS/iH,MAAK,EAAK,EAEtB02U,GAAsB,CAACrvM,EAAQg/H,KACnC,MAAM8vE,EAjBc9uM,KACpB,MAAM3+G,EAASs8N,GAAU39G,GACzB,OAAe,IAAX3+G,EACKwtT,GAAYS,KACC,SAAXjuT,EACFwtT,GAAYI,KAEZJ,GAAYU,QACrB,EASmBC,CAAcxvM,GACjC,GAAI8uM,IAAeD,GAAYS,KAC7B,OAAO5zN,EAASE,OAElB,MAAM6zN,EAAcX,IAAeD,GAAYI,KAAO,6CAA+C,yDACrG,OAAOvzN,EAAS/iH,KAAKk4P,GAAS,gBAAiB,CAC7Cl1I,IAAK,MACL/zG,QAAS,CAAC,gCACVxV,WAAY,CACV,aAAc4sQ,EAAmBtxN,UAAU+hS,GAC3C,gBAAiB,iBAEnB39L,WAAY,CACVq6L,GAASxqT,OAAO,CACd3F,KAAM,QACN4sT,kBAAkB,EAClBkC,OAAQ,CAAC7nB,EAAO3gQ,EAASrc,IAAU5kB,GAAO2+G,EAAQ/5F,EAAO6oS,GACzDvF,aAAc,gBAEhB99F,GAAO9pN,OAAO,CACZ3F,KAAM,UACNkvN,OAAQ,IAAMkkG,GAAgBpvM,EAAQ8uM,GAAa,EAAG,GACtD3jG,QAAS,IAAMikG,GAAgBpvM,EAAQ8uM,EAAY,EAAG,GACtD9jG,KAAM,IAAMokG,GAAgBpvM,EAAQ8uM,EAAY,GAAI,GACpD7jG,OAAQ,IAAMmkG,GAAgBpvM,EAAQ8uM,EAAY,EAAG,KAEvD1tF,GAAYz/N,OAAO,CAAC,GACpBssN,GAAStsN,OAAO,CAAC,GACjBuhO,GAAYvhO,OAAOq9O,EAAmBnN,SAAS3rD,UAAU,CAAE4rD,YAAakN,EAAmBtxN,UAAU,eAEtGsxN,EAAmB5kJ,OAAO,EA+DzBs1N,GAAkB,CAAC1vM,EAAQg/H,KAC/B,MAyCM2wE,EAAuB,KAC3B,MAAMz3H,EAAa,GAOnB,OANIl4E,EAAO4wC,UAAU,cACnBsnC,EAAWlqN,KAzGO,EAACgyI,EAAQg/H,KAC/B,MAAM4wE,EAAmB,CAACp/L,EAAM1uG,EAAO9lB,IAASqxN,GAAUz/O,IAAI4iJ,EAAM,CAAC+pE,GAAOykD,EAAmBtxN,UAAU,CACrG,OAAS1xB,EACT8lB,EAAM9lB,QAEV,OAAOukO,GAAOjqB,OAAO,CACnB32G,IAAK,CACHhE,IAAK,SACL/zG,QAAS,CAAC,6BAEZswM,WAAY,GACZuoC,iBAAkBx5C,GAAS,CACzBm2D,GAAwB4B,EAAmB9iC,YAC3CkiC,IAAgB,IAAMY,EAAmBE,wBAAwB,SACjE9d,GAAYz/N,OAAO,CAAC,GACpB0rN,GAAU1rN,OAAO,CAAC,GAClB+yM,GAAa/yM,OAAO,CAClBovM,MAAO,CACL/0M,KAAM,SACNo4M,aAAc,CACZp4M,KAAM,QACN8lB,MAAO,CACL+tS,MAAO,EACPC,WAAY,OAKpBnuT,GAAO,mBAAoB,CACzBgjL,IAAen0D,IACb,MAAMu/L,EAAar7G,GAAapgL,SAASk8F,GACnCymL,EAA8B,UAApB8Y,EAAW/zT,KAAmB,aAAe,QAC7D04M,GAAartH,SAASmpC,EAAM,CAC1Bx0H,KAAMi7S,EACNn1R,MAAOiuS,EAAWjuS,QAEpB8tS,EAAiBp/L,EAAMu/L,EAAWjuS,MAAOm1R,EAAQ,IAEnDzyH,IAAch0D,IACZxQ,EAAO8K,GAAG,mBAAmB13I,IAC3B,MAAM,KAAC4oB,GAAQ04M,GAAapgL,SAASk8F,GACrCkkF,GAAartH,SAASmpC,EAAM,CAC1Bx0H,OACA8lB,MAAO1uC,EAAE48U,YAEXJ,EAAiBp/L,EAAMp9I,EAAE48U,UAAWh0T,EAAK,GACzC,QAIRs3L,WAAY,CACV,CAAC3R,MAAc,CACb,YACA,uBACA,sBAGJ,EAgDkBsuI,CAAgBjwM,EAAQg/H,IAEtCthB,GAAY19G,IACdk4E,EAAWlqN,KA9CN,CACL2xH,IAAK,CACHhE,IAAK,OACL/zG,QAAS,CAAC,4BAEZswM,WAAY,CAAC,CACTv4F,IAAK,CACHhE,IAAK,IACLvpH,WAAY,CACV,KAAQ,mHACR,IAAO,WACP,OAAU,SACV,aAAc4tI,EAAOtyF,UAAU,CAC7B,iBACA,aAGJmpK,UAAW72E,EAAOtyF,UAAU,CAC1B,iBA9QH,6qEA+QQ38C,UAGT+gJ,WAAYm1D,GAAS,CAACgnC,GAAStsN,OAAO,CAAC,SA0BtC,CACLg+F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,mCAEZswM,aACD,EAEGg4H,EAAoB,KACxB,MAAMh4H,EAAa,GACbi4H,EAAmBpyF,GAAqB/9G,GACxCowM,EAA0B3yF,GAAez9G,GACzCqwM,EAA6B3yF,GAAY19G,IAAWA,EAAO4wC,UAAU,aACrE0/J,EAA0B,KAC9B,MAAMC,EAAY,4CACZC,EAAU,0CAEhB,GAAIL,EAAkB,CACpB,MAAMM,EAAoB,uCAC1B,OAAKJ,GAA+BD,EAMhCC,IAA+BD,EAC1B,CACLK,EACAD,GAGG,CACLC,EACAF,GAbO,CACLE,EALc,8CAmBpB,CACA,MAAO,CAACJ,IAA+BD,EAA0BI,EAAUD,EAAU,EAWvF,OATIH,GACFl4H,EAAWlqN,KAAKmgV,GAAkBnuM,EAAQ,CAAC,EAAGg/H,IAE5CmxE,GACFj4H,EAAWlqN,KAhEiB,MAC9B,MAAM0iV,EAAetxE,GAAY,SAEjC,MAAO,CACLz/I,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,6BAEZswM,WAAY,CAACqC,GAAOznC,GAASplI,UAAU,CAN5B,qBAQPgjS,MAEL,EAoDiBC,IAEdN,GACFn4H,EAAWlqN,KAAK2hV,KAEdz3H,EAAW78M,OAAS,EACf,CAAC,CACJskH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CACP,mCACG0oU,MAGPp4H,eAGC,EAAE,EAOX,MAAO,CACLv4F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,kBAEZswM,WAVoB,MACpB,MAAMA,EAAag4H,IACb/rL,EAAgBkrL,GAAoBrvM,EAAQg/H,GAClD,OAAO9mD,EAAWrrN,OAAOs3J,EAAclnC,UAAU,EAOrCw9J,GACb,EAGGm2D,GAAoB,CAACh5T,EAAOmiJ,IAAcA,EAAUrsK,MAAMmvH,SAAS,UAAWjlG,2BAC9Ei5T,GAAU,CAAC7wM,EAAQ8wM,KACvB,MAAMjmJ,EAAW7qD,EAAO2sC,OAClB3wJ,EAAO6uK,EAAW4sI,GAAS9D,GAC3BjgE,EAASnU,GAAgBv/G,GAAU22K,GAAe/B,GAClDm8B,EArsFiB,MACvB,MAAM/c,EAAW/8H,KACX88H,EAAU98H,KACV6mE,EAAS7mE,KAUf,MAAO,CACL+8H,WACAD,UACAj2D,SACAkzE,iBAZuB,KACvB,MAAMC,EAAsBjd,EAAStmU,MAAMd,KAAI2iL,GAAMA,EAAG0uF,aAClDizE,EAAqBnd,EAAQrmU,MAAMd,KAAI2iL,GAAMA,EAAG0uF,aACtD,OAAOgzE,EAAoBn1N,MAAK,IAAMo1N,EAAmBj0N,YAAWk0N,GAAMD,EAAmBp1N,MAAK,IAAM,CAACq1N,KAAKvtO,GAAMl4E,GAAGylT,EAAG3iV,QAASo1G,EAAGp1G,SAAW,CAAC2iV,GAAM,CACtJA,EACAvtO,MACC,EAOHwtO,oBAd0B,CAACx5T,EAAO2T,IAAM,IAAMuyO,EAAOpwQ,MAAMwmE,MAAK01Q,GAAMr+S,EAAEq+S,EAAG7rE,kBAAiBlhJ,SAAS,kBAAmBjlG,+BAezH,EAkrFkBy5T,GACbC,EAAiBr6I,KACjBs6I,EAAuBt6I,KACvBu6I,EAAsBv6I,KAItBw6I,EAHWl7M,KACQxI,WAAWI,UAEJ,CADL,sBAC4B,GACjDujN,EAAkBxyF,GAAwBl/G,GAC1C+0L,EAAcx4E,GAAev8G,GAC7B2xM,EAAe/wF,GAAO,CAC1BjhI,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,oBAGRgqU,EAAqBhxF,GAAO,CAChCjhI,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,2BAGRgvS,EAAa,IAAMm6B,EAAWjzE,OAAOpwQ,MAAMd,KAAI2iL,GAAMA,EAAGwuF,iBAAgB7pM,KAAK4xP,GAAeS,WAG5FsrB,EAAgBd,EAAWK,oBAAoB,aAAcO,EAAajxN,QAC1E6rL,EAAsBwkC,EAAWK,oBAAoB,oBAAqBQ,EAAmBlxN,QAC7F0kM,EAAc2rB,EAAWK,oBAAoB,UAAWtrB,GAAe/oE,YACvEs/D,EAAe00B,EAAWK,oBAAoB,WAAYtrB,GAAemB,aACzE6qB,EAAavgC,GAAO,CACxB/uD,MAN0B,IAAM/uG,GAAOM,WAAWg9L,EAAWhd,QAAQrmU,MAAMd,KAAI2iL,GAAMA,EAAGrJ,OAAO,oCAO/FqX,OAR2B,IAAM9pC,GAAOM,WAAWg9L,EAAW/c,SAAStmU,MAAMd,KAAI2iL,GAAMA,EAAGrJ,OAAO,6BAShGlmC,EAAQ6xM,EAAetlC,GA6EpBwlC,EAAgB,IACbjsB,GAAej4T,MAAMmkV,UAAU,CACpCryN,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,oBAkFVqqU,EAAe,KACnB,MAAM3sB,EAnKe,MACrB,MAAM4sB,EAAwB,CAAE9/U,WAAY,CAAE,CAAC+1N,IAAYupH,EAAkBxpH,GAAeG,YAAcH,GAAeupG,cACnH9M,EAAcmB,GAAej4T,MAAMu5T,QAAQ,CAC/CznM,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,gBAEZ0qP,UAAWw/E,EAAWtvF,MACtB7f,SAAU,KACR3iG,EAAO0L,OAAO,IAGZq5K,EAAce,GAAej4T,MAAM8wP,QAAQ,CAC/Ch/H,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,gBAEZ6rP,QAASq+E,EAAWtvF,MAAMt8L,OAAOutM,QACjCH,UAAWw+E,EAAWtvF,MAAMt8L,OAAOotM,UACnC3wB,SAAU,KACR3iG,EAAO0L,OAAO,EAEhBy5K,iBAAkB/zI,IA7sfQ,EAACpxC,EAAQoxC,KACvCpxC,EAAO7xH,SAAS,sBAAuB,CAAEijK,SAAQ,EA6sf3C+gK,CAAwBnyM,EAAQoxC,EAAM,EAExC96K,KAAMy+T,EACN3P,cACAxO,WAAY,IAAMA,IAAa/5L,SAAS,oCACrCq1N,IAECttB,EAAsBkB,GAAej4T,MAAM,oBAAoB,CACnE8xH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,yBAEZ0rP,UAAWw+E,EAAWtvF,MAAMt8L,OAAOotM,UACnC3wB,SAAU,KACR3iG,EAAO0L,OAAO,EAEhBp1I,KAAMy+T,IAEFqd,EAAqBtzF,GAAmB9+G,GACxCqyM,EAAa3zF,GAAiB1+G,GAC9BsyM,EAAap0F,GAAiBl+G,GAC9BuyM,EAAsBz0F,GAAiB99G,GACvCwlL,EAAgBusB,IAChBS,EAAiBJ,GAAsBC,GAAcC,EAUrDG,EAAoBF,EAAsB,CAC9C/sB,EACAb,GACE,CAACA,GACL,OAAOmB,GAAej4T,MAAM6lQ,OAAO,CACjC/zI,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBAAqB/a,OAAO2lV,EAAiB,GAAK,CAAC,gCAC1DN,GAELh6H,WAAY55F,EAAQ,CAClBg0N,EAAaG,EAAoB,GAnB/BL,EACK,CAACxtB,GACCytB,EACF,CAACttB,GAED,GAgBP3lE,GAAkBp/G,GAAU,GAAK,CAAC2xM,EAAa5wF,YAEjDwkE,OAAQhmE,GAAgBv/G,GACxBA,SACAqyH,gBAAiBy/E,EAAWtvF,MAAMt8L,QAClC,EAyFiBwsR,GACbC,EAnEC,CACLhzN,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBAEZswM,WAAY,CAjBK4tG,GAAej4T,MAAM8mU,OAAO,CAC7Ch1M,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,oBAGMk+S,GAAej4T,MAAMysT,QAAQ,CAC/C36L,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,oBAuER+9S,EAAeG,GAAej4T,MAAM4tT,SAAS,CACjD97L,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,iBAEZ0qP,UAAWw/E,EAAWtvF,QAElBojE,EAAkBE,GAAej4T,MAAM+kV,YAAY,CAAEtgF,UAAWw/E,EAAWtvF,QAC3EqwF,EAAYr1F,GAAax9G,KAAY6qD,EAAWnvE,EAAS/iH,KAAK+2U,GAAgB1vM,EAAQ8xM,EAAWtvF,MAAMt8L,OAAOotM,YAAc53I,EAASE,OACrIk3N,EAAmBx0N,EAAQ,CAC/BozN,EAAkB,GAAK,CAACpsB,GACxBz6H,EAAW,GAAK,CAAC8nJ,GACjBjB,EAAkB,CAACpsB,GAAc,KAE7B5P,EAAkBoQ,GAAej4T,MAAM6nT,gBAAgB,CAC3Dx9F,WAAY55F,EAAQ,CAClBw0N,EACAjoJ,EAAW,GAAK,CAAC+mJ,EAAmB7wF,cAGlCgyF,EAAWzzF,GAAkBt/G,GAC7B5tI,EAAa,CACjB49O,KAAM,iBACHl9D,GAAS1+C,QAAU,CAAEj1E,IAAK,OAAU,CAAC,KACrC4zR,EAAW,CAAE,cAAe,QAAW,CAAC,GAEvCh1E,EAAiB3jD,GAAQ0rG,GAAexvF,OAAO,CACnD32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CACP,MACA,eACA/a,OAAOg+L,EAAW,CAAC,sBAAwB,IAAIh+L,OAAO6kV,EAAkB,CAAC,+BAAiC,IAAI7kV,OAAO4kV,GACvHr4R,OAAQ,CACN27P,WAAY,YACTg+B,EAAW,CACZh8T,QAAS,IACTmQ,OAAQ,KACN,CAAC,GAEP90B,cAEF8lN,WAAY,CACVw9F,KACG7qH,EAAW,GAAK,CACjB+6H,KACGitB,EAAU51N,WAEf0oM,GAEF7zK,WAAYm1D,GAAS,CACnBm3D,IAAgB,IAAM0zE,EAAWtvF,MAAMt8L,OAAOotM,UAAU4L,wBAAwB,SAChF1iC,GAAU76M,OAAO,CAAEo6M,aAAc,0BACjC0P,GAAO9pN,OAAO,CACZ3F,KAAM,SACNlkB,SAAU,mOAIVmmQ,EAAa0Z,GAAS5Z,GAE5B,OADAuzE,EAAe1jV,IAAIqwQ,GACZ,CACLA,aACAF,iBACD,EAEGi1E,EAAgBj1E,IACpB,MAAMk1E,EAAe/d,GAAQI,GAAsBt1L,IAC7CkzM,EAAche,GAzxGKl1L,IACb7G,GAAS6G,GACVzjB,MAAMs/H,GAAe77G,IAuxGJmzM,CAAqBnzM,IAWjD,OAVKA,EAAO2sC,SACNioB,GAAe,MAAO,QAASs+I,IACjC1+I,GAAMupE,EAAevvQ,QAAS,QAAS0kV,GAErCt+I,GAAe,MAAO,SAAUq+I,GAClCz+I,GAAMupE,EAAevvQ,QAAS,SAAUykV,GAExCz+I,GAAMupE,EAAevvQ,QAAS,SAAU,UAGrCykV,CAAY,EAkBfG,EAAmBv1E,IACvB,MAAM,OAACC,EAAM,QAAEi2D,EAAO,cAAE71D,GAAiBL,EACzC7yO,GAAMwxN,GAAiBx8G,IAAS,CAACqzM,EAA0BlhV,KACzD6tI,EAAOuvC,GAAGx2G,SAASu6Q,sBAAsBnhV,EAAMkhV,EAAyB,IAE1E,MAAM,QAAC3vK,EAAO,UAAEsvE,EAAS,gBAAEooF,EAAe,SAAEmY,EAAQ,MAAE9uB,GAASzkL,EAAOuvC,GAAGx2G,SAAS1zD,SAC5EmuU,EAAaz0F,GAA0B/+G,GACvCuzL,EAAc,CAClBvgF,YACAF,MAAOgC,GAAS90G,GAChBonL,QAAStqE,GAAW98G,GACpB2+G,QAAS60F,EAAW92N,YAAW,IAAMqgI,GAAW/8G,KAChDwxL,mBAAoBuD,IAAgB/5E,GAAcpkL,SAClD8sG,UACA42I,QAASi5B,EACT9uB,SA/B8B1mD,QAiCND,EAAOC,eAhCjC/9H,EAAO0/C,YAAY,SAAU,iBAAiB,KAC5ComI,GAAeuB,aAAatpD,EAAe,IAE7C/9H,EAAO0/C,YAAY,UAAW,iBAAiB,KAC7ComI,GAAeoB,aAAanpD,EAAe,IAE7C/9H,EAAOyvB,WAAW,uBAAuB,CAACvC,EAAK/7J,MAC7B,OAAZA,QAAgC,IAAZA,OAAqB,EAASA,EAAQutT,WAC5DoH,GAAeiB,mCAAmChpD,GAElD+nD,GAAegB,oBAAoB/oD,EACrC,IAEF/9H,EAAOsxD,qBAAqB,uBAAuB,IAAMw0H,GAAekB,uBAAuBjpD,KA5lPnF,EAAC/9H,EAAQi+H,EAAYC,KACnC,MAAMnsD,EAAiB,CAAC5/M,EAAM0qL,KAC5Bj+D,EAAO,CACLq/I,KACGC,IACFvxO,IACDA,EAAEolL,eAAe5/M,EAAM0qL,EAAI,GAC3B,EAEEi1B,EAAc,CAAC2hI,EAAStmV,KAC5ByxH,EAAO,CACLq/I,KACGC,IACFvxO,IACDA,EAAEmlL,YAAY,CAAC2hI,GAAUtmV,EAAQ,GACjC,EAEEumV,EAAoB72J,GAAOi1B,EAAYggB,KAAiB,CAAErjO,OAAQouL,EAAIpuL,SACtEi3H,EAAMuwE,KACN09I,EAAez/Q,GAAKwxD,EAAK,aAAcguN,GACvCE,EAAc1/Q,GAAKwxD,EAAK,aAAam3D,GAAOk1B,EAAe9P,KAAqBplB,KAChFg3J,EAAa3/Q,GAAKwxD,EAAK,YAAYm3D,GAAOk1B,EAAe7P,KAAoBrlB,KAC7Ei3J,EAAc5/Q,GAAKwxD,EAAK,YAAaguN,GACrCK,EAAY7/Q,GAAKwxD,EAAK,WAAWm3D,IACd,IAAnBA,EAAI7kK,IAAIhlB,QACV8+M,EAAYkgB,KAAiB,CAAEvjO,OAAQouL,EAAIpuL,QAC7C,IAEIulV,EAAiBh8T,GAAO85L,EAAYggB,KAAiB,CAAErjO,OAAQsyH,GAAaS,QAAQxpG,EAAIvpB,UACxFwlV,EAAmBj8T,IACJ,IAAfA,EAAIhlB,QACN8+M,EAAYkgB,KAAiB,CAAEvjO,OAAQsyH,GAAaS,QAAQxpG,EAAIvpB,SAClE,EAEIylV,EAAqB,KACzBt1N,EAAOohB,EAAO08K,cAAchvT,OAAOymV,IAC7Bn0M,IAAWm0M,GACbA,EAAWhmU,SAAS,gBAAiB,CAAEmZ,cAAe04G,GACxD,GACA,EAEEo0M,EAAiBv3J,GAAOk1B,EAAe5P,KAAgBrgC,GAAa+a,IACpEj8G,EAAiBi8G,IACrBi1B,EAAYigB,KAAoB,CAAC,GACjChgB,EAAe3P,KAAgBtgC,GAAa+a,GAAK,EAE7Cj6D,EAAM0C,GAAYvE,GAAaS,QAAQwe,EAAOj4G,eAC9CssT,EAAkBzwH,GAAQhhG,EAAK,UAAUi6D,IAC7Cx7I,uBAAsB,KACpB,MAAMl3B,EAAI61H,EAAOmyC,eACjB,QAAUviL,IAANua,GAAyB,OAANA,EAAY,CACjC,MACM+1O,EADsBH,GAAsB//G,EAAQi+H,EAAWzvQ,SAC/B5B,KAAI62I,GAAM,CAC9CA,EAAGj1I,WACAi1I,EAAGuzG,UACLz6H,MAAM,IACLF,EAAO6jI,GAAW5vO,GAAKob,GAAGpb,EAAGusK,EAAIpuL,YACnCuxI,EAAO7xH,SAAS,gBAAiB,CAAE1f,OAAQouL,EAAIpuL,OAAOkxH,MACtDoyF,EAAepP,KAAyB9lB,GAE5C,IACA,IAEEy3J,EAAiB,IAAMxiI,EAAYigB,KAAoB,CAAC,GACxDwiH,EAAmB13J,IACnBA,EAAIzL,OACN0gC,EAAYggB,KAAiB,CAAErjO,OAAQsyH,GAAaS,QAAQwe,EAAOmyC,iBACrE,EAEIqiK,EAAkB5pV,IACtBknN,EAAYggB,KAAiB,CAAErjO,OAAQsyH,GAAaS,QAAQ52H,EAAM08B,cAAc6qJ,iBAAkB,EAE9FmjG,EAAY1qR,GAASo1I,EAAO7xH,SAAS,UAAWvjB,GAChD4qR,EAAa5qR,GAASo1I,EAAO7xH,SAAS,WAAYvjB,GACxDo1I,EAAO8K,GAAG,cAAc,KACtB9K,EAAO8K,GAAG,QAASkpM,GACnBh0M,EAAO8K,GAAG,MAAOkpM,GACjBh0M,EAAO8K,GAAG,UAAWmpM,GACrBj0M,EAAO8K,GAAG,YAAaopM,GACvBl0M,EAAO8K,GAAG,eAAgBspM,GAC1Bp0M,EAAO8K,GAAG,eAAgBlqE,GAC1Bo/D,EAAO8K,GAAG,eAAgBwpM,GAC1Bt0M,EAAO8K,GAAG,qBAAsBypM,GAChCv0M,EAAO8K,GAAG,gBAAiB0pM,GAC3B51N,EAAO,CACLq/I,KACGC,IACFu2E,IACDA,EAAIjmV,QAAQmxH,IAAIx1H,iBAAiB,UAAWmrR,GAC5Cm/D,EAAIjmV,QAAQmxH,IAAIx1H,iBAAiB,WAAYqrR,EAAW,GACxD,IAEJx1I,EAAO8K,GAAG,UAAU,KAClB9K,EAAO6lC,IAAI,QAASmuK,GACpBh0M,EAAO6lC,IAAI,MAAOmuK,GAClBh0M,EAAO6lC,IAAI,UAAWouK,GACtBj0M,EAAO6lC,IAAI,YAAaquK,GACxBl0M,EAAO6lC,IAAI,eAAgBuuK,GAC3Bp0M,EAAO6lC,IAAI,eAAgBjlG,GAC3Bo/D,EAAO6lC,IAAI,eAAgByuK,GAC3Bt0M,EAAO6lC,IAAI,qBAAsB0uK,GACjCv0M,EAAO6lC,IAAI,gBAAiB2uK,GAC5B51N,EAAO,CACLq/I,KACGC,IACFu2E,IACDA,EAAIjmV,QAAQmxH,IAAIt1H,oBAAoB,UAAWirR,GAC/Cm/D,EAAIjmV,QAAQmxH,IAAIt1H,oBAAoB,WAAYmrR,EAAW,IAE7Ds+D,EAAYlyK,SACZ+xK,EAAa/xK,SACbgyK,EAAYhyK,SACZiyK,EAAWjyK,SACXmyK,EAAUnyK,SACVyyK,EAAgBzyK,QAAQ,IAE1B5hC,EAAO8K,GAAG,UAAU,KAClBlsB,EAAO,CACLq/I,KACGC,GACFtuC,IACHhxG,EAAO,CACLq/I,KACGC,IACFvxO,GAAKA,EAAErQ,WAAU,GACpB,EAm/OAo4T,CAAQ10M,EAAQ89H,EAAOG,WAAYC,GACnCxK,EAAO3tF,MAAM/lC,EAAQ8xM,EAAWtvF,MAAMt8L,OAAQ0wP,GAC9CkrB,GAAQ9hM,EAAQ8xM,EAAWtvF,OAC3BgjF,GAAQxlM,EAAQ8xM,EAAWtvF,MAAMt8L,OAAOutM,QAASq+E,EAAWtvF,OAj5NhDxiH,KACd,MAAM,SAACuzM,GAAYvzM,EAAOuvC,GAAGx2G,SAAS1zD,SACtCu5G,EAAO9wH,GAAKylV,IAAWphV,IACrB,MAAMwqL,EAAO42J,EAASphV,GAChBu0K,EAAW,IAAMjkD,GAAK/G,EAASlwH,KAAKw0I,EAAOwyH,kBAAkB,kBAAmBrgQ,GACtF6tI,EAAOuvC,GAAGx2G,SAAS03G,gBAAgBt+K,EAAM,CACvCq9K,KAAMmN,EAAKnN,KACXr6J,QAASwnK,EAAKxnK,QACd66J,SAAUkO,IACRl+C,EAAO+tC,YAAY,iBAAiB,EAAO57K,GAC3C+rL,EAAUlP,UAAUtI,IAAW,EAEjC6J,QAAS2N,IACPA,EAAUlP,UAAUtI,KACpB,MAAMiuK,EAAe,IAAMz2J,EAAUlP,UAAUtI,KAE/C,OADA1mC,EAAO8K,GAAG,gBAAiB6pM,GACpB,KACL30M,EAAO6lC,IAAI,gBAAiB8uK,EAAa,CAC1C,EAEH9gV,QAAS,OACT,GACF,EA43NA+gV,CAAQ50M,GACRo8K,GAAQp8K,EAAQq8K,EAAcy1B,EAAWtvF,MAAMt8L,QAC/Ck3Q,GAAWp9L,EAAQo7L,EAAiBrH,EAAQ7tJ,KAAM,CAAEosF,UAAWw/E,EAAWtvF,QAC1EuqF,GAAQ/sM,EAAQ+zL,EAAQ7tJ,MACxB,MAEMljK,EAAO,CACX0/K,WAHU1iD,EAAOj4G,aAIjBzH,OAHa0yT,EAAcl1E,EAAOC,iBAKpC,OAAO/hP,EAAK06D,OAAOspD,EAAQ69H,EAAQ01D,EAAaue,EAAWtvF,MAAOx/O,EAAK,EAqBzE,MAAO,CACL6xU,OAAQ,CACNviF,UAAWw/E,EAAWtvF,MACtBsyF,cAAe,IAAMlE,GAAkB,SAAUY,IAEnDuD,QAAS,CACPziF,UAAWw/E,EAAWv0J,OACtBu3J,cAAe,IAAMlE,GAAkB,UAAWW,IAEpDyD,SAxBe,KACf,MAAMl3E,EAASm0E,IACTje,EAlMe,MACrB,MAAM2D,EAAct4E,GAAer/G,GAC7Bi1M,EAAoBvpT,GAAGpqB,KAAQq2T,IAAkD,SAAlCljI,GAAMkjI,EAAa,WAClEud,EAAW,CACfv1N,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CACP,MACA,kBACA,mBACA/a,OAAO4kV,GACTr/U,WAAY,IAAK0gL,GAAS1+C,QAAU,CAAEj1E,IAAK,OAAU,CAAC,IAExD2yF,WAAYm1D,GAAS,CAACsnB,GAAY5sM,OAAO,CAAEw9L,SAAU,IAAMu0C,EAAO5nD,SAAS8qG,QAEvEu+B,EAAoB,CACxBx1N,IAAK,CAAEvmE,OAAQ,CAAEv+B,MAAO/rB,SAASwS,KAAK25C,YAAc,OACpD5T,OAAQi8J,GAAS,CAACE,GAAMpB,MAAgB5xD,IACpCgkD,GAAMhkD,EAAKhiJ,QAAS,QAASM,SAASwS,KAAK25C,YAAc,KAAK,OAG9DirH,EAAOk0C,GAAQ9hB,GAAU48I,EAAUD,EAAoBE,EAAoB,CAAC,IAC5EhjF,EAAewlB,GAASzxG,GAE9B,OADAqrK,EAAqB3jV,IAAIukQ,GAClB,CACLjsF,OACA+3F,WAAY9L,EACb,EAuKgBijF,GACXrhB,EAAUv0E,GAAcx/G,GAtKV,MACpB,MAAMk1M,EAAW,CACfv1N,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CACP,MACA,kBACA,wBACA,mBACA/a,OAAO4kV,GACTr/U,WAAY,IAAK0gL,GAAS1+C,QAAU,CAAEj1E,IAAK,OAAU,CAAC,IAExD2yF,WAAYm1D,GAAS,CAACsnB,GAAY5sM,OAAO,CACrCw9L,SAAU,IAAMu0C,EAAO5nD,SAAS8qG,GAChC7oF,UAAW,IAAM+iH,EAAcuE,0BAG/BnvK,EAAOk0C,GAAQ86H,GACf/iF,EAAewlB,GAASzxG,GAE9B,OADAsrK,EAAoB5jV,IAAIukQ,GACjB,CACLjsF,OACA+3F,WAAY9L,EACb,EA+IuCmjF,GAPXthB,KAC7Bwd,EAAoB5jV,IAAIomU,EAAS/1D,YAC1B+1D,GAKmDuhB,CAAuBvhB,GACjF+c,EAAW/c,SAASpmU,IAAIomU,GACxB+c,EAAWhd,QAAQnmU,IAAImmU,GACvBgd,EAAWjzE,OAAOlwQ,IAAIkwQ,GACtB,MAAMD,EAAS,CACbk2D,UACAC,WACAl2D,SACAI,cAAe6yE,EAAWC,oBAE5B,OAAOoC,EAAiBv1E,EAAO,EAYhC,EAcG23E,GAAW7iJ,EAAW,CAC1ByK,GAAW,YACXU,GAAS,kBACTc,GAAkB,YAAa9pE,IAC/BwpE,GAAU,eAAgB7iF,GAC1B6iF,GAAU,eAAgB,GAC1BA,GAAU,aAAc,CAAC,GACzBzpH,GAAM,kBAAmB,CAAC42J,KAC1B77B,GAAkB,aAClBE,GAAwB,cAEpB2lI,GAAQ,CAAEn/G,OAAQp7G,GAClBw6N,GAAU/iJ,EAAW,CACzB3+C,GAAS,CACP7hJ,KAAM,aACNy0C,UAAW,CAACx5C,EAAQuvL,KACX,CACL7qC,WAAYm1D,GAAS,CAACklI,GAASxqT,OAAO,CAClC3F,KAAM,QACNu2B,UAAWovH,GACFp7C,GAASo7C,EAAQ,mBAAmBplD,MAAMolD,GAEnD4nK,aAAcn8U,EAAOuoV,eAAe94N,SAAS,IAAIrpH,MAAM,+EAAiFC,KAAKsa,UAAU4uK,EAAM,KAAM,IAAIxvL,SACvK4gO,UAAW3gO,EAAOwoV,sBAK5BvxK,GAAS,CACPj0K,OAAQ,CAACgtM,GAAW,QACpBjrM,KAAM,UAERkyK,GAAS,CACP+zD,QAASq9G,GACTrlV,OAAQ,CAACgtM,GAAW,QACpBjrM,KAAM,UAERkyK,GAAS,CACP+zD,QAASq9G,GACTrlV,OAAQ,CAACgtM,GAAW,QACpBjrM,KAAM,SAER6hJ,GAAS,CACPokF,QAASq9G,GACTrlV,OAAQ,CAACgtM,GAAW,QACpBjrM,KAAM,WAER0gG,GAAS,CACPulI,QAAS,CACP9B,OAAQ,CAAC35C,EAAMvvL,KAAW,IACrBuvL,EACHh9D,IAAKvyH,EAAOuyH,IACZu4F,WAAY9qN,EAAO8qN,cAGvB9nN,OAAQ,CACNkuM,GAAU,MAAO,CACf3iF,IAAK,MACLviE,OAAQ,CACN/iC,SAAU,QACV3qB,KAAM,MACN20B,IAAK,MACL10B,MAAO,MACPk+C,OAAQ,SAGZy0J,GAAU,aAAc,KAE1BnsM,KAAM,cAsFJ0jV,GAAcn7G,GAAU,CAC5BvoO,KAAM,cACNqoO,aAAcg7G,KACd76G,WAAY+6G,KACZt9G,QAtFgB,CAAChrO,EAAQ8qN,EAAYv7B,EAAMw7C,KAC3C,MAAM29G,EAAa7+I,KAkCb8+I,EAAgBnlI,GAAW,gBAC3B0C,EAAa,IACdlmN,EAAOkmN,WACV,CAACjR,MAAkB,CAAC0zI,GAAelpV,OAAOO,EAAOkmN,WAAW,0BAA4B,KAEpFhmF,EAAUiJ,KAChB,MAAO,CACL77F,IAAKttC,EAAOstC,IACZilF,IAAKvyH,EAAOuyH,IACZu4F,aACAjS,KAAM,CACJ18J,KA5Ceg0I,IACjBu4J,EAAWloV,IAAI2vL,GACf,MAAMrX,EAAO94K,EAAO2sP,SAASx8D,GAAQ1gE,WAC/Bm5N,EAAkB79G,EAAUnxD,UAC5BA,EAAUd,EAAKk9B,YAAY4O,MAAM,IAClCgkI,EACH99H,WAAY89H,EAAgB99H,WAAWrrN,OAAO,CAAC+tN,GAAQr9B,KACvDzrC,WAAYm1D,GAAS,CACnBgnC,GAAStsN,OAAO,CAAC,GACjBA,GAAO,wBAAyB,CAAC4iL,GAAY1D,MAAW,KACpD06G,GAASR,UAAUx9H,IAAmBkuD,GAAOzK,QAAQzjD,EAAO,UAIpEv7G,GAAOkkG,EAAMc,GACbykE,GAAOzK,QAAQzjD,EAAO,EA8BpB7zI,KA5Be6zI,IACjBu4J,EAAW54U,QACXg4C,GAAOqoI,EAAO/uL,SAAS6sC,MAAK46S,IAC1B14J,EAAO6lB,YAAYe,SAAS8xI,GAAY56S,MAAK2rI,IAC3C/kG,GAAO+kG,EAAQ,GACf,GACF,EAuBA50E,QArBkBmrF,GAAUm7C,GAAan7C,EAAQnwL,EAAQ,QAsBzDolG,UArBoB+qF,GAAUi7C,GAAQj7C,EAAQnwL,EAAQ,UAsBtD8oV,QAlBY34J,IACdg+H,GAASL,QAAQ39H,EAAO,EAkBtB44J,QAtBY,CAAC54J,EAAQq9H,KACvBW,GAAS3vH,MAAMrO,EAAQq9H,EAAY,GAuBnCtnG,aACA8E,gBAAiB,CACfhmN,WAAY,CACV,KAAQ,SACR,aAAc,SAGlB0/I,WAAYkjF,GAAQ5nO,EAAOgpV,gBAAiB,CAC1C/oG,GAAU1rN,OAAO,CAAC,GAClB8pN,GAAO9pN,OAAO,CACZ3F,KAAM,SACN0mN,QAASt1O,EAAOgrP,UAChBzV,SAAUv1O,EAAOu1O,SACjBR,aAAc/0O,EAAO+0O,aACrBL,aAAc10O,EAAO00O,eAEvBy5E,GAAS55R,OAAO,CAAEy/J,QAAS00J,EAAWpoV,MACtCi0B,GAAOo0T,EAAe,CAACvxI,IAAcr6L,IACjC,MAAMksU,EAAW39G,GAAavuN,EAAG/c,EAAQ,SAASoB,QAC5CsjB,EA3JJtjB,IAAWA,EAAQmxH,IAAI/5F,YA2JXl4B,CAAI2oV,GACd/oN,EAAQO,GAAGjB,WAAa5R,EAAclpG,GACxCuiL,GAAMlqL,EAAE3b,QAAS,aAAcsjB,GA3JxB,EAACwkU,EAAiBC,KACnC,MAAMC,EAAU91N,GAAO41N,EAAiB,MAAMx6N,MAAK,KACjD,MAAMh9F,EAAK8xL,GAAW,gBAEtB,OADAvc,GAAMkiJ,EAAc,KAAMz3T,GACnBA,CAAE,GACRo8F,GACHm5E,GAAMiiJ,EAAiB,kBAAmBE,EAAQ,EAuJxCC,CAAWtsU,EAAE3b,QAAS6nV,EACxB,QAGP,EAODpwI,KAAM,CACJ18J,KAAM,CAAC08J,EAAM1oB,KACX0oB,EAAK18J,KAAKg0I,EAAO,EAEnB7zI,KAAM,CAACu8J,EAAM1oB,KACX0oB,EAAKv8J,KAAK6zI,EAAO,EAEnBnrF,QAAS,CAAC6zG,EAAM1oB,IAAW0oB,EAAK7zG,QAAQmrF,GACxC/qF,UAAW,CAACyzG,EAAM1oB,IAAW0oB,EAAKzzG,UAAU+qF,GAC5C44J,QAAS,CAAClwI,EAAM1oB,EAAQq9H,KACtB30G,EAAKkwI,QAAQ54J,EAAQq9H,EAAY,EAEnCs7B,QAAS,CAACjwI,EAAM1oB,KACd0oB,EAAKiwI,QAAQ34J,EAAO,KAKpBm5J,GAA6Bv8I,GAAM,CACvC7jM,GACAglK,IACAzuK,OAAOmvQ,KACH26E,GAAoChpU,GAEpCipU,GAAyB,CAC7Bz8E,GAAc,UACdV,GACA/6D,GAAoB,QAAS,MAAO,CAClC,QACA,QAEFliB,GACAt/J,GACAghL,GAAiB,aAAc,CAC7B,UACA,cAEFO,GAAgB,UAAW,gBAEvBo4I,GAA2B,IAC5BD,GACHrgU,IAEIugU,GAA2B,CAC/Bv5I,GAAmB,OAAQ,CACzB,SACA,SACA,cAECs5I,IAECE,GAAyB,CAC7Bx5I,GAAmB,OAAQ,CAAC,SAC5Bg8D,GACAG,GACAD,GACA57D,GAAgB,QAAS64I,OACtBE,IAECI,GAAyB,IAC1BJ,GACHr5I,GAAmB,OAAQ,CAAC,iBAC5Bm8D,GACAD,GACAF,GACA56D,GAAiB,UAAU,IAEvBs4I,GAA2Br6I,GAAS,OAAQ,CAChDs6I,OAAQJ,GACRr1R,OAAQq1R,GACRpnR,OAAQonR,GACR3+J,KAAM4+J,GACNl1B,aAAcm1B,KAGVG,GAAoB,CACxB7gV,GACAigB,GACAgnL,GAAmB,QAAS,CAC1B,OACA,OACA,QACA,YAEF/tB,GACA8uB,GAAU,MAAO,KAEb84I,GAAoBj9I,GAAMg9I,IAO1BE,GAAe,CACnB/gV,GACAigB,GACA2G,GACAi9O,GAAc,UACdV,GACAK,GACA57D,GAAiB,aAAc,CAC7B,UACA,YACA,YAEF1hB,GACAiiB,GAAgB,UAAW,gBAEvB64I,GAAen9I,GAAMk9I,IAErBE,GAAsB,CAC1BjhV,GACAglK,IAEIk8K,GAA+BD,GAAoB1qV,OAAO,CAAC8sQ,KAE3D89E,GAAiBF,GAAoB1qV,OAAO,CAChD+qB,GACAsF,GACAuhL,GAAgB,UAAW,iBAEvBi5I,GAAiBv9I,GAAMs9I,IACvBE,GAAwBhqU,GAExBiqU,GAAmBJ,GAA6B3qV,OAAO,CAC3DktQ,GAAiB,QACjBt7D,GAAgB,UAAW,iBAEvBo5I,GAAmB19I,GAAMy9I,IACzBE,GAA0B38I,GAAS,CACvCnoD,GACAz8H,GACAi5J,KAGIuoK,GAAmBP,GAA6B3qV,OAAO,CAC3D4xM,GAAgB,aAAc,WAC9BA,GAAgB,UAAW,iBAEvBu5I,GAAmB79I,GAAM49I,IACzBE,GAA0BpqU,GAG1BqqU,GAAoB/9I,GADAq9I,IAEpBW,GAA2BtqU,GAE3BuqU,GAAqBb,GAAoB1qV,OAAO,CACpD4xM,GAAgB,MAAO,YACvBnB,GAAe,YACfA,GAAe,aACfa,GAAe,WArn1BQ,EAACpwM,EAAK6jD,IAAa2sJ,GAAYxwM,EAAK6jD,EAAU8pJ,IAsn1BrE28I,CAAiB,gBAAYzoV,KAEzB0oV,GAAwBf,GAAoB1qV,OAAO,CACvD4xM,GAAgB,MAAO,YACvBjB,GAAiB,UAEb+6I,GAAqB1/N,IAAQruG,GAAK4xL,GAAM,mBAAoBlC,GAAUo+I,IAAwB9tU,GAAGoyG,SAAQ,IAAMw/E,GAAM,mBAAoBlC,GAAUk+I,IAAqB5tU,OACxKguU,GAA4B3qU,GAE5B4qU,GAAiBjB,GAA6B3qV,OAAO,CAAC4xM,GAAgB,UAAW,iBACjFi6I,GAAiBv+I,GAAMs+I,IACvBE,GArr1BiBh+I,GAAMvB,IAur1BvBw/I,GAAmBC,IAAc,OACrCviV,IA5p1BqBvI,EA6p1BN,UA7p1BasvM,GAAWtvM,EAAK6f,KA8p1B5CirU,GA9p1BqB9qV,KA+p1BtB,EAEK+qV,GAAkB,CACtBxiV,GACAgnM,GAAe,QACfoB,GAAoB,UAAW,eAAgB,CAC7C,eACA,aAEFE,GAAkB,SAAUnkK,GAC5BkkK,GAAiB,aAAa,IAE1Bo6I,GAAkB5+I,GAAM2+I,IAExBE,GAAexB,GAA6B3qV,OAAO,CACvD8xM,GAAiB,UAAU,GAC3BA,GAAiB,aAAa,GAC9BA,GAAiB,iBAAiB,GAClCA,GAAiB,eAAe,KAE5Bs6I,GAAe9+I,GAAM6+I,IACrBE,GAAsBrrU,GAEtBsrU,GAAqBh/I,GAAMo9I,GAAoB1qV,OAAO,CAACoxM,GAAa,aACpEm7I,GAA4Bj/I,GAAM,CACtCmD,GAAe,OACfU,GAAa,QACbA,GAAa,eACbA,GAAa,kBAGTq7I,GAAc7B,GAA6B3qV,OAAO,CACtDoxM,GAAa,aACbA,GAAa,eACbU,GAAiB,aAAa,GAC9BzhL,GACAuhL,GAAgB,UAAW,iBAEvB66I,GAAcn/I,GAAMk/I,IACpBE,GAAqB1rU,GAErB2rU,GAAoBX,GAAc,CACtCviV,GACAshB,GACAihU,EACAn6I,GAAoB,QAAS,QAAS,CACpC,QACA,SACA,QAEFT,GAAa,QAGTw7I,GAA0B,CAC9BljU,GACAy8H,IAEI0mM,GAA0B,CAC9BnjU,GACAsnL,GAAgB,QAAShB,GAAQ,GAAS,IAAM88I,OAE5CA,GAAoB/+I,GAAM,CAC9BT,GAAMs/I,IACNt/I,GAAMu/I,MAEFE,GAAgBpC,GAA6B3qV,OAAO,CACxDgxM,GAAgB,QAAS87I,IACzBz8T,GACAuhL,GAAgB,UAAW,iBAEvBo7I,GAAgB1/I,GAAMy/I,IACtBE,GAAuBjsU,GAEvBksU,GAAkBvC,GAA6B3qV,OAAO,CAC1D8wM,GAAmB,QAAS,CAC1BpnL,GACAy8H,KAEFwrD,GAAgB,OAAQ,GACxBthL,GACAuhL,GAAgB,UAAW,iBAEvBu7I,GAAkB7/I,GAAM4/I,IACxBE,GAAyBpsU,GAEzBqsU,GAAkB1C,GAA6B3qV,OAAO,CAC1D8xM,GAAiB,aAAa,GAC9BzhL,GACAuhL,GAAgB,UAAW,iBAEvB07I,GAAkBhgJ,GAAM+/I,IACxBE,GAAyBjgJ,GAAM,CACnCmD,GAAe,SACfA,GAAe,YAGX+8I,GAAe9C,GAAoB1qV,OAAO,CAC9C+qB,GACA4mL,GAAgB,MAAO,GACvBA,GAAgB,MAAO,KAEnB87I,GAAengJ,GAAMkgJ,IACrBE,GAA2B3sU,GAE3B4sU,GAAc,CAClBlkV,GACAunM,GAAgB,SAAUhwL,IAC1BgwL,GAAgB,QAASlD,GAAM9sL,MAE3B4sU,GAActgJ,GAAMqgJ,IAEpBE,GAAiBlD,GAA6B3qV,OAAO,CACzDoxM,GAAa,eACbU,GAAiB,aAAa,GAC9BzhL,GACAuhL,GAAgB,UAAW,iBAEvBk8I,GAAiBxgJ,GAAMugJ,IACvBE,GAAwB/sU,GAExBgtU,GAAqB,CACzBt9I,GAAmB,OAAQ,CACzB,YACA,SAEFzrL,GACAwrL,GAAe,MACfS,GAAS,OAAQ+5G,IACjB75G,GAAa,mBACbA,GAAa,2BAGT68I,GAAqB3gJ,GADA0gJ,IAErBE,GAA0BF,GAAmBhuV,OAAO,CAACgxM,GAAgB,WAAYhB,GAAQ,GAAY,IAChGb,GAAS,OAAQ,CACtBs3C,UAAW0nG,GACX5mJ,KAAM0mJ,UAGNE,GAA0B7gJ,GAAM4gJ,IAChCE,GAAiBj/I,GAAS,OAAQ,CACtCs3C,UAAW0nG,GACX5mJ,KAAM0mJ,KAEFI,GAAa,CACjB5kV,GACAunM,GAAgB,QAASo9I,IACzB98I,GAAe,gBACfA,GAAe,kBACfU,GAAiB,qBAAsB,GAAIhxL,IAC3CowL,GAAa,sBAETk9I,GAAahhJ,GAAM+gJ,IAEnBE,GAAiB5D,GAA6B3qV,OAAO,CACzD6xM,GAAoB,WAAY,OAAQ,CACtC,QACA,QACA,SAEFxhL,GACA+gL,GAAa,eACbQ,GAAgB,UAAW,iBAEvB48I,GAAiBlhJ,GAAMihJ,IACvBE,GAAwBnhJ,GAAM,CAClCnnD,GACAgnH,KAGIuhF,GAAmBppV,GAAQ8qM,GAAQ,QAAS,QAvn2BzB,CACvBthF,IAAK,WACLg9C,QAAS,CAAC,GAqn2B6DgiC,GAAM9hF,IAAQruG,GAAK4xL,GAAM,oBAAqBjqM,IAASqpV,GAAYhxU,GAAGsxG,MAAK2/N,GAAQhoM,GAAOvmJ,MAAMsvM,GAAYi/I,MAAQC,GAAajoM,GAAOtlJ,MAAMutV,SACjNF,GAAazhJ,IAAW,KAAMiC,UAAS,OAAQ,CACnDgpG,YAAaoyC,GACbl3P,IAAKi6G,IA7PiB0+I,EA6PK0C,GAAiB,OA7PR,CACpCjlV,GACAuiV,KA4PA7lV,OAAQskV,GACR1xC,SAAU8xC,GACVxtE,WAAY8tE,GACZ/uE,YAAaivE,GACblyC,SAAU0yC,GACV5iU,KAAMqkL,GAAMy+I,GAAiB2C,GAAiB,UAC9CpsD,OAAQ8pD,GACR9lV,MAAOmmV,GACPpzC,QAAS2zC,GACTtzC,UAAWyzC,GACXpzC,UAAWuzC,GACX93D,OAAQi4D,GACR/mV,SAAUonV,GACV3yC,SAAUqzC,GACV/xC,aAAcivC,GACdvuC,UAAW+uC,GACX5uC,aAAcgvC,GACdp0C,WAAY8yC,GACZjgU,MAAOuiL,GAAMq/I,GAAkB+B,GAAiB,WAChDn7S,MAAOq6S,GACPrjV,KAAM+jV,GACN7pD,MAAOqqD,KAnRe9C,KAoRtB,IACI+C,GAAc,CAClBtlV,GACAgoM,GAAU,UAAW,IACrBT,GAAgB,QAAS29I,KAErBG,GAAcxhJ,GAAMyhJ,IAEpBC,GAAY,CAChB1hF,GAAc,OACdroP,GACA+rL,GAAgB,QAAS29I,KAErBM,GAAiB,CACrBxlV,GACAqnM,GAAmB,OAAQk+I,KAEvBE,GAAiB5hJ,GAAM2hJ,IAEvBE,GAAqBnF,GACrBoF,GAAqBhF,GACrBiF,GAAe/hJ,GAAM,CACzBmD,GAAe,SACfD,GAAW,OAAQrB,GAAS,OAAQ,CAClCs1F,MAAOqqD,GACPQ,SAAUJ,MAEZt9I,GAAgB,OAAQ,UACxBI,GAAiB,UAAW,GAAIo9I,IAChC39I,GAAU,cAAe,CAAC,GAC1BM,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,UAAWnkK,GAC7BmkK,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,cAAenkK,KAI7B2hT,GAAwBjiJ,GAAM,CAClCoD,GAAmB,OAAQ,CACzB,SACA,cAECy+I,KAECK,GAAkBliJ,GAAM,CAC5BmD,GAAe,SACfA,GAAe,OACfU,GAAa,UACbA,GAAa,SACbI,GAAc,UAAWg+I,IACzBx9I,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,WAAYnkK,GAC9BmkK,GAAkB,UAAWnkK,GAC7BmkK,GAAkB,YAAankK,KAI3B6hT,GAAgBrsU,GAChB2qB,EAAS3qB,GACJ,CAACA,GAAKpjB,OAAOumM,EAAO3mM,GAAOwjB,GAAMqsU,KAC/Bn9U,EAAQ8Q,GACVmjL,EAAOnjL,EAAKqsU,IAEZ,GAILC,GAActsU,GAAO2qG,EAAS3qG,EAAI3Z,OAASskH,EAAS3qG,EAAI9d,MACxDqqV,GAAiB,CACrB52C,SAAU+xC,GACVztE,WAAY+tE,GACZhvE,YAAakvE,GACbnyC,SAAU2yC,GACVxlV,MAAOomV,GACPpqD,OAAQ+pD,GACR/uC,aAAcivC,GACd7yC,UAAW0zC,GACXrzC,UAAWwzC,GACX/3D,OAAQk4D,GACRr0C,QAAS4zC,GACTxuV,KAAM8uV,GACN7mV,SAAUqnV,GACV5yC,SAAUszC,GACVhyC,aAAckvC,GACdzzC,WAAY+yC,GACZ2E,eAAgB9F,IAKZ+F,GAAsB54L,IAC1B,MAAM64L,EAHc74L,IAAa/lC,EAASu+N,GAAcx4L,GAAYy4L,IAGjDK,CAAc94L,GAC3BkgB,EAASovB,EAAOupJ,GAAYz/S,GALXA,IAAQw+E,EAASlwH,KAAKgxV,GAAet/S,EAAK5mC,OAKvBumV,CAAiB3/S,GAAM4+E,MAAK,IAAM,KAAI1rH,GAAU,CAACitM,GAAWngK,EAAK/qC,KAAM/B,QACjH,OAAO+pM,GAAMn2B,EAAO,EAGhBtyB,GAAUoS,IACd,IAAInlJ,EAIJ,MAAO,CACLm+U,eAJqBjgO,GA/DIu/E,GAAM,SAAU8/I,GA+DEp4L,IAK3Ci5L,cAJoBL,GAAoB54L,GAKxCk1B,YAJmD,QAAhCr6K,EAAKmlJ,EAAUk1B,mBAAgC,IAAPr6K,EAAgBA,EAAK,CAAC,EAKlF,EAEGq+U,GAAgB,CACpB53T,KAAM,CAACgzM,EAASt0E,KACd,MAAMw4C,EAAa5qD,GAAQoS,GAC3B,OAAOs0E,EAAQ97B,EAAWwgJ,eAAgBxgJ,EAAWtjB,YAAasjB,EAAWygJ,cAAc,EAE7FE,QAAS,CAAC7kH,EAASt0E,IAEVs0E,EADgBv7G,GA1DKu/E,GAAM,SAAUigJ,GA0DIv4L,KAGlDo5L,OAAQp5L,GAAapS,GAAQoS,IAiC/B,IAAIq5L,GAAgCpyV,OAAOqhE,OAAO,CAC9CriC,UAAW,KACXsd,OAhCW,CAAC+1S,EAAkBC,KAChC,MAAM16R,EAAS,CAACstB,EAAWpyE,KACzBu/U,EAAiBz/J,YAAYtiJ,MAAKsiJ,IAChC,MAAMqwC,EAAWrwC,EAAY1tG,EAAWpyE,GACxCw/U,EAAgBzvV,IAAIogO,EAAS,IAE/BovH,EAAiBE,iBAAiBjiT,MAAKiiT,IACrC,MAAMC,EAAgBD,EAAiBz/U,EAAMw/U,EAAgB3vV,QAC5C0vV,EAAiBvwG,SAAWd,GAAYD,IAChD77J,EAAWstQ,EAAc,GAClC,EAEJ,OAAOj6I,GAAS,CACdE,GAAM9B,MAAW,CAACzxH,EAAW9iF,KAC3B,MAAMqxN,EAAgBrxN,EACtB,IAAKqxN,EAAcE,UAAW,CAC5B,MAAM+0H,EAAU2J,EAAiB3J,QAC7Bp2N,EAAWmhG,EAAcD,SAAUk1H,IACrC9wR,EAAOstB,EAAWuuI,EAAc3gN,KAEpC,KAEF2mM,IAAc,CAACh0D,EAAM2iF,KACnBiqH,EAAiBpkK,YAAY39I,MAAKjX,IAChCu+B,EAAO6tF,EAAMpsH,EAAQ,GACrB,KAEJ,IAUJ,IAAIo5T,GAA8BzyV,OAAOqhE,OAAO,CAC5CriC,UAAW,KACXwnM,SAJa,CAACthJ,EAAW08J,EAAe8wG,IAAiBA,IAOzDC,GAAmB,CACrBtgJ,GAAW,WACXU,GAAS,oBACTA,GAAS,eACTA,GAAS,eACTa,GAAiB,YAAY,IAoB/B,MAAMg/I,GAAav2I,GAAS,CAC1BpjC,OAAQ05K,GACRvrV,KAAM,aACNm3C,OAAQ6zS,GACRl3I,KAAMu3I,GACNpsK,MAViCrmL,OAAOqhE,OAAO,CAC7CriC,UAAW,KACXmvC,KAdS,KACX,MAAMivD,EAAOyxC,GAAKl+C,EAASE,QAG3B,MAAO,CACLorF,UAFgB,IAAM7+E,EAAKz6H,MAAM6uH,MAAM,QAGvC7uH,IAAKy6H,EAAKz6H,IACVE,IAAKu6H,EAAKv6H,IACVsP,MANY,IAAMirH,EAAKv6H,IAAI8tH,EAASE,QAOrC,MAgBGgiO,GAAgBnxV,IACpB,MAAMmrM,EAAS,GACT/oL,EAAS,CAAC,EAQhB,OAPAwsB,GAAK5uC,GAAQ,CAAC0B,EAAOgE,KACnBhE,EAAM2tH,MAAK,KACT87E,EAAO5pM,KAAKmE,EAAK,IAChBqY,IACDqE,EAAO1c,GAAQqY,CAAC,GAChB,IAEGotL,EAAOv8L,OAAS,EAAIo4I,GAAOvmJ,MAAM0qM,GAAUnkD,GAAOtlJ,MAAM0gB,EAAO,EAGlEgvU,GAAkB,CAAClhK,EAAM+nH,EAAYpyC,EAAWqyC,KACpD,MAAMm5C,EAAUl9F,GAAOylC,GAAK/vD,QAAOzoO,IAAS,CAC1C8xH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,YAAY/a,OAAO8vL,EAAK/0K,UAEpCswM,WAAYllB,EAAMrW,EAAKx7I,OAAOjE,GAAQ6tQ,GAAgBl9S,EAAOqvC,EAAMwnQ,EAAYpyC,EAAWqyC,UAE5F,MAAO,CACLhlL,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBAEZswM,WAAY,CAAC,CACTv4F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,6BAEZswM,WAAY,CAAC4lI,EAAQ/8F,YAEzBjvG,WAAYm1D,GAAS,CACnBwkC,GAAO9pN,OAAO,CACZ3F,KAAM,UACNmmN,aAAc5mH,EAAI8yK,MAEpBtC,GAAyB+xD,GACzB5xD,GAAQ4xD,EAAS,CACf1xD,YAAa2xD,GAAaH,GAAcG,GAAWjiO,MAAK71F,IACtD3c,QAAQpc,MAAM+4B,GACP,CAAC,IACPi1F,KAELv5F,GAAO,oBAAqB,CAAC6hL,GAAM3C,MAAW,CAACrwD,EAAMioG,KACjDjoG,EAAK4yD,YAAY0O,YAAY,CAAC68E,IAA4B,CAAE7uE,SAAUpkG,EAAS/iH,KAAK8/O,EAAG7tP,MAAM6D,SAAU,QAG9G,EAwBGuvV,GAAYx9K,GAAO,CACvBruK,KAAM,YACNqoO,aAAc,CACZl8B,GAAU,WAAO1uM,GACjBwtM,GAAW,SACXH,GAAQ,MAAO,MAAOvE,IAAe,KAAM,CACzCtmM,WAAY,CACV,KAAQ,MACR,GAAMw+M,GAAW,QACjB,gBAAiB,aAEhBxV,MACL0C,GAAS,UACTQ,GAAU,kBAAmB,CAAC,GAC9BzpH,GAAM,sBAAuB,CAC3Bo5J,GACAxC,GACA/W,KAEFt3B,GAAW,SAEbg7B,QA1CgB,CAAChrO,EAAQ4kP,KAAU,CACnCt3M,IAAKttC,EAAOstC,IACZilF,IAAKvyH,EAAOuyH,IACZu4F,WAAY9qN,EAAO8qN,WACnB7wK,OAAQkoM,GAASniP,EAAO0G,QACxBg+I,WAAYkjF,GAAQ5nO,EAAO6wV,oBAAqB,CAC9ChwG,GAAStsN,OAAO,CAAC,GACjB8pN,GAAO9pN,OAAO,CACZ3F,KAAM,YACNwnN,UAAU,EACVE,UAAU,IAEZhP,GAAa/yM,OAAO,CAClBovM,MAAO,CACL/0M,KAAM,SACNo4M,aAAchnO,EAAOe,WAI3BiqN,gBAAiBhrN,EAAOgrN,oBA0BpB8lI,GAAWvrJ,EAAW,CAC1ByK,GAAW,QACXA,GAAW,OACXkB,GAAU,kBAAkB,GAC5BzpH,GAAM,mBAAoB,CACxB2pJ,GACAiN,KAEFj8B,GAAU,CACR,WACA,oBAGE2uI,GAAW10N,GAAM,CACrB2uG,QAAS4lH,GACT7rV,KAAM,OACNsoB,KAAM,MACNmsB,UAAWw3S,IACT,MAAMC,EAAe,CAACC,EAAQtrV,KAC5BwrO,GAAaX,YAAYygH,EAAQtrV,GACjCkwM,GAASo7I,EAAQz7I,KAAc,CAC7By7I,SACAtrV,UACA,EAEEurV,EAAc,CAACD,EAAQtrV,KAC3BwrO,GAAaxB,UAAUshH,EAAQtrV,GAC/BkwM,GAASo7I,EAAQ17I,KAAa,CAC5B07I,SACAtrV,UACA,EAEJ,MAAO,CACLc,OAAQd,IACN,MAAMsrV,EAAStrV,EAAOowM,YAAYS,SAASu6I,EAAU1jT,KAAKmiF,WACpDw7L,EAAe75E,GAAavB,cAAcqhH,EAAQtrV,IAElDqlT,GAAgB+lC,EAAUI,eACrBH,EACGhmC,EAGH59Q,EAFA8jT,GAKFD,EAAQtrV,EAAO,EAE1BolN,gBAAiB,CAAExwM,QAAS,CAACw2U,EAAUzsG,QAAQ8sG,WAChD,IAGCC,GAAU/rJ,EAAW,CAACwrJ,KA6BtBQ,GAASjkH,GAAU,CACvBvoO,KAAM,SACNqoO,aAAc0jH,KACdvjH,WAAY+jH,KACZtmH,QA/BgB,CAAChrO,EAAQ8qN,EAAY85B,EAAOC,KAAe,CAC3D,IAAO7kP,EAAOstC,IACd,IAAOttC,EAAOuyH,IACdu4F,aACA,iBAAkB,SAClB,gBAAmB,CAAE9lN,WAAY,CAAE49O,KAAM,YACzC,WAAchb,GAAQ5nO,EAAOwxV,iBAAkB,CAC7CpgH,GAAa78M,OAAO,CAClBk7M,eAAgBzvO,EAAOukP,QAAQktG,cAC/BxhH,UAAWjwO,EAAOukP,QAAQ8sG,SAC1BvhH,YAAa,CAACohH,EAAQ70U,KACpB4qL,GAAM5qL,EAAIjb,QAAS,gBAAiB,OAAO,EAE7CuuO,cAAe,CAACuhH,EAAQ70U,KACtB4qL,GAAM5qL,EAAIjb,QAAS,gBAAiB,QAAQ,IAGhDi9O,GAAO9pN,OAAO,CACZ3F,KAAM,OACNyrN,WAAY62G,GACH9/G,GAAaJ,eAAekgH,GAAQ1xV,KAAI6c,GAAOA,EAAIjb,UAE5DsJ,SAAU,IAAM1K,EAAOukP,QAAQ8sG,SAC/B12G,eAAe,UAiBf+2G,GAAUt+K,GAAO,CACrBruK,KAAM,UACNqoO,aAAc,CAAC3lJ,GAAM,oBAAqB,CAACw4J,MAC3CjV,QATgB,CAAChrO,EAAQ4kP,KAAU,CACnCt3M,IAAKttC,EAAOstC,IACZilF,IAAKvyH,EAAOuyH,IACZmyB,WAAYkjF,GAAQ5nO,EAAO2xV,kBAAmB,CAAC1xG,GAAU1rN,OAAO,CAAC,KACjEy2L,gBAAiB,CAAEhmN,WAAY,CAAE49O,KAAM,iBAQnC5/O,GAASuiM,EAAW,CACxB2L,GAAU,eAAe,GACzBqR,GAAU,eACVA,GAAU,gBACVrR,GAAU,OAAQ,IAClBzpH,GAAM,uBAAwB,MAE1BmqQ,GAAU36K,GAAS,CACvB+zD,QAASumH,GACTvuV,OAAQ,CACNgtM,GAAW,OACXK,GAAc,UAAW,CACvBL,GAAW,YACXA,GAAW,oBAGfjrM,KAAM,SACN02C,SAAUz7C,IACD,CAAE6xV,KAAM7xV,EAAO6xV,SAGpBC,GAAW76K,GAAS,CACxB+zD,QAAS0mH,GACT3sV,KAAM,YAEFtE,GAAQ8kM,EAAW,CACvBqsJ,GACAE,KA0DIC,GAAazkH,GAAU,CAC3BvoO,KAAM,aACNqoO,aAAcpqO,KACduqO,WAAY9sO,KACZuqO,QA3Dc,CAAChrO,EAAQ8qN,EAAY85B,EAAOC,KAC1C,MAcMmtG,EAAc,CAACp6N,EAASq6N,KAC5B7mH,GAAQxzG,EAAS53H,EAAQ,UAAUiuC,MAAKijT,IACtCe,EAAOf,GAAQjjT,KAAK8nK,GAAY,GAChC,EAEJ,MAAO,CACLzoK,IAAKttC,EAAOstC,IACZilF,IAAKvyH,EAAOuyH,IACZu4F,aACApmE,WAAY+Y,GAAMz9J,EAAOkyV,sBACzBj4S,OAAQi8J,GAAShlF,EAAQ,CACvBlxH,EAAOmyV,YAAc,CAAC/6I,IAAc,CAACx/E,EAASugF,KAC1C65I,EAAYp6N,EAASw5G,GAAalB,SAAS,KACvC,GACR,CACE95B,GAAMZ,MAAa,CAAC59E,EAASm7E,KA7BfntM,KAClB,MAAMwsV,EAAW9qH,GAAapgL,SAASthD,GACvCwlO,GAAQxlO,EAAQ5F,EAAQ,WAAWiuC,MAAKokT,IACtC,MAAMC,EAAexsJ,EAAO9lM,EAAO6xV,MAAMtlT,GAAKA,EAAExrC,QAAUqxV,IAC1DE,EAAarkT,MAAKskT,IAChB,MAAMruD,EAAQquD,EAAQ11K,OACtBvpD,GAAO1tH,EAAOxE,QAAS,MAAM6sC,MAAKvc,IAChCu1K,GAAMorJ,EAAQjxV,QAAS,kBAAmBswB,EAAG,IAE/CuuN,GAAUz/O,IAAI6xV,EAASnuD,GACvBlkS,EAAOwyV,YAAYH,EAASzsV,EAAQs+R,EAAM,GAC1C,GACF,EAmBIitD,CADep+I,EAAev1M,MAAMoI,OACjB,IAErBwwM,GAAMX,MAAc,CAAC79E,EAASm7E,KAC5B,MAAMntM,EAASmtM,EAAev1M,MAAMoI,OACpC5F,EAAOyyV,aAAa76N,EAAShyH,EAAO,QAI1CizM,KAAM,CACJ65I,aAAc96N,GACLwzG,GAAQxzG,EAAS53H,EAAQ,WAAWR,KAAI6yV,GAAWpyG,GAAUjvF,SAASqhM,KAAUljO,MAAM,IAE/FwjO,QAAS,CAAC/6N,EAASg7N,KAMjBZ,EAAYp6N,GALcs5N,IACxB,MAAM7zN,EAAa+zG,GAAad,cAAc4gH,GAE9C,OADeprJ,EAAOzoE,GAAYtgH,GAAKuqN,GAAapgL,SAASnqC,KAAO61U,IACtDnuV,QAAO4X,IAAQ+0N,GAAavB,cAAcqhH,EAAQ70U,IAAK,GAEhC,GAG5C,EAODw8L,KAAM,CACJ65I,aAAc,CAAC75I,EAAMh2H,IAAcg2H,EAAK65I,aAAa7vQ,GACrD8vQ,QAAS,CAAC95I,EAAMh2H,EAAW+vQ,KACzB/5I,EAAK85I,QAAQ9vQ,EAAW+vQ,EAAO,KA0C/BC,GAAmB,CAACR,EAASn/T,KACjCk0K,GAAMirJ,EAAS,SAAUn/T,EAAS,MAClCk0K,GAAMirJ,EAAS,aAAcn/T,EAAS,KAAK,EAEvC4/T,GAAsB,CAACC,EAAYV,EAASW,KAChD75N,GAAS45N,EAAY,mBAAmB9kT,MAAKkiJ,IAC3C12D,GAAW02D,EAAQ,oBAAoBliJ,MAAKglT,IAC1CD,EAAa1yV,MAAMd,KAAI0zB,IACrBk0K,GAAMirJ,EAAS,SAAU,KACzBjrJ,GAAMirJ,EAAS,aAAc,KACtBnkV,KAAKyW,IAAIuO,EAhCI,EAACi9J,EAAQkiK,EAASY,KAC5C,MAAMC,EAAoBr4U,GAAgBs1K,GAAQ59D,IAC5C62L,EAAUjwL,GAASg3D,EAAQ,oBAAoBhhE,MAAMghE,GAE3D,IAAI5iI,EAEFA,EAH6C,UAA/B85I,GAAM+hH,EAAS,YAGjBl7S,KAAKC,IAAI+kV,EAAkBplS,aAAcrsD,OAAOivK,aAEhDxiK,KAAKC,IAAI+kV,EAAkB/rN,aAAc+rN,EAAkBxxD,cAEzE,MAAMyxD,EAAgBzrJ,GAAM2qJ,GAEtBe,EADkBf,EAAQ9/N,IAAIn2C,YAAc62Q,EAAQ1gO,IAAIn2C,WAAai1C,GAAM4hO,GACtC/kV,KAAKC,IAAIu5L,GAAMurJ,GAAUE,GAAiBA,EAC/EE,EAAkBjwU,SAASikL,GAAMlX,EAAQ,cAAe,KAAO,EAC/DmjK,EAAqBlwU,SAASikL,GAAMlX,EAAQ,iBAAkB,KAAO,EAG3E,OAAO5iI,GAFcm6I,GAAMvX,GAAUkjK,EAAkBC,EACnBF,EACL,EAeDG,CAAoBpjK,EAAQkiK,EAASY,OAC5DhlT,MAAK/a,IACN2/T,GAAiBR,EAASn/T,EAAO,GACjC,GACF,GACF,EAEEsgU,GAAarjK,GAAU12D,GAAW02D,EAAQ,qBAC1CsjK,GAAYC,IAChB,MAAMV,EAAenpJ,KACf8pJ,EAAc,CAClBv8I,IAAch0D,IACZ,MAAM+sC,EAAS/sC,EAAKhiJ,QACpBoyV,GAAWrjK,GAAQliJ,MAAKokT,IACtBjrJ,GAAMirJ,EAAS,aAAc,UAC7BjvM,EAAK4yD,YAAYe,SAASs7I,GAAS9rM,aAAat4G,MAAK2lT,IACnD,MAAMl3Q,EA/DO,EAACg3Q,EAASrB,EAASuB,IAAgBhuJ,EAAM8tJ,GAAS,CAACG,EAAMnwU,KAC9Eu8N,GAAUz/O,IAAIozV,EAAaF,EAAQhwU,GAAGm5J,QACtC,MAAM/7H,EAAOuxS,EAAQ9/N,IAAI1lE,wBAEzB,OADAozL,GAAUz/O,IAAIozV,EAAa,IACpB9yS,EAAK5tB,MAAM,IA2DM4gU,CAAeJ,EAASrB,EAASuB,GAC3CG,EA1DKr3Q,IAAW5+D,GAAKzf,EAAKq+E,GAAS,CAAC/2E,EAAG2R,IACjD3R,EAAI2R,GACE,EACC3R,EAAI2R,EACN,EAEA,KAoDuBssK,CAAalnG,GACrCq3Q,EAAgBrlO,KAAKskO,EAAaljV,MAAOkjV,EAAaxyV,IAAI,IAE5DsyV,GAAoB3iK,EAAQkiK,EAASW,GACrCz/N,GAAS8+N,EAAS,cAlCV,EAACqB,EAAStwM,KACxBtlI,GAAK41U,GAASzlT,MAAK5xB,GAAO01U,GAAWY,QAAQvvM,EAAM/mI,EAAItb,QAAO,EAkCxD4xV,CAAQe,EAAStwM,GACjBnvG,uBAAsB,KACpB6+S,GAAoB3iK,EAAQkiK,EAASW,EAAa,GAClD,GACF,IAEJ58I,GAAMpB,MAAgB5xD,IACpB,MAAM+sC,EAAS/sC,EAAKhiJ,QACpBoyV,GAAWrjK,GAAQliJ,MAAKokT,IACtBS,GAAoB3iK,EAAQkiK,EAASW,EAAa,GAClD,IAEJ58I,GAAMm2E,IAAiB,CAACnpI,EAAM2iF,KAC5B,MAAM51C,EAAS/sC,EAAKhiJ,QACpBoyV,GAAWrjK,GAAQliJ,MAAKokT,IACtB,MAAM5/H,EAAWJ,GAASn6F,GAAYm6N,IACtCjrJ,GAAMirJ,EAAS,aAAc,UAC7B,MAAM2B,EAAYr/M,GAAO09M,EAAS,UAAU7yV,KAAI+9B,GAAKna,SAASma,EAAG,MACjEg2F,GAAS8+N,EAAS,UAClB9+N,GAAS8+N,EAAS,cAClB,MAAM5iR,EAAY4iR,EAAQ9/N,IAAI1lE,wBAAwB35B,OACrC8gU,EAAU9kO,QAAO3xF,GAAKkyC,EAAYlyC,KAEjDy1T,EAAaxyV,IAAIivE,GACjBqjR,GAAoB3iK,EAAQkiK,EAASW,IAErCgB,EAAU/lT,MAAK1Q,IACbs1T,GAAiBR,EAAS90T,EAAE,IAGhCg2F,GAAS8+N,EAAS,cAClB5/H,EAASxkL,KAAK+jL,GAAQ,GACtB,KAIN,MAAO,CACL2hI,cACAxB,aAHkB,EAInB,EAGG8B,GAA2B,uBAC3BC,GAAwB,oBACxBC,GAAiB,CAAC5kK,EAAM+nH,EAAYpyC,EAAWqyC,KACnD,MAAM68C,EAAc5nL,GAAK,CAAC,GACpB6nL,EAAqBxuV,IACzB,MAAMyuV,EAAWhtH,GAAapgL,SAASrhD,GACjC0uV,EAAY/D,GAAc8D,GAAUnlO,MAAM,CAAC,GAC3CopJ,EAAc67E,EAAY9zV,MAC1B+uL,EAAU6b,GAAUqtE,EAAag8E,GACvCH,EAAY5zV,IAAI6uL,EAAQ,EAEpBmlK,EAAgB3uV,IACpB,MAAM0sV,EAAU6B,EAAY9zV,MAC5BgnO,GAAartH,SAASp0G,EAAM0sV,EAAQ,EAEhCkC,EAASjoL,GAAK,MACdknL,EAAU9tJ,EAAMrW,EAAKsiK,MAAMx1U,IACxB,CACLtb,MAAOsb,EAAItX,KACXwtH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,8BAEZswM,WAAY,CAACqC,GAAO+3C,EAAUpsM,OAAOotM,UAAU5lN,UAAUjkC,EAAIqI,SAC7Dm4J,KAAM,IACG,CAACo8G,GAAK/vD,QAAOzoO,IAAS,CACzB8xH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,aAEZswM,WAAYllB,EAAMvpL,EAAI03B,OAAOjE,GAAQ6tQ,GAAgBl9S,EAAOqvC,EAAMwnQ,EAAYpyC,EAAWqyC,KACzF1e,eAAgBh/E,GAAS,CACvBwkC,GAAO9pN,OAAO,CACZ3F,KAAM,UACNmmN,aAAc5mH,EAAI8yK,MAEpB1sQ,GAAO,sBAAuB,CAC5B6iL,GAAco9I,GACdn9I,GAAcg9I,KAEhBziI,GAAUr9L,OAAO,CACf48L,SAAUhf,GAAQ,CAChB,CACExxM,IAAKszV,GACLlzV,MAAO,CAAE2wN,UAAW2iI,IAEtB,CACE1zV,IAAKuzV,GACLnzV,MAAO,CAAE2wN,UAAW8iI,mBAShCE,EAAUjB,GAAUC,GAC1B,OAAO3B,GAAW7oH,OAAO,CACvB32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBAEZg4U,YAAa,CAAC56N,EAAShyH,EAAQ+uV,KAC7B,MAAM5vV,EAAOuiO,GAAapgL,SAASthD,GACnCkwM,GAASl+E,EAAS00J,GAAoB,CACpCvnR,OACA6vV,QAASH,EAAOn0V,QAElBm0V,EAAOj0V,IAAIuE,EAAK,EAElB8sV,KAAM6B,EACN5oI,WAAY,CACVinI,GAAWtxV,MAAMywV,OAAO,CACtB3+N,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,yBAEZswM,WAAY,CAACymI,GAAO9wV,MAAMoxV,KAAK,CAAC,IAChCttG,QAAS,CACP8sG,SAAU,UACVI,cAAe,qCAEjBD,iBAAkB33I,GAAS,CAACm6C,GAAYz/N,OAAO,CAAC,OAElDw9T,GAAWtxV,MAAM4xV,QAAQ,CACvB9/N,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,gCAIhB23U,YAAauC,EAAQvC,YACrBD,qBAAsBr4I,GAAS,CAC7BtlL,GAAO,WAAYmgU,EAAQf,aAC3Bt1G,GAAO9pN,OAAO,CAAE3F,KAAM,YACtBi/M,GAAUt5M,OAAO,CAAEhgB,KAAM6uI,GAAQtlI,GAAKi0U,GAAWW,aAAatvM,MAC9D67I,GAAS3wK,EAASE,QAAQqmO,IACxBA,EAAS7+I,YAAY0O,YAAY,CAACuvI,IAA2B,CAAC,GACvDG,EAAY9zV,SAClB,CAACu0V,EAAU9zV,KACZqzV,EAAY5zV,IAAIO,GAChB8zV,EAAS7+I,YAAY0O,YAAY,CAACwvI,IAAwB,CAAC,EAAE,OAGjE,EAGEY,GAAa,CAACvlK,EAAMwlK,EAAUC,EAAW9vF,EAAW+vF,EAAW19C,KAc5D,CACLhlL,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,0BACVxV,WAAY,IACPgwV,EAAUx1V,KAAImpB,IAAK,CAAG+I,GAAI/I,MAAMwmG,MAAM,CAAC,MACvC8lO,EAPc,CAAE,YAAa,UAOA,CAAC,IAGrCnqI,WAAY,GACZpmE,WAAYm1D,GAAS,CACnB8kF,GAAyB,GACzB4xD,GAAWh8T,OAAO,CAChB8xT,QAAS,GAAIjlD,MAAiB2zD,IAC9BxkK,YAhBc,CAACslI,EAAOq/B,IAAa5mO,EAAS/iH,KAAK,CAAE4pV,WAAY,IAA6B,aAAvBD,EAAShhV,KAAKhL,OAiBnFgnV,iBA5BmBgF,IACvB,MAAMhhV,EAAOghV,EAAShhV,KACtB,MACK,aADGA,EAAKhL,KAEF,CAACirV,GAAejgV,EAAMghV,EAAStpK,YAAas5E,EAAWqyC,IAGvD,CAACk5C,GAAgBv8U,EAAMghV,EAAStpK,YAAas5E,EAAWqyC,GAEnE,EAoBI3rH,YAAa2D,QAwCfxuD,GAAUmyD,GAASvyD,WAAWI,UAC9Bq0N,GAAe,CAAC1wU,EAAO+pK,KAAU,CACrCl8D,IAAK,CACHhE,IAAK,MACLviE,OAAQ,CAAEhjC,QAAS,QACnBxO,QAAS,CAAC,uBAEZswM,WAAY,CACVpmM,EACA+pK,KAGE4mK,GAAS,CAACnyH,EAAS0uC,IAAuB62E,GAAYhoV,MAAMguL,MAAM0kE,GAAOjqB,OAAO,CACpF32G,IAAK,CACHhE,IAAK,SACL/zG,QAAS,CACP,aACA,mBACA,qBAEFxV,WAAY,CACV,KAAQ,SACR,aAAc4sQ,EAAmBtxN,UAAU,WAG/C55C,OAAQw8N,EACRmwB,iBAAkBx5C,GAAS,CAACm6C,GAAYz/N,OAAO,CAAC,QAE5C+gU,GAAY,IAAM7M,GAAYhoV,MAAMikB,MAAM,CAC9C6tG,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBACVivM,UAAW,GACXz9J,OAAQ,CAAEhjC,QAAS,WAGjBusU,GAAe,CAACx1V,EAAS6xQ,IAAuB62E,GAAYhoV,MAAMyT,KAAK,CAC3Eq+G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,qBAEZswM,WAAY,CAAC,CACTv4F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,6BAEZswM,WAAY,CAAC,CAAEv4F,IAAKqB,GAAS,MAAO6uI,GAAmBmP,EAAmBtxN,UAAUvgD,iBAGpFy1V,GAAUl/K,GAAWmyK,GAAYhoV,MAAMugG,OAAO,CAClDuxB,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,uBAEZswM,WAAYx0C,IAERm/K,GAAe,CAACC,EAAclgC,IAAe,CACjDprC,GAAUlhD,OAAO,CACf32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,6BAEZswM,WAAY4qI,IAEdtrE,GAAUlhD,OAAO,CACf32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,2BAEZswM,WAAY0qG,KAGVmgC,GAAiBpmK,IACrB,MAAMqmK,EAAc,aACdzZ,EAAeyZ,EAAc,QAC7BC,EAAuB1Z,EAAe,aACtC2Z,EAAkBF,EAAc,mBACtC,OAAOnN,GAAYv/G,OAAO,CACxByjB,SAAUp9D,EAAKo9D,SACfpX,SAAUnyF,IACRmsC,EAAKgmD,SAASnyF,GACP90B,EAAS/iH,MAAK,IAEvBwpO,aAActgH,IAASwsK,GAAaxsK,GACpCigH,aAAcnlD,EAAKmlD,aACnBniH,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAACo7U,GAAan2V,OAAO8vL,EAAKm8F,cACnC1/N,OAAQ,CACN/iC,SAAU,cACPsmK,EAAKwmK,cAGZjrI,WAAY,CACVv7B,EAAK+2E,OACL/2E,EAAKr7K,QACFq7K,EAAKvuF,OAAO6uB,WAEjBpvH,MAAO,CACLm5K,QAAS,CACPrnD,IAAKqB,GAAS,eAAgBuoN,aAC9BrxH,WAAY,CAAC,CACTv4F,IAAK,CACHhE,IAAK,MACL/zG,QAASumH,GAAU,CACjB80N,EACAA,EAAuB,YACrB,CAACA,QAKftN,eAAgBpM,EAChB6M,gBAAiBnvI,GAAS,CACxBgnC,GAAStsN,OAAO,CAAC,GACjBA,GAAO,gBAAiBg7J,EAAKymK,aAAav2V,OAAO,CAC/C03M,GAAY1D,MAAW,CAACrwD,EAAM2iF,KAC5BooF,GAASR,UAAUvqK,IAAiBi7F,GAAOzK,QAAQxwF,EAAK,IAE1DgzD,GAAMf,MAAgB,CAACjyD,EAAMioG,KAC3BjoG,EAAK4yD,YAAY0O,YAAY,CAAC68E,IAA4B,CAAE7uE,SAAU24B,EAAG7tP,MAAMk1N,UAAW,OAG9Fn+L,GAAO,cAAe,CACpB6iL,IAAc,KACZvkC,GAAM3+J,KAAQ4hV,EAAgB,IAEhCz+I,IAAc,KACZqD,GAASxmM,KAAQ4hV,EAAgB,SAGlCvmK,EAAKo8F,kBAEVzlE,WAAY,CACV,CAAC3R,MAAc,CAAC,iBAChB,CAACU,MAAkB,CACjB,cACA,gBACA,wBAEF,CAACC,MAAoB,CACnB,uBACA,gBACA,kBAEC3lB,EAAK22B,aAEV,EAGE+vI,GAAcrkF,GAAsBze,GAAOjqB,OAAO,CACtD32G,IAAK,CACHhE,IAAK,SACL/zG,QAAS,CACP,aACA,mBACA,qBAEFxV,WAAY,CACV,KAAQ,SACR,aAAc4sQ,EAAmBtxN,UAAU,SAC3C,gBAAiB,UAGrB+yM,iBAAkBx5C,GAAS,CACzBm6C,GAAYz/N,OAAO,CAAC,GACpBuhO,GAAYvhO,OAAOq9O,EAAmBnN,SAAS3rD,UAAU,CAAE4rD,YAAakN,EAAmBtxN,UAAU,cAEvGwqK,WAAY,CAAC24C,GAAS,QAAS,CAC3Bl1I,IAAK,OACL/zG,QAAS,CAAC,aACTo3P,EAAmB5kJ,QACxBtmH,OAAQ08I,IACNwyD,GAAKxyD,EAAM6oI,GAAgB,IAGzBiqE,GAAc,CAAC3mK,EAAMwlK,EAAUoB,EAASvkF,KAErC,CACLr/I,IAAK,CACHhE,IAAK,KACL/zG,QAAS,CAAC,qBACVxV,WAAY,IAAKmxV,EAAQ32V,KAAImpB,IAAK,CAAG+I,GAAI/I,MAAMwmG,MAAM,CAAC,KAExD27F,WAAY,GACZpmE,WAAYm1D,GAAS,CAAC02I,GAAWh8T,OAAO,CACpC8xT,QAAS,GAAIllD,MAAkB4zD,IAC/BnpK,YAAa2D,EACb2gK,iBAXmBz/U,GAAQ,CAAC08M,GAAOykD,EAAmBtxN,UAAU7vC,EAAKiU,eAevE0xU,GAAmB,KAAM,CAAG7jO,IAAKqB,GAAS,gDAgC1CulM,GAAY,CAACz0S,EAAOqwU,EAAU7vF,IAXV,EAAC31E,EAAMwlK,EAAUnjF,KACzC,MAAMykF,EAAS5N,GAAYhoV,MAAMikB,MAAMwxU,GAAY3mK,EAAMwlK,EAAUzmO,EAASE,OAAQojJ,IAC9E0kF,EAAU7N,GAAYhoV,MAAM81V,WAAWH,MACvCf,EAAS5M,GAAYhoV,MAAMguL,MAAMwnK,GAAYrkF,IAC7C9mD,EAAa,CAACurI,GAAQ52V,OAAO8vL,EAAKinK,UAAY,CAACF,GAAW,IAAI72V,OAAO,CAAC41V,IAC5E,OAAOjrE,GAAUlhD,OAAO,CACtB32G,IAAKqB,GAAS,0CACdk3F,cACA,EAG8C2rI,CAAkB,CAClE/xU,MAAOwgP,EAAUpsM,OAAOotM,UAAU5lN,UAAU57B,GAC5C8xU,UAAWtxF,EAAU/0E,OAAOmiE,oBAC3ByiG,EAAU7vF,EAAUpsM,OAAOotM,WACxBsnD,GAAc,CAACztT,EAAS22V,EAAIxwF,EAAWyiD,KAAiB,CAC5Dp2L,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,4BACVxV,WAAY,CAAE,aAAckhQ,EAAU5lN,UAAUvgD,IAChDisD,OAAQ,CACN1tD,KAAM,MACNC,MAAO,MACPk+C,OAAQ,MACRxpB,IAAK,GAAI01R,EAAax5L,MAAM,OAC5BlmG,SAAU,aAGdy7H,WAAYgyM,EACZ5rI,WAAY,CAAC,CAAEv4F,IAAKqB,GAAS,wEAEzB+iO,GAAiB,CAACC,EAAY1wF,EAAW15J,KAAU,CACvD02H,QAAS,IAAM12H,EAAMqqP,cACrBjpC,QAASkpC,IACP,MAAMnuC,EAAelvL,GAAWm9N,IAAax1V,QAAS,uBAAuB5B,KAAI8mQ,GAAU5+D,GAAM4+D,KACjGmiF,GAAYM,QAAQ6N,KAAc,CAAC/gC,EAAO6gC,IAAOlpC,GAAYspC,EAAW/2V,QAAS22V,EAAIxwF,EAAWyiD,IAAc,EAEhHoF,UAAW,KACT06B,GAAYK,QAAQ8N,IAAa,IAG/BG,GAAkB,yBAClBC,GAAmB,uBACnBC,GAAoB,uBACpBC,GAAqBh5V,IACzB,OAAQA,GACR,IAAK,QACH,OAAOowH,EAAS/iH,KAAKyrV,IACvB,IAAK,SACH,OAAO1oO,EAAS/iH,KAAK0rV,IACvB,QACE,OAAO3oO,EAASE,OAClB,EAEI2oO,GAAwB,CAACj5V,EAAM2kF,KACnC,MAAMkwQ,EAAap/N,GAAaS,QAAQvxC,EAAUzhF,QAAQmxH,KACrD1pH,GAAIkqV,EAAYgE,MACnBl8I,GAASk4I,EAAY,CACnBiE,GACAC,KAEFC,GAAmBh5V,GAAM+vC,MAAKmpT,GAAmBvkL,GAAMkgL,EAAYqE,KACrE,EAEIC,GAAmB,CAACj0M,EAAMk0M,KAC9B,MAAMvE,EAAap/N,GAAaS,QAAQgvB,EAAKhiJ,QAAQmxH,KAC/C/3G,EAAU6nH,GAAM0wN,GAChBwE,EAAmBzxJ,EAAOtrL,GAASuC,GAAKA,IAAMi6U,IAAoBj6U,IAAMk6U,KAAmB5nO,GAAG6nO,GAAmBI,IA9w2BxG,EAACl2V,EAASoZ,KACzBg3G,EAAOh3G,GAASmO,IACdgyL,GAASv5M,EAASunB,EAAE,GACpB,EA4w2BF6uU,CAASzE,EAAY,CACnBgE,MACGQ,EAAiB1nO,WACpB,EAEE4nO,GAAoB,CAACloK,EAAMymK,EAAc9wF,IAAcl4C,GAAQ2oI,GAAe,IAC/EpmK,EACHmlD,aAAc,EACdiY,SAAUuY,EAAUpsM,OAAOutM,QAC3BslB,gBAAiB,CACfjlD,GAAO,CAAC,MACLn3C,EAAKo8F,iBAEVp2C,SAAUnyF,IACRwyD,GAAKxyD,EAAM6oI,GAAgB,EAE7B+pE,eACA9vI,WAAY,CACV,CAAC5R,MAAY,CACXi8I,GAAWxrV,OACX6sN,GAAU7sN,QAEZ,CAACkwM,MAAkB,CACjB,cACAs7I,GAAWxrV,OACX,WACA,gBACA,wBAEF,CAACmwM,MAAoB,CACnB,uBACA,gBACA,WACAq7I,GAAWxrV,OACX,mBAIA2yV,GAAiB,CAACphL,EAASqhL,EAAiB,CAAC,IAc1C/xJ,EAAMtvB,GAAS1wK,GACG,SAAhBA,EAAOsD,KAdCtD,KACf,MAAMmuC,EAAQ6xJ,EAAMhgM,EAAOmuC,OAAOjE,IAChC,MAAMirF,EAAOsrE,GAAMsxJ,EAAgB7nT,EAAK/qC,MAAMoqH,MAAMq9C,IAAK,IACzD,MAAO,IACF18H,EACHyW,QAASw0E,EACV,IAEH,MAAO,IACFn1H,EACHmuC,QACD,EAG+B6jT,CAAShyV,GAAUA,IAGjDiyV,GAAuBvhL,GAAWxlD,EAAMwlD,GAAS,CAACpiH,EAAKtuD,KAC3D,GAAoB,SAAhBA,EAAOsD,KAAiB,CAE1B,OAAO4nH,EADYlrH,EACKmuC,OAAO,CAAC+jT,EAAUhoT,KACxCgoT,EAAShoT,EAAK/qC,MAAQ+qC,EAAKyW,QACpBuxS,IACN5jS,EACL,CACA,OAAOA,CAAG,GACT,CAAC,GAEE6jS,GAAmB,CAACC,EAAcnxN,IAAW,CACjDgwE,GAAcpD,KAAW6sC,IACzB03G,EAAahsE,IAAgB,CAAClQ,EAAMvsF,EAAM9R,EAAQt8K,KAChDkxN,GAASn6F,GAAY/2H,EAAKC,UAAUstH,KAAKrhF,EAAM6kL,IAC/CrrF,EAAOq8F,UACP3zC,EAAK2zC,SAAS,IAEhB80H,EAAa/rE,IAAiB,CAAC/7I,EAAKq/C,EAAM9R,EAAQt8K,KAChDouL,EAAKysF,SAAS9rI,GACd0lE,GAAKz0M,EAAM6qR,GAAe,IAE5B51E,GAAMi2E,IAAkB,CAAC23C,EAAIj+F,IAAQl/F,EAAOknL,cAC5C33G,GAAMg2E,IAAgB,CAAC43C,EAAI34E,IAAOxkH,EAAO+mL,QAAQviE,EAAG7tP,UAoBhDy6V,GAAa,CAACC,EAAgBrxN,EAAQw/H,KAC1C,MAAM2xF,EAAe,CAACv7V,EAAW0hC,IAAMi4K,GAAM35M,GAAW,CAACsgB,EAAGsuO,KAC1D8sG,EAASp7U,GAAG,CAACwyK,EAAMy0I,KACjB7lS,EAAE+5T,IAAkB3oK,EAAM87D,EAAG7tP,MAAOuf,EAAE,GACtC,IAEEo7U,EAAW,CAACp7U,EAAGohB,KACnBoyT,GAAWpsH,SAASpnN,GAAGzc,MAAM2tC,MAAKmqT,IAChCj6T,EAAEi6T,EAAkB1I,eAAgB3yU,EAAE,GACtC,EAEJ,MAAO,IACFg7U,GAAiBC,EAAcnxN,GAClCmxN,EAAa7rE,IAAiB,CAACj8I,EAAKq/C,IAASA,EAAKf,SAASt+C,KAC3D8nN,EAAajsE,IAAiB,CAAC77I,EAAKq/C,EAAM/xL,KACxC+xL,EAAKpD,SAASj8C,EAAK,CAAEnrI,KAAMvH,EAAMuH,MAAO,IAE1CizV,EAAa9rE,IAAiB,CAACh8I,EAAKq/C,EAAM/xL,EAAOqlF,KAC/C,MAAM+wJ,EAAU,IAAM/wJ,EAAUmzH,YAAY3rM,cAAgBg0O,GAAOzK,QAAQ/wJ,QAAargF,EAClFssO,EAAatc,GAAWvgG,GAAMugG,EAAS,aAAel/F,GAAOk/F,EAAS,iBAAiBvjG,QAAOriF,GAAe,SAARA,IACrGyrT,EAAWngO,GAAYr1C,EAAUzhF,SACjC6tC,EAAUojL,GAASgmI,GACzB9oK,EAAK3M,SAAS1yC,EAAK,CACjBnrI,KAAMvH,EAAMuH,KACZhE,MAAOvD,EAAMuD,QAEfsxN,GAASgmI,GAAU3pO,KAAKklH,GAASphB,IAC3Bsc,EAAWtc,IAEJvjL,EAAQggF,QAAO96D,GAAOzsD,GAAS8qN,EAASr+J,IAAQ26K,EAAW36K,KADpEy/K,IAIAyyB,IAAU9/G,aAAa9hJ,QAAOq0K,IAASpxK,GAASoxK,EAAK13K,QAASoxN,KAAUvkL,KAAK2lM,EAC/E,GACA,IAEJokH,EAAa1rE,IAAoB,CAACp8I,EAAKq/C,EAAM/xL,KAC3C+xL,EAAK+oK,YAAYpoN,EAAK,CACpBqoN,WAAY/6V,EAAMuH,KAClByzV,WAAYh7V,EAAMo3V,SAClB,IAEJv9I,IAAcx0H,IACZ,MAAMqtD,EAAMgoN,IACZ5wH,GAAartH,SAASp3B,EAAWqtD,EAAIp1G,UAAU,IAElD,EAKGo1T,GAAmB,CAAC92R,EAAO4qH,KAC/B,MAAMy0K,EAAgBz0K,EAAMxkL,KAAI0jB,GAAKA,EAAEu1U,gBAAetpO,MAAM,IACtDupO,EAAe7yJ,EAAY4yJ,GAAe7yV,GAA2B,UAAjBA,EAAO2qB,QAC3DooU,EAAY,CAACn2R,EAAM8zG,IAAY8zG,GAAUlhD,OAAO,CACpD32G,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,sBAAuBgoD,MAEnCsoJ,WAAYllB,EAAMtvB,GAAS1wK,GAAUA,EAAOk5R,QAAQnrC,aAItD,MAAO,CAFcglG,EAAU,QAASD,EAAajoO,MAClCkoO,EAAU,MAAOD,EAAahoO,MAIhD,EAEGkoO,GAAe,CAACC,EAAU9D,EAAU7vF,KAgBjC,CACL3yI,IAAKqB,GAAS,0CACdk3F,WAAY,GACZpmE,WAAYm1D,GAAS,CAAC02I,GAAWh8T,OAAO,CACpC8xT,QAAS,GAAIhlD,MAAmB0zD,IAChCnpK,YAAaitK,EACbtoK,YArBc,CAACntC,EAAM3yI,KACzB,MAAMgoV,EAAgB7yJ,EAAMn1L,EAAK6lK,SAAS1wK,IACxC,MAAM4+P,EAAYhR,GAtBL,EAAC5tP,EAAQs/P,IAAc2vC,GAAmBjvS,EAAQA,EAAOsD,KAAMg8P,GAsBnD4zF,CAAWlzV,EAAQs/P,IAC5C,MAAO,CACLngQ,KAAMa,EAAOb,KACbwrB,MAAO3qB,EAAO2qB,MACduuQ,QAASt6B,EACV,IAGH,OAAOl2I,EAAS/iH,KAAK,CACnBwtV,aAFmBC,GA5BV,EAACttB,EAAc+sB,EAAeO,IAAelzJ,EAAO2yJ,GAAe7yV,GAAUA,EAAOb,OAASi0V,IAAYlyR,MAAK09L,GAAaA,EAAUs6B,QAAQxrK,OAAOo4M,KA4B5HhwM,CAAO0nB,EAAMq1M,EAAeO,GAG7DP,iBACA,EASEvI,0BAKF+I,GAAoB,CAACJ,EAAU9D,EAAU7vF,IAAcujF,GAAYhoV,MAAMugG,OAAO43P,GAAaC,EAAU9D,EAAU7vF,IAEjHqyC,GAAgB,CAACnzK,EAAQr/H,KAE7B,GADaq/H,EAAO4vD,UACXgiB,YAAY3rM,cAAe,CAClC,MAAMxE,EAAOgoO,GAAUJ,WAAWrpG,EAAO80N,kBAAkB/pO,MAAMiV,EAAO80N,kBACxE,OAAOjgE,GAAK5N,SAASxlR,EAAMd,GAAMyqH,SAAQ,KACvC,MACM2pO,EADS/0N,EAAOh/B,YACKt+B,MAAK3oC,GAAKoyT,GAAWpsH,SAAShmM,GAAG79B,QAC5D,OAAO64V,EAAYryR,MAAK3oC,GAAKA,EAAE46T,aAAah0V,IAAM,GAEtD,CACE,OAAOupH,EAASE,MAClB,EAMI4qO,GAAe,CAACh1N,EAAQi1N,EAAU1B,KACtC,MAAM2B,EAAWn7T,IACf,MAAMub,EAAO0qF,EAAO4vD,UAChBt6I,EAAKs8J,YAAY3rM,eACnB8zB,EAAEub,EACJ,EA4EI6/S,EAAc,CAClBz+T,QA3Ec,KACd,MAAM4e,EAAO0qF,EAAO4vD,UACdwlK,EAAY9/S,EAAKs8J,YAAY3rM,cAAgB+5H,EAAO80N,iBAAmBx/S,EAG7E,MAAO,IAFmB4tL,GAAapgL,SAASsyS,MACnB57T,GAAM+5T,GAAgB58N,GAAQA,EAAKz6H,QAI/D,EAoED69J,QAlEckxB,IACdiqK,GAASz3V,IACP,MAAM43V,EAAWF,EAAYz+T,UACvB4+T,EAAaxuJ,GAAUuuJ,EAAUpqK,GACjCsqK,EAzBW,EAACv1N,EAAQ3zH,KAC9B,MAAMipC,EAAO0qF,EAAO4vD,UACpB,OAAOu8J,GAAWpsH,SAASzqL,GAAMp5C,MAAMd,KAAIo6V,GAAenqO,GAASu/E,GAAM,OAAQ4qJ,EAAYjK,cAAel/U,MAAQ0+G,MAAM1+G,EAAK,EAuBnGopV,CAAez1N,EAAQs1N,GACzC7zV,EAAOu+H,EAAO80N,iBACpB5xH,GAAartH,SAASp0G,EAAM8zV,GAC5B1rT,GAAK0pT,GAAgB,CAACv6U,EAAGD,KACnBmpL,GAAMozJ,EAAYv8U,IACpBC,EAAE5c,IAAIk5V,EAAWv8U,GACnB,GACA,GACF,EAuDF0kK,WArDiB,CAAC98K,EAAMi/K,KACxBuzH,GAAcnzK,EAAQr/H,GAAMkpC,KAAK+1I,EAAQorD,GAAUjB,OAASiB,GAAUlB,QAAQ,EAqD9E5vF,MAnDYv5I,IACZwyS,GAAcnzK,EAAQr/H,GAAMkpC,KAAK4yM,GAASviG,MAAM,EAmDhDkgD,MAjDYz+L,IACZ,IAAKytH,EAASztH,GACZ,MAAM,IAAIqG,MAAM,0GAElBkzV,GAAS5/S,IACPo8J,GAASp8J,EAAM0yO,GAAgB,CAAErsR,WAAU,GAC3C,EA4CF+tT,QA1Cc,KACdwrC,GAAS5/S,IACPk8J,GAAKl8J,EAAM2yO,GAAiB,GAC5B,EAwCFsmE,QAtCc5tV,IACdu0V,GAASz3V,IACP,MAAMqS,EAAOkwH,EAAOp/B,UACFurP,GAAWpsH,SAASjwN,GACxB5T,MAAM2uH,QAAO33G,GAAKA,EAAE69U,gBAChCtnH,GAAUJ,WAAWv5N,GAAM+5B,MAAK6rT,IAC9B/H,GAAWY,QAAQmH,EAAY/0V,EAAK,GAExC,GACA,EA8BF+qV,OA5BanqU,IACb2zU,GAAS5/S,IACP,MAAMhoB,EAAK0yG,EAAO21N,QACZC,EAAaX,EAAS1zU,GACtBs0U,EAAoBvC,GAAesC,EAAWtK,eAAep5K,QAASqhL,GAC5Ej+S,EAAKs8J,YAAY0O,YAAY,CAAC,GAAIw8E,MAAmBxvQ,KAAQsoU,GAC7DtgT,EAAKs8J,YAAY0O,YAAY,CAAC,GAAIy8E,MAAkBzvQ,KAAQsoU,EAAWtK,gBACvEh2S,EAAKs8J,YAAY0O,YAAY,CAAC,GAAI08E,MAAiB1vQ,KAAQsoU,EAAWtK,gBACtEh2S,EAAKs8J,YAAY0O,YAAY,CAAC,GAAI28E,MAAmB3vQ,KAAQ,IACxDsoU,EAAWtK,eACdp5K,QAAS2jL,IAEXV,EAAYp7L,QAAQ67L,EAAWpuK,YAAY,GAC3C,EAgBF6C,MAdY,KACZ6qK,GAAS5/S,IACPk8J,GAAKl8J,EAAMsyO,GAAe,GAC1B,EAYFqrE,iBAAkBjzN,EAAOizN,kBAE3B,OAAOkC,CAAW,EAGdW,GAAe,CAACF,EAAYxtP,EAAO04J,KACvC,MAAM6vF,EAAWvxI,GAAW,UACtBksI,EAAiBsK,EAAWtK,eAC5BppF,EAAS6yD,GAAUu2B,EAAehrU,MAAOqwU,EAAU7vF,GACnDi1F,EAAa3tL,GAAKkjL,EAAexxV,MAEjCk8V,EAAoBlD,GAAmBiD,EAAW75V,OAAOuvH,UAMzD37G,EA7nBgB,EAACq7K,EAAMwlK,EAAU7vF,EAAWqyC,KAClD,MAAM8iD,EAAWvF,GAAWvlK,EAAMwlK,EAAUzmO,EAASE,OAAQ02I,GAAW,EAAOqyC,GAC/E,OAAOkxC,GAAYhoV,MAAMyT,KAAKmmV,EAAS,EA2nB1BC,CAAgB,CAC3BpmV,KAAMw7U,EAAex7U,KACrB03K,YAAa8jK,EAAe9jK,aAC3BmpK,EAAU7vF,GAVWngQ,GAAQwyS,GAAcgjD,EAAax1V,KAWrDk1V,EAAoBvC,GAAehI,EAAep5K,SAClDkkL,EAAa3C,GAAqBoC,GAClCj5P,EAAS+4B,GAAoC,IAA7BkgO,EAAkBhsV,OAAcgrV,GAAkB,CAAE3iL,QAAS2jL,GAAqBlF,EAAU7vF,IAC5G8wF,EAAeiC,IAAW,IAAMsB,GAAa5C,IAAe,IAAMxmK,GAAQ+0E,EAAUpsM,OAAOotM,UAAW15J,GAAQ04J,EAAUpsM,OAAOutM,SAC/H92E,EAAO,CACX79J,GAAIqjU,EACJzuF,SACApyP,OACA8sF,SACA0qL,aAAc0uE,EACdzuE,gBAAiB,CAAC4kE,GAAWh8T,OAAO,CAChC8xT,QAAS,GAAInlD,MAAmB6zD,IAChCxkK,YArBc,CAACntC,EAAM8xM,KACzBiF,EAAW35V,IAAI00V,EAASxF,eAAexxV,MACvCi5V,GAAsBjC,EAASxF,eAAexxV,KAAMklJ,GAC7C90B,EAAS/iH,KAAK2pV,IAmBjBtpK,YAAaouK,KAEjBjE,YAAa,CAAC,GAEV5lK,EAASsnK,GAAkBloK,EAAMymK,EAAc9wF,GAC/Cq1F,EAQG,CACLR,MAAOx0J,EAAWwvJ,GAClB/gK,QAASuR,EAAWpV,GACpBnrF,QAAS,IAAMyjP,GAAYzjP,QAAQmrF,GACnC/qF,UAAW,IAAMqjP,GAAYrjP,UAAU+qF,GACvC+oK,eAZc,KACd,MAAMuB,EAAYhS,GAAYzjP,QAAQmrF,GACtC,OAAO09C,GAAUJ,WAAWgtH,GAAWtrO,MAAMsrO,EAAU,EAWvDpD,iBATyB,KACzBA,GAAiBlnK,EAAQgqK,EAAW75V,MAAM,GAWxCi5V,EAAcH,GAAamB,EAAa/tP,EAAMsjP,OAAQ0K,GAC5D,MAAO,CACLrqK,SACAopK,cACD,EAGGmB,GAAqB,CAACV,EAAYxtP,EAAO04J,EAAW+vF,GAAY,EAAO0F,KAC3E,MAAM5F,EAAWvxI,GAAW,UACtBo3I,EAAgBp3I,GAAW,gBAC3Bq3I,EAAkBr3I,GAAW,kBAC7BksI,EAAiBsK,EAAWtK,eAE5ByK,EAAa3tL,GAAKkjL,EAAexxV,MACjCk5V,EAAkBF,GAAmBiD,EAAW75V,OAAOuvH,UAOvDirO,EAAYtnG,GAtdO,EAACjkE,EAAMwlK,EAAUoB,EAASvkF,IAAuBwY,GAAUlhD,OAAO,CAC3F32G,IAAKqB,GAAS,0CACdk3F,WAAY,CACVorI,GAAY3mK,EAAMwlK,EAAUzmO,EAAS/iH,KAAK4qV,GAAUvkF,GACpDwkF,KACAH,GAAYrkF,IAEd0Y,oBAAqBzwE,GAAS,CAACklI,GAASxqT,OAAO,CAC3C3F,KAAM,QACNutT,aAAc,UACdh3R,UAAWovH,GACF76C,GAAU66C,EAAQ,mBAAmB9kD,WAE9CmrN,MAAO,CACLK,cAAe,IAAM,GACrBhB,SAAU,iBACVC,QAAS,uBAscU6gB,CAAmB,CAC1Cr2U,MAAOgrU,EAAehrU,MACtB8xU,WAAW,GACVzB,EAAU6F,EAAe11F,EAAUpsM,OAAOotM,YACvC80F,EAAUxnG,GA9rBO,EAACjkE,EAAMwlK,EAAUC,EAAW9vF,EAAW+vF,EAAW19C,IAAkBu9C,GAAWvlK,EAAMwlK,EAAUzmO,EAAS/iH,KAAKypV,GAAY9vF,EAAW+vF,EAAW19C,GA8rB/I0jD,CAAiB,CACtC/mV,KAAMw7U,EAAex7U,KACrB03K,YAAa8jK,EAAe9jK,aAC3BmpK,EAAU8F,EAAiB31F,EAAW+vF,GAhBjBlwV,GAAQwyS,GAAcgjD,EAAax1V,MAiBrDm2V,EAAsBxD,GAAehI,EAAep5K,SACpDkkL,EAAa3C,GAAqBqD,GAClCC,EAAephO,GAAsC,IAA/BmhO,EAAoBjtV,OAAculP,GAtMrC,EAACqlG,EAAU9D,EAAU7vF,IAAc0zF,GAAaC,EAAU9D,EAAU7vF,GAsMxBk2F,CAAmB,CAAE9kL,QAAS4kL,GAAuBnG,EAAU7vF,KAC9H8wF,EAAeiC,IAAW,IAAMsB,GAAa,CACjD3rC,QAASpwT,IACP2wT,GAAS3vH,MAAMrO,GAAQ,CAAC0lI,EAAO6gC,KAC7B,MAAM/tC,EAAemyC,EAAUxnO,OAAO68D,GAAQ3wL,KAAI2wL,GAAUuX,GAAMvX,EAAO/uL,WACzE,OAAOosT,GAAYhwT,EAAMuC,QAAS22V,EAAIxxF,EAAUpsM,OAAOotM,UAAWyiD,EAAa,GAC/E,EAEJoF,UAAW,KACTI,GAASL,QAAQ39H,EAAO,EAE1B+yC,QAAS,IAAM12H,EAAMqqP,eACpB3xF,EAAUpsM,OAAOutM,SAEd5lI,EAAK0I,KAAW1I,GAChB0vD,EAAS68B,GAAQ,CACrBz6F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CACP,aANc,uBAQX48U,GAELpyV,WAAY,CACV49O,KAAM,YACHniH,EAAGjB,UAAY,CAAE,aAAckwN,EAAehrU,OAAU,CAAE,kBAAmBk2U,KAGpF10I,WAAY,CACV,CAAC5R,MAAY,CACXi8I,GAAWxrV,OACX6sN,GAAU7sN,QAEZ,CAACwvM,MAAc,CAAC,mBAChB,CAACU,MAAkB,CACjB,aACA,oBAGJvwD,WAAYm1D,GAAS,CACnBwkC,GAAO9pN,OAAO,CACZ3F,KAAM,SACN2mN,SAAUx4N,IACR64L,GAAK74L,EAAGivQ,IACD19J,EAAS/iH,MAAK,IAEvBwpO,aAActgH,IAASwsK,GAAaxsK,KAA2B,WAAjBmyE,GAAOnyE,IAAkD,aAA5ByyE,GAAMzyE,EAAM,aACvFigH,aAAc,IAEhB67G,GAAWh8T,OAAO,CAChB8xT,QAAS,GAAInlD,MAAmB6zD,IAChCxkK,YAnEc,CAACntC,EAAM8xM,KACzBiF,EAAW35V,IAAI00V,EAASxF,eAAexxV,MACvCi5V,GAAsBjC,EAASxF,eAAexxV,KAAMklJ,GACpDu3M,IACOrsO,EAAS/iH,KAAK2pV,IAgEjBtpK,YAAaouK,IAEfn5G,GAAStsN,OAAO,CAAC,GACjBA,GAAO,kBAAmByhU,EAAav2V,OAAO,CAC5C03M,GAAY1D,MAAW,CAACrwD,EAAM2iF,KAC5BsY,GAAOzK,QAAQxwF,EAAK,IAEtBgzD,GAAMf,MAAgB,CAACjyD,EAAMioG,KAC3BjoG,EAAK4yD,YAAY0O,YAAY,CAAC68E,IAA4B,CAAE7uE,SAAU24B,EAAG7tP,MAAMk1N,UAAW,OAG9Fy7F,GAAS55R,OAAO,CAAEy/J,QAAS,IAAM1lE,EAAS/iH,KAAK4kL,KAC/C8vD,GAAU1rN,OAAO,CAAC,GAClBmyM,GAAO,CAAC,KAEV5b,WAAY,CACVgwI,EAAUnnG,SACVqnG,EAAQrnG,YACLwnG,EAAa37V,KAAI67V,GAAaA,EAAU1nG,WAAU9jI,aAMnD0qO,EAAc,CAClBR,MAAOx0J,EAAWwvJ,GAClB/gK,QAASuR,EAAWpV,GACpB/qF,UAAW,IAAM+1P,EAAa37V,KAAI67V,GAAaA,EAAU/6V,IAAI6vL,KAC7DnrF,QAAS,IAAMg2P,EAAQ16V,IAAI6vL,GAC3B+oK,eAAgB,KACd,MAAMhlV,EAAO8mV,EAAQ16V,IAAI6vL,GACzB,OAAO09C,GAAUJ,WAAWv5N,GAAMi7G,MAAMj7G,EAAK,EAE/CmjV,iBAZyB,KACzBA,GAAiBlnK,EAAQgqK,EAAW75V,MAAM,GAatCi5V,EAAcH,GAAamB,EAAa/tP,EAAMsjP,OAAQ0K,GAC5D,MAAO,CACLrqK,SACAopK,cACD,EAGH,IAAI/vO,GAASsD,QAAQI,KAAKC,MAAM1vG,QAAQ,oBAExC,MAqCM69U,GAA4B,CAChC,gBACA,aACA,cACA,QACA,QACA,WAEIC,GAAqB9qV,GAAQ+8B,EAAS/8B,KAAgE,IAAvD6qV,GAA0B9/T,QAAQ/qB,EAAK+qV,WAyBtFC,GAAkB,CAAC/L,EAAgBljP,EAAOomC,EAAQsyH,KACtD,MAAM6vF,EAAWvxI,GAAW,UACtB8iD,EAAS6yD,GAAUu2B,EAAehrU,MAAOqwU,EAAU7vF,GACnDhxP,EAx2BiBq7K,KACvB,MAAM8qK,EAAW,CACf9nO,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,2BAEZswM,WAAY,CAAC,CACTv4F,IAAK,CACHhE,IAAK,MACL/zG,QAAS,CAAC,4BAEZswM,WAAY,CAAC+1E,GAAMvyK,EAASE,OAAQ,CAChC+D,IAAK,CACHhE,IAAK,SACLvpH,WAAY,CAAE40B,IAAK21J,EAAK33J,MAE1B8sH,WAAYm1D,GAAS,CACnBm6C,GAAYz/N,OAAO,CAAC,GACpBssN,GAAStsN,OAAO,CAAC,UAI3BmwH,WAAYm1D,GAAS,CAACwkC,GAAO9pN,OAAO,CAChC3F,KAAM,UACNmmN,aAAc5mH,EAAI8yK,SAGxB,OAAOwnD,GAAYhoV,MAAMyT,KAAKmmV,EAAS,EA60B1BqB,CAAiBhM,GACxB1uP,EAAS0uP,EAAep5K,QAAQxvG,MAAKwvG,GAClB,IAAnBA,EAAQroK,OACHqgH,EAASE,OAETF,EAAS/iH,KAAK0tV,GAAkB,CAAE3iL,WAAWy+K,EAAU7vF,MAG5D8wF,EAxec,EAACkC,EAAgBrxN,KACrC,MAAMmxN,EAAe,CAACv7V,EAAW0hC,IAAMi4K,GAAM35M,GAAW,CAACsgB,EAAGsuO,KAC1D8sG,EAASp7U,GAAG,CAACwyK,EAAMy0I,KACjB7lS,EAAE+5T,IAAkB3oK,EAAM87D,EAAG7tP,MAAOuf,EAAE,GACtC,IAEEo7U,EAAW,CAACp7U,EAAGohB,KACnBoyT,GAAWpsH,SAASpnN,GAAGzc,MAAM2tC,MAAK0tT,IAChCx9T,EAAEw9T,EAAe5+U,EAAE,GACnB,EAEJ,MAAO,IACFg7U,GAAiBC,EAAcnxN,GAClCmxN,EAAa9rE,IAAiB,CAACh8I,EAAKq/C,EAAM/xL,KACxC+xL,EAAK3M,SAAS1yC,EAAK,CAAEnrI,KAAMvH,EAAMuH,MAAO,IAE3C,EAwdoB62V,EAAc,IAAMrC,GAAa5C,IAAe,IAAMxmK,GAAQ+0E,EAAUpsM,OAAOotM,UAAW15J,IACzGxgD,EAAS,IACV0jS,EAAex8T,OAAOw7F,MAAK,KAAM,CAAG,KAAGx7F,IAAU,CAClD,OAAUA,EAAS,KACnB,aAAcA,EAAS,YAEtBw8T,EAAejiU,MAAMihG,MAAK,KAAM,CAAG,KAAGjhG,IAAS,CAChD,MAASA,EAAQ,KACjB,YAAaA,EAAQ,UAGnBjT,EAAUk1U,EAAejiU,MAAMqhG,UAAY4gO,EAAex8T,OAAO47F,SAAW,CAAC,wBAA0B,GACvG+sO,EAAY,IAAIryO,GAAOkmO,EAAe93T,IAAK,CAAEkkU,SAAU,IAAItyO,GAAO/nH,OAAOwoH,SAAS9vF,QAClF4hU,EAAe,GAAIF,EAAUG,cAAgBH,EAAUvwS,OAASuwS,EAAUI,KAAO,IAAMJ,EAAUI,KAAO,KACxGC,EAAyBtyJ,KAEzB+hF,EAAkB,CACtB4kE,GAAWh8T,OAAO,CAChB8xT,QAAS,GAAInlD,MAAmB6zD,IAChCxkK,YAJgB,CAACslI,EAAOq/B,IAAa5mO,EAAS/iH,KAAK2pV,GAKnDtpK,YAAa8jK,IAEfn7T,GAAO,WAAY,CACjB6iL,IAAc,KACZ,MAAM5iC,EAAS1tG,GAAK6sD,GAAaS,QAAQ3yH,QAAS,WAAWuE,IAC3D,GAAI61V,EAAUM,aAAa,IAAI3yO,GAAOxjH,EAAE4kB,IAAIo/F,SAAU,CACpD,MAAMv5G,EAAOzK,EAAE4kB,IAAIna,KACf8qV,GAAmB9qV,GA7Db,EAACmiI,EAAQ1C,EAAKz/H,KAClC,OAAQA,EAAK+qV,WACb,IAAK,gBACH5oN,EAAO8qB,cAAcjtJ,EAAKvM,SAC1B,MACF,IAAK,aACH0uI,EAAOwuB,WAAW3wJ,EAAKvM,SACvB,MACF,IAAK,cACH,MAAMi+K,IAAKz0D,EAAUj9G,EAAK0xK,KAAM1xK,EAAK0xK,GACrCvvC,EAAO+tC,YAAYlwK,EAAKiwK,IAAKyB,EAAI1xK,EAAK1P,OACtC,MACF,IAAK,QACHmvI,EAAIu+C,QACJ,MACF,IAAK,QACHv+C,EAAIsuD,MAAM/tL,EAAK1Q,SACf,MACF,IAAK,UACHmwI,EAAI49K,UAEN,EAyCYsuC,CAAcxpN,EAAQ2mN,EAAa9oV,GA/DzBA,KAAS8qV,GAAmB9qV,IAAS+8B,EAAS/8B,IAAS61L,GAAM71L,EAAM,aAgEpE4rV,CAAgB5rV,IACzBi/U,EAAe4M,UAAU/C,EAAa9oV,EAE1C,KAEFyrV,EAAuB17V,IAAIg0K,EAAO,IAEpC6iC,GAAc6kJ,EAAuBpsV,SAEvC8hN,GAAUr9L,OAAO,CACf48L,SAAU,CACR,CAACmwE,IAAyB,CACxB5vE,UAAW,CAACtuE,EAAM3yI,KAChBgpH,GAAW2pB,EAAKhiJ,QAAS,UAAU6sC,MAAKsuT,IACtC,MAAMC,EAAYD,EAAUhqO,IAAI6vK,cAC5Bx0K,EAAc4uO,IAChBA,EAAUC,YAAYhsV,EAAMsrV,EAC9B,GACA,OAeN5rK,EAASsnK,GATF,CACX/lU,GAAIqjU,EACJzuF,SACApyP,OACA8sF,SACA0qL,aAAclxQ,EACdmxQ,kBACAoqE,YAAa/pS,GAEwBgqS,EAAc9wF,GAC/Cq0F,EAhJgB7/S,KACtB,MAAM4/S,EAAWn7T,IACXub,EAAKs8J,YAAY3rM,eACnB8zB,EAAEub,EACJ,EAyBF,MAAO,CACL8kJ,MAxBYz+L,IACZ,IAAKytH,EAASztH,GACZ,MAAM,IAAIqG,MAAM,6GAElBkzV,GAAS5/S,IACPo8J,GAASp8J,EAAM0yO,GAAgB,CAAErsR,WAAU,GAC3C,EAmBF+tT,QAjBc,KACdwrC,GAAS5/S,IACPk8J,GAAKl8J,EAAM2yO,GAAiB,GAC5B,EAeF59F,MAbY,KACZ6qK,GAAS5/S,IACPk8J,GAAKl8J,EAAMsyO,GAAe,GAC1B,EAWF0wE,YATkBjsV,IAClB6oV,GAAS5/S,IACPA,EAAKs8J,YAAY0O,YAAY,CAAC48E,IAAyB7wR,EAAK,GAC5D,EAOH,EA8GmBksV,CAAgBxsK,GACpC,MAAO,CACLA,SACAopK,cACD,EA+FGqD,GAAe,CAACnsV,EAAMs7L,IAAct8E,GAASu/E,GAAM,OAAQjD,EAAWt7L,IACtEosV,GAAyBx7V,GAAUoZ,GAAQpZ,EAAQ,sBAAwBoZ,GAAQpZ,EAAQ,uBAC3Fy7V,GAA6B,CAAClqN,EAAQu/G,EAAiBo6E,IACvDp6E,GAAmBo6E,EACd,GAEA,CAACxpH,GAAQxuL,OAAO,CACnBuqL,WAAY,CACVE,YAAa,IAAM1wF,EAAS/iH,KAAK+9L,GAAM31E,GAAaS,QAAQwe,EAAOoyC,6BACnE02B,YAAa,yBACbD,aAAc,0BACdD,gBAAiB,8BAEnBxtI,MAAO,CAAC,OACRsxI,aAAcl8D,GACgBuvG,GAAsB//G,EAAQwQ,EAAKhiJ,SACpC5B,KAAI62I,IAEtB,CACLz5F,OAFqBm2M,GAAc18G,GAGnCqmE,aAAcpuF,EAAS/iH,KAAK,CAC1BsxM,iBAAkBxmE,EAAGj1I,QAAQmxH,IAAIqV,UACjCg1E,aAAchV,GAAWvxD,EAAGj1I,SAAS6xB,UAGxCq8F,YAAW,KAAM,CAClB1yE,OAAQ8qF,KACRg1E,aAAcpuF,EAASE,cAM7BmqD,GAAQ9xC,IACZ,MAAM+L,EAAS/L,EAAO+L,OAChBmqN,EAAoB5qG,GAAgBv/G,GACpCoqN,EAhIQ93F,KACd,MAAMD,EAAkBC,EAAUpsM,OAkClC,MAAO,CAAE9gC,KAjCI,CAACj4B,EAAS2I,KACrB,MAAMu0V,EAAc,KAClBxU,GAAYnsS,KAAK0gT,GACjBt0V,GAAU,EAENw0V,EAAiB1pG,GAAOqhD,GAAmB,CAC/CpuS,QAAS,MACT1B,KAAM,cACNokB,KAAM,KACNimK,SAAS,EACTmlH,WAAYjmL,EAAS/iH,KAAK,WAC1BglB,MAAO,MACPT,SAAS,EACTsyJ,KAAM9zD,EAASE,QACd,SAAU02I,IACPi4F,EAAY7H,KACZ8H,EAAY/H,GAAO4H,EAAah4F,EAAgBiB,WAChD82F,EAAchwI,GAAQ2oI,GAAe,CACzChpG,SAAU,IAAMsY,EAAgBoB,UAChCC,OAAQ8uF,GAAa+H,EAAWC,GAChClpV,KAAMqhV,GAAax1V,EAASklQ,EAAgBiB,WAC5CllK,OAAQstB,EAAS/iH,KAAKiqV,GAAQC,GAAa,GAAI,CAACyH,EAAevpG,aAC/Dpe,SAAU0nH,EACVvxE,aAAc,CAAC,oBACfC,gBAAiB,GACjBoqE,YAAa,CAAC,EACdC,aAAc,CAAC5/I,GAAM61E,GAAiBgxE,IACtC/2I,WAAY,CAAC,KAEfuiI,GAAYtsS,KAAK6gT,GACjB,MAAMK,EAAoBH,EAAe58V,IAAI08V,GAC7Cn8G,GAASviG,MAAM++M,EAAkB,EAEpB,EA6FK9qK,CAAQ1rD,EAAO69M,WAAWv0J,QACxCmtK,EA3FQp4F,KACd,MAAMD,EAAkBC,EAAUpsM,OAkDlC,MAAO,CAAE9gC,KAjDI,CAACj4B,EAAS2I,KACrB,MAAMu0V,EAAcj5K,IAClBykK,GAAYnsS,KAAKghT,GACjB50V,EAASs7K,EAAM,EAEXu5K,EAAe/pG,GAAOqhD,GAAmB,CAC7CpuS,QAAS,MACT1B,KAAM,MACNokB,KAAM,MACNimK,SAAS,EACTmlH,WAAYjmL,EAAS/iH,KAAK,WAC1BglB,MAAO,MACPT,SAAS,EACTsyJ,KAAM9zD,EAASE,QACd,SAAU02I,IACPs4F,EAAW3oD,GAAmB,CAClCpuS,QAAS,MACT1B,KAAM,KACNokB,KAAM,KACNimK,SAAS,EACTmlH,WAAYjmL,EAAS/iH,KAAK,aAC1BglB,MAAO,MACPT,SAAS,EACTsyJ,KAAM9zD,EAASE,QACd,SAAU02I,GACPi4F,EAAY7H,KACZ8H,EAAY/H,IAAO,IAAM4H,GAAY,IAAQh4F,EAAgBiB,WAC7Do3F,EAAgBtwI,GAAQ2oI,GAAe,CAC3ChpG,SAAU,IAAMsY,EAAgBoB,UAChCC,OAAQ8uF,GAAa+H,EAAWC,GAChClpV,KAAMqhV,GAAax1V,EAASklQ,EAAgBiB,WAC5CllK,OAAQstB,EAAS/iH,KAAKiqV,GAAQC,GAAa,GAAI,CAC7C+H,EACAD,EAAa5pG,aAEfpe,SAAU,IAAM0nH,GAAY,GAC5BvxE,aAAc,CAAC,sBACfC,gBAAiB,GACjBoqE,YAAa,CAAC,EACdC,aAAc,CACZ5/I,GAAM61E,IAAiB,IAAMgxE,GAAY,KACzC7mJ,GAAM+1E,IAAiB,IAAM8wE,GAAY,MAE3C/2I,WAAY,CAAC,KAEfuiI,GAAYtsS,KAAKmhT,GACjB,MAAMG,EAAkBF,EAAaj9V,IAAIg9V,GACzCz8G,GAASviG,MAAMm/M,EAAgB,EAElB,EAwCO3rK,CAAQjrD,EAAO69M,WAAWv0J,QAc1CutK,EAAqB,CAACnpU,EAAQsiU,IAW3BjH,GAAcC,SAVL7+L,IACd,MAAMm/B,EAASsrK,GAAgBzqM,EAAU,CACvC6lM,YAAa,KACXpO,GAAYnsS,KAAK6zI,EAAOA,QACxB0mK,EAAY1mK,EAAOopK,YAAY,GAEhC3mN,EAAQ/L,EAAO69M,WAAWv0J,QAE7B,OADAs4J,GAAYtsS,KAAKg0I,EAAOA,QACjBA,EAAOopK,WAAW,GAEWhlU,GAElCopU,EAAkB,CAACppU,EAAQsiU,IAmBxBjH,GAAc53T,MAlBL,CAACg5H,EAAU4sM,EAAqBjO,KAC9C,MAAM/jK,EAAcgyK,EAMdztK,EAAS+pK,GALI,CACjBvK,gBACA/jK,cACA8jK,eAAgB1+L,GAEsB,CACtC8+L,OAAQF,GAAcE,OACtB+G,YAAa,KACXpO,GAAYnsS,KAAK6zI,EAAOA,QACxB0mK,EAAY1mK,EAAOopK,YAAY,GAEhC1yN,EAAO69M,WAAWv0J,QAGrB,OAFAs4J,GAAYtsS,KAAKg0I,EAAOA,QACxBA,EAAOopK,YAAYp7L,QAAQytB,GACpBuE,EAAOopK,WAAW,GAEQhlU,GAE/BspU,EAAmB,CAACC,EAAUhyL,EAAQ+qL,EAAakH,IAwDhDnO,GAAc53T,MAvDL,CAACg5H,EAAU4sM,EAAqBjO,KAC9C,MAAM/jK,EAAcgxK,GAAagB,EAAqBjO,GAChD/vC,EAAe/1G,KACf0iI,EAAuB1lM,EAAO69M,WAAWtvF,MAAMt8L,OAAOwtM,OAAOC,oBAM7Do0F,EAAiB,IAAM/6C,EAAaliK,IAAGyyC,IAC3Cs8D,GAAWr5B,WAAWjjC,GACjB4sK,GAAsBxwB,GACzBxpH,GAAQv6M,QAAQ2nL,EAClB,IAEIy2I,EAAW8zB,GAXE,CACjB/K,gBACA/jK,cACA8jK,eAAgB1+L,GAQ8B,CAC9C8+L,OAAQF,GAAcE,OACtB+G,YAAa,KACXj3C,EAAaliK,GAAG+uG,GAAWnwM,MAC3Bs2F,EAAO6lC,IAAI,eAAgBkiL,GAC3B/6C,EAAa9vS,QACb+mV,EAAYjwB,EAAS2yB,YAAY,GAElC1yN,EAAO69M,WAAWtvF,MAAO2oG,EAAa9I,UAAW0F,GAC9CqD,EAAmBhxI,GAAQy/B,GAAWvjB,OAAO,CACjDyjB,SAAU9lH,EAAO69M,WAAWtvF,MAAMt8L,OAAOutM,QACzC9zI,IAAK,CACHhE,IAAK,MACL/zG,QAAS,IAEXkzO,0BAA2BqwG,EAAaE,WAAa,CAAEzgW,MAAO,mBAAsB,CAAC,KAClF+uU,EAAuB,CAAC,EAAI,CAAE5+E,2BAA4B,CAAC,GAC9DJ,iBAAkB1zC,GAAS,CACzBtlL,GAAO,+BAAgC,CAAC6hL,GAAMjB,MAAoB,CAAC0gH,EAAO9vF,KACtEnwB,GAAKgxH,EAASz2I,OAAQ87F,GAAgB,SAEvC6wE,GAA2BlqN,EAAQmqN,EAAmBxwB,KAE3DvnG,YAAa,CAAC6wF,EAAOx0T,IAAWw7V,GAAuBx7V,MAEzDu+S,EAAap/S,IAAIw9V,GAajB,OAPAvxG,GAAWC,iBAAiBsxG,EAAkBxwI,GAAQo5G,EAASz2I,QAAS,CAAErkB,WAL5C,KAC5B,MAAMr3C,EAAOme,EAAO2sC,OAASrrK,KAASy/G,GAAaS,QAAQwe,EAAOmyC,gBAC5DnoI,EAAS0sJ,GAAM70E,GACrB,OAAOnG,EAAS/iH,KAAKqxC,EAAO,IAGzBmgT,GAAsBxwB,IACzBxpH,GAAQv6M,QAAQw1V,GAChBprN,EAAO8K,GAAG,eAAgBi9M,IAE5B/zB,EAAS2yB,YAAYp7L,QAAQytB,GAC7ByyD,GAAOzK,QAAQgzF,EAASz2I,QACjBy2I,EAAS2yB,WAAW,GAEMuE,GAE/BI,EAAyB,CAACJ,EAAUhyL,EAAQ+qL,EAAakH,IAoFtDnO,GAAc53T,MAnFL,CAACg5H,EAAU4sM,EAAqBjO,KAC9C,MAAM/jK,EAAcgxK,GAAagB,EAAqBjO,GAChD/vC,EAAe/1G,KACf0iI,EAAuB1lM,EAAO69M,WAAWtvF,MAAMt8L,OAAOwtM,OAAOC,oBAM7Do0F,EAAiB,IAAM/6C,EAAaliK,IAAGyyC,IAC3Cs8D,GAAWr5B,WAAWjjC,GACtB4yB,GAAQv6M,QAAQ2nL,EAAO,IAEnBy2I,EAAW8zB,GATE,CACjB/K,gBACA/jK,cACA8jK,eAAgB1+L,GAM8B,CAC9C8+L,OAAQF,GAAcE,OACtB+G,YAAa,KACXj3C,EAAaliK,GAAG+uG,GAAWnwM,MAC3Bs2F,EAAO6lC,IAAI,0CAA2CkiL,GACtD/6C,EAAa9vS,QACb+mV,EAAYjwB,EAAS2yB,YAAY,GAElC1yN,EAAO69M,WAAWtvF,MAAO2oG,EAAa9I,UAAW0F,GAC9CqD,EAAmBhxI,GAAQy/B,GAAWvjB,OAAO,CACjDyjB,SAAU9lH,EAAO69M,WAAWtvF,MAAMt8L,OAAOutM,QACzC9zI,IAAK,CACHhE,IAAK,MACL/zG,QAAS,IAEXkzO,0BAA2BqwG,EAAaE,WAAa,CAAEzgW,MAAO,mBAAsB,CAAC,KAClF+uU,EAAuB,CAAC,EAAI,CAAE5+E,2BAA4B,CAAC,GAC9DJ,iBAAkB1zC,GAAS,CACzBtlL,GAAO,+BAAgC,CAAC6hL,GAAMjB,MAAoB,CAAC0gH,EAAO9vF,KACtEnwB,GAAKgxH,EAASz2I,OAAQ87F,GAAgB,MAE1ClpE,GAAQxuL,OAAO,CACbuqL,WAAY,CACVE,YAAa,IAAM1wF,EAAS/iH,KAAK+9L,GAAM31E,GAAaS,QAAQwe,EAAOoyC,6BACnE02B,YAAa,yBACbD,aAAc,0BACdD,gBAAiB,8BAEnBxtI,MAAO,CACL,MACA,UAEFsxI,aAAcl8D,GACgBuvG,GAAsB//G,EAAQwQ,EAAKhiJ,SACpC5B,KAAI62I,IAEtB,CACLz5F,OAFqBm2M,GAAc18G,GAGnCqmE,aAAcpuF,EAAS/iH,KAAK,CAC1BsxM,iBAAkBxmE,EAAGj1I,QAAQmxH,IAAIqV,UACjCg1E,aAAchV,GAAWvxD,EAAGj1I,SAAS6xB,UAGxCq8F,YAAW,KAAM,CAClB1yE,OAAQ8qF,KACRg1E,aAAcpuF,EAASE,eAK/Bw2G,YAAa,CAAC6wF,EAAOx0T,IAAWw7V,GAAuBx7V,MAEzDu+S,EAAap/S,IAAIw9V,GAgBjB,OALAvxG,GAAWC,iBAAiBsxG,EAAkBxwI,GAAQo5G,EAASz2I,QAAS,CAAErkB,WAV5C,IACrBjlC,EAAO69M,WAAWtvF,MAAMt8L,OAAOutM,UAAU9/G,aAAaz/E,MAAK5jD,IAChE,MAEMolL,EAFsBqqD,GAAsB//G,EAAQ1vH,EAAE9hB,SAEvB5B,KAAI62I,GAAM08G,GAAc18G,KAAKlnB,MAAMuY,MAClEy2N,EAAuB70J,GAAM31E,GAAaS,QAAQwe,EAAOoyC,4BACzD6jI,EAAoBp/G,GAAU00J,EAAsB71J,GAC1D,OAAOh6E,EAAS/iH,KAAKqxC,GAAOisQ,EAAkBlgS,EAAGkgS,EAAkBtgS,EAAGsgS,EAAkBp7R,MAAOo7R,EAAkB31R,OAJlG,IAImH,MAItI6vL,GAAQv6M,QAAQw1V,GAChBprN,EAAO8K,GAAG,uDAAwDi9M,GAClE/zB,EAAS2yB,YAAYp7L,QAAQytB,GAC7ByyD,GAAOzK,QAAQgzF,EAASz2I,QACjBy2I,EAAS2yB,WAAW,GAEMuE,GAWrC,MAAO,CACL9lU,KAzMW,CAACzD,EAAQ3vB,EAAQiyV,KAC5B,IAAKlpO,EAAY/oH,GAAS,CACxB,GAAsB,YAAlBA,EAAO26K,OACT,OAAOs+K,EAAiBtpU,EAAQsyG,EAAO69M,WAAWtvF,MAAMt8L,OAAOk0H,QAAQ4yH,eAAgBi3C,EAAajyV,GAC/F,GAAsB,WAAlBA,EAAO26K,OAChB,OAAO2+K,EAAuB3pU,EAAQsyG,EAAO69M,WAAWtvF,MAAMt8L,OAAOk0H,QAAQ6yH,qBAAsBg3C,EAAajyV,GAC3G,GAAsB,WAAlBA,EAAO26K,OAChB,OAAOs+K,EAAiBtpU,EAAQsyG,EAAO69M,WAAWtvF,MAAMt8L,OAAOk0H,QAAQ5uF,SAAUy4P,EAAajyV,EAElG,CACA,OAAO+4V,EAAgBppU,EAAQsiU,EAAY,EAgM3ChH,QA9Lc,CAACt7T,EAAQsiU,IAAgB6G,EAAmBnpU,EAAQsiU,GA+LlE96E,MATY,CAACh8Q,EAAS2I,KACtBs0V,EAAYhlU,KAAKj4B,EAAS2I,EAAS,EASnC+lL,MAPY8qK,IACZA,EAAY9qK,OAAO,EAOnB7B,QAdc,CAAC7sL,EAAS2I,KACxB40V,EAActlU,KAAKj4B,EAAS2I,EAAS,EActC,EAGG01V,GAAkBxrN,IACtBw7G,GAAWx7G,GAl1kBMA,KACjB,MAAMutC,EAAiBvtC,EAAO7uI,QAAQ4Z,SAChC0gV,EAAiBt9V,GACjB4kL,EAAU5kL,EAAOysH,GACZ,CACLzsH,MAAOs4Q,GAAUt4Q,GACjB6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,gCAITu+V,EAAqBv9V,GACrBulB,EAASvlB,IAAUA,EAAQ,EACtB,CACLA,QACA6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,8BAIfogL,EAAe,YAAa,CAC1Bl2K,UAAWo0V,EACXp/U,QAAS,CACP,UACA,cACA,UACA,eACA,UACA,YACA,UACA,eACA,UACA,aACA,UACA,QACA,UACA,SACA,UACA,MACA,UACA,SACA,UACA,OACA,UACA,iBACA,UACA,SACA,UACA,WACA,UACA,cACA,UACA,YACA,UACA,aACA,UACA,cACA,UACA,OACA,UACA,YACA,UACA,YACA,UACA,QACA,UACA,WAGJkhK,EAAe,uBAAwB,CAAEl2K,UAAWo0V,IACpDl+K,EAAe,uBAAwB,CAAEl2K,UAAWo0V,IACpDl+K,EAAe,aAAc,CAC3Bl2K,UAAWq0V,EACXr/U,QAASy6P,GAAS9mI,KAEpButC,EAAe,wBAAyB,CACtCl2K,UAAWq0V,EACXr/U,QAAS06P,GAAY/mI,EAAQumI,MAE/Bh5F,EAAe,wBAAyB,CACtCl2K,UAAWq0V,EACXr/U,QAAS06P,GAAY/mI,EAAQwmI,MAE/Bj5F,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,2BAA4B,CACzCl2K,UAAW,SACXgV,QAASu6P,KAEXr5F,EAAe,2BAA4B,CACzCl2K,UAAW,SACXgV,QAASu6P,IACT,EA6ukBF+kF,CAAW3rN,GAhwIIA,KACf,MAAMutC,EAAiBvtC,EAAO7uI,QAAQ4Z,SACtCwiK,EAAe,4BAA6B,CAC1Cl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,+BAAgC,CAC7Cl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,cAAe,CAC5Bl2K,UAAWlJ,IACK,IAAVA,EACK,CACLA,MAAO,GACP6qC,OAAO,GAEA4hF,EAASzsH,IAAU4kL,EAAU5kL,EAAOysH,GACtC,CACLzsH,MAAOu0U,GAAgBv0U,GACvB6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,8BAIfkf,QAAS,6EACT,EAmuIFtB,CAASi1H,EAAO,EAGhBk3D,GAAS1sM,IAAI,UAAUw1I,IACrBwrN,GAAgBxrN,GAChB,IAAI4rN,EAAkB,IAAM92N,KAC5B,MAAM,QACJigN,EAAO,OACPF,EACAG,SAAU6W,GACRhb,GAAQ7wM,EAAQ,CAAEq1M,mBAAoB,IAAMuW,MAWhDt5E,GAAuBtyI,EAAQ60M,EAAOviF,UAAUpsM,QAChD,MAAM4lS,EAAY/lL,GAAM,CACtB/lC,SACA8xM,WAAY,CACVtvF,MAAOqyF,EAAOviF,UACd/0E,OAAQw3J,EAAQziF,aAGdF,EAAqBn7D,KAE3B,MAAO,CACL+9I,SArBe,KACf,MAAM+W,EAAeF,IAOrB,OAN4B9rG,GAAsB//G,EAAQ60M,EAAOC,gBAAgBtmV,SAC7D6sC,MAAKooG,IACvBmoN,EAAkB,IACTzrG,GAAc18G,EACtB,IAEIsoN,CAAY,EAcnBC,qBAAsBr5J,EAAWm5J,GACjCG,2BAJiC,IAAM/5F,GAAwBlyH,EAAQ,CAAEsyH,UAAWuiF,EAAOviF,WAAauiF,EAAOC,gBAAiB1iF,GAKjI,GAMR,CAn19BD,sBCAA,WACI,aAEA,IAAI85F,EAAW,SAAUn2U,GACvB,GAAU,OAANA,EACF,MAAO,OAET,QAAUnmB,IAANmmB,EACF,MAAO,YAET,IAAI4jB,SAAW5jB,EACf,MAAU,WAAN4jB,IAAmBpuC,MAAMwE,UAAUk+E,cAAcl4D,IAAMA,EAAEpsB,aAAsC,UAAvBosB,EAAEpsB,YAAYwI,MACjF,QAEC,WAANwnC,IAAmBjsB,OAAO3d,UAAUk+E,cAAcl4D,IAAMA,EAAEpsB,aAAsC,WAAvBosB,EAAEpsB,YAAYwI,MAClF,SAEFwnC,CACT,EAuBIghF,EAAO,SAAUpvF,GACnB,MAAO,CAAEG,GAAIH,EACf,EAII4gU,EAHWxxO,GAAK,SAAU5kG,EAAGJ,GAC/B,OAAOI,IAAMJ,CACf,IAEIy2U,EAAU,SAAUC,GACtB,OAAO1xO,GAAK,SAAU5kG,EAAGJ,GACvB,GAAII,EAAE1a,SAAWsa,EAAEta,OACjB,OAAO,EAGT,IADA,IAAIw9B,EAAM9iB,EAAE1a,OACHyV,EAAI,EAAGA,EAAI+nB,EAAK/nB,IACvB,IAAKu7U,EAAI3gU,GAAG3V,EAAEjF,GAAI6E,EAAE7E,IAClB,OAAO,EAGX,OAAO,CACT,GACF,EACIw7U,EAAgB,SAAUD,EAAKE,GACjC,OA3Bc,SAAUF,EAAK9gU,GAC7B,OAAOovF,GAAK,SAAU5kG,EAAGJ,GACvB,OAAO02U,EAAI3gU,GAAGH,EAAExV,GAAIwV,EAAE5V,GACxB,GACF,CAuBS62U,CAAUJ,EAAQC,IAAM,SAAU/uO,GACvC,OAjCS,SAAUA,EAAIivO,GAEzB,OADYhhW,MAAMwE,UAAUR,MAAMrE,KAAKoyH,GAC1B7xH,KAAK8gW,EACpB,CA8BWp7N,CAAO7T,EAAIivO,EACpB,GACF,EACIE,EAAW,SAAUJ,GACvB,OAAO1xO,GAAK,SAAU5kG,EAAGJ,GACvB,IAAI+2U,EAAK3hW,OAAO+C,KAAKioB,GACjB42U,EAAK5hW,OAAO+C,KAAK6nB,GACrB,IAAK22U,EAAcH,GAAUzgU,GAAGghU,EAAIC,GAClC,OAAO,EAGT,IADA,IAAI9zT,EAAM6zT,EAAGrxV,OACJyV,EAAI,EAAGA,EAAI+nB,EAAK/nB,IAAK,CAC5B,IAAI+6F,EAAI6gP,EAAG57U,GACX,IAAKu7U,EAAI3gU,GAAG3V,EAAE81F,GAAIl2F,EAAEk2F,IAClB,OAAO,CAEX,CACA,OAAO,CACT,GACF,EACI+gP,EAAQjyO,GAAK,SAAU5kG,EAAGJ,GAC5B,GAAII,IAAMJ,EACR,OAAO,EAET,IAAIk3U,EAAKX,EAASn2U,GAElB,OAAI82U,IADKX,EAASv2U,KAtEE,SAAUI,GAC9B,OAQkB,IARX,CACL,YACA,UACA,SACA,SACA,WACA,MACA,QACA6S,QAAQ7S,EACZ,CAgEM+2U,CAAgBD,GACX92U,IAAMJ,EACG,UAAPk3U,EACFT,EAAQQ,GAAOlhU,GAAG3V,EAAGJ,GACZ,WAAPk3U,GACFJ,EAASG,GAAOlhU,GAAG3V,EAAGJ,GAGjC,IAEA,MAAM48K,EAAmBxnM,OAAOyU,eAC1BgzL,EAAW,CAAChoL,EAAG7gB,EAAag7G,KAChC,IAAIhmG,EACJ,QAAIgmG,EAAUn6F,EAAG7gB,EAAYoG,aAGM,QAAxB4O,EAAK6L,EAAE7gB,mBAAgC,IAAPgV,OAAgB,EAASA,EAAGxM,QAAUxI,EAAYwI,IAC7F,EAcIqoH,EAAWlkH,GAAQnI,GAZV4nB,KACb,MAAM4jB,SAAW5jB,EACjB,OAAU,OAANA,EACK,OACQ,WAAN4jB,GAAkBpuC,MAAM4T,QAAQ4W,GAClC,QACQ,WAAN4jB,GAAkB64J,EAASz8K,EAAGrI,QAAQ,CAAC+uB,EAAGlE,IAAUA,EAAM01C,cAAcxxC,KAC1E,SAEA9C,CACT,EAEgC8gF,CAAOtsH,KAAWmI,EAC9CokH,EAAepkH,GAAQnI,UAAgBA,IAAUmI,EACjD8rH,EAAOzoF,GAAK5mC,GAAK4mC,IAAM5mC,EACvBg6V,EAAO,CAAC5+V,EAAOxE,IAAgBixC,EAASzsC,IAAUqkM,EAASrkM,EAAOxE,GAAa,CAAC8yC,EAAGlE,IAAUg6J,EAAiB91J,KAAOlE,IACrHqiF,EAAWJ,EAAS,UACpB5/E,EAAW4/E,EAAS,UACpB9qG,EAAgBvhB,GAAS4+V,EAAK5+V,EAAOpD,QACrCiiW,EAAYxyO,EAAS,SACrBK,EAASuH,EAAK,MACdtH,EAAYJ,EAAa,WACzBK,EAAcqH,OAAKxyH,GACnBqrH,EAAaloH,GAAW,OAANA,QAAoBnD,IAANmD,EAChCioH,EAAgBjoH,IAAMkoH,EAAWloH,GACjCyc,EAAakrG,EAAa,YAC1BhnG,EAAWgnG,EAAa,UACxBq4D,EAAY,CAAC5kL,EAAOsvH,KACxB,GAAIuvO,EAAU7+V,GAAQ,CACpB,IAAK,IAAI2iB,EAAI,EAAG+nB,EAAM1qC,EAAMkN,OAAQyV,EAAI+nB,IAAO/nB,EAC7C,IAAK2sG,EAAKtvH,EAAM2iB,IACd,OAAO,EAGX,OAAO,CACT,CACA,OAAO,CAAK,EAGR2pB,EAAO,OAEPi4J,EAAU,CAACj8I,EAAIC,IACZ,IAAI1zC,IACFyzC,EAAGC,EAAG5sB,MAAM,KAAM9mB,IAGvBiqV,EAAW,CAACrnO,EAAKC,IAAQ9yH,GAAK6yH,EAAIC,EAAI9yH,IACtCia,EAAW7e,GACR,IACEA,EAGL+sH,EAAWnlG,GACRA,EAEHolG,EAAe,CAACpoH,EAAG2R,IAChB3R,IAAM2R,EAEf,SAAS02G,EAAMxoG,KAAOyoG,GACpB,MAAO,IAAIC,KACT,MAAMz3D,EAAMw3D,EAAYxuH,OAAOyuH,GAC/B,OAAO1oG,EAAGkX,MAAM,KAAM+5B,EAAI,CAE9B,CACA,MAAM03D,EAAMhwF,GAAKoO,IAAMpO,EAAEoO,GACnBi5J,EAAM9+C,GACH,KACL,MAAM,IAAItgJ,MAAMsgJ,EAAI,EAGlB++C,EAAUtnK,GACPA,IAEHrgC,EAAOqgC,IACXA,GAAG,EAECiwF,EAAQxuG,GAAS,GACjByuG,EAASzuG,GAAS,GAExB,MAAM0uG,EACJ,WAAA/xH,CAAYgyH,EAAKxtH,GACfpE,KAAK4xH,IAAMA,EACX5xH,KAAKoE,MAAQA,CACf,CACA,WAAOwK,CAAKxK,GACV,OAAO,IAAIutH,GAAS,EAAMvtH,EAC5B,CACA,WAAOytH,GACL,OAAOF,EAASG,aAClB,CACA,IAAAC,CAAKC,EAAQC,GACX,OAAIjyH,KAAK4xH,IACAK,EAAOjyH,KAAKoE,OAEZ4tH,GAEX,CACA,MAAAE,GACE,OAAOlyH,KAAK4xH,GACd,CACA,MAAAO,GACE,OAAQnyH,KAAK4xH,GACf,CACA,GAAA/uH,CAAIuvH,GACF,OAAIpyH,KAAK4xH,IACAD,EAAS/iH,KAAKwjH,EAAOpyH,KAAKoE,QAE1ButH,EAASE,MAEpB,CACA,IAAA1nD,CAAKkoD,GACH,OAAIryH,KAAK4xH,IACAS,EAAOryH,KAAKoE,OAEZutH,EAASE,MAEpB,CACA,MAAAS,CAAO1X,GACL,OAAO56G,KAAK4xH,KAAOhX,EAAU56G,KAAKoE,MACpC,CACA,MAAAmuH,CAAO3X,GACL,OAAQ56G,KAAK4xH,KAAOhX,EAAU56G,KAAKoE,MACrC,CACA,MAAA0D,CAAO8yG,GACL,OAAK56G,KAAK4xH,KAAOhX,EAAU56G,KAAKoE,OACvBpE,KAEA2xH,EAASE,MAEpB,CACA,KAAAW,CAAMC,GACJ,OAAOzyH,KAAK4xH,IAAM5xH,KAAKoE,MAAQquH,CACjC,CACA,EAAAC,CAAGD,GACD,OAAOzyH,KAAK4xH,IAAM5xH,KAAOyyH,CAC3B,CACA,UAAAE,CAAWC,GACT,OAAO5yH,KAAK4xH,IAAM5xH,KAAKoE,MAAQwuH,GACjC,CACA,OAAAC,CAAQD,GACN,OAAO5yH,KAAK4xH,IAAM5xH,KAAO4yH,GAC3B,CACA,QAAAE,CAAS1vH,GACP,GAAKpD,KAAK4xH,IAGR,OAAO5xH,KAAKoE,MAFZ,MAAM,IAAIqF,MAAkB,OAAZrG,QAAgC,IAAZA,EAAqBA,EAAU,0BAIvE,CACA,WAAO3B,CAAK2C,GACV,OAAO6sH,EAAc7sH,GAASutH,EAAS/iH,KAAKxK,GAASutH,EAASE,MAChE,CACA,SAAAkB,GACE,OAAO/yH,KAAK4xH,IAAM5xH,KAAKoE,MAAQ,IACjC,CACA,cAAA4uH,GACE,OAAOhzH,KAAKoE,KACd,CACA,IAAAktC,CAAK2hF,GACCjzH,KAAK4xH,KACPqB,EAAOjzH,KAAKoE,MAEhB,CACA,OAAA8uH,GACE,OAAOlzH,KAAK4xH,IAAM,CAAC5xH,KAAKoE,OAAS,EACnC,CACA,QAAAoD,GACE,OAAOxH,KAAK4xH,IAAM,QAAS5xH,KAAKoE,SAAY,QAC9C,EAEFutH,EAASG,cAAgB,IAAIH,GAAS,GAEtC,MAAMwB,EAAc3xH,MAAMwE,UAAUR,MAC9B4tH,EAAgB5xH,MAAMwE,UAAU64B,QAChCw0F,EAAa7xH,MAAMwE,UAAU/B,KAC7BuvH,EAAa,CAACC,EAAI7jF,IAAMwjF,EAAcjyH,KAAKsyH,EAAI7jF,GAK/C0jF,EAAa,CAACC,EAAIvnG,IAAMwnG,EAAWD,EAAIvnG,IAAM,EAC7CsmG,EAAS,CAACiB,EAAIG,KAClB,IAAK,IAAI3sG,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAE7C,GAAI2sG,EADMH,EAAGxsG,GACDA,GACV,OAAO,CAEX,CACA,OAAO,CAAK,EAERo8U,EAAQ,CAAC5vO,EAAI/xF,KACjB,MAAMsN,EAAMykF,EAAGjiH,OACTkd,EAAI,IAAIhtB,MAAMstC,GACpB,IAAK,IAAI/nB,EAAI,EAAGA,EAAI+nB,EAAK/nB,IAAK,CAC5B,MAAMiF,EAAIunG,EAAGxsG,GACbyH,EAAEzH,GAAKya,EAAExV,EAAGjF,EACd,CACA,OAAOyH,CAAC,EAEJ40U,EAAS,CAAC7vO,EAAI/xF,KAClB,IAAK,IAAIza,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAE7Cya,EADU+xF,EAAGxsG,GACRA,EACP,GAEImtG,EAAQ,CAACX,EAAI/xF,KACjB,IAAK,IAAIza,EAAIwsG,EAAGjiH,OAAS,EAAGyV,GAAK,EAAGA,IAAK,CAEvCya,EADU+xF,EAAGxsG,GACRA,EACP,GAEIs8U,EAAc,CAAC9vO,EAAIG,KACvB,MAAMI,EAAO,GACPC,EAAO,GACb,IAAK,IAAIhtG,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAC7C,MAAMiF,EAAIunG,EAAGxsG,IACD2sG,EAAK1nG,EAAGjF,GAAK+sG,EAAOC,GAC5B9vH,KAAK+nB,EACX,CACA,MAAO,CACL8nG,OACAC,OACD,EAEGuvO,EAAW,CAAC/vO,EAAIG,KACpB,MAAMllG,EAAI,GACV,IAAK,IAAIzH,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAC7C,MAAMiF,EAAIunG,EAAGxsG,GACT2sG,EAAK1nG,EAAGjF,IACVyH,EAAEvqB,KAAK+nB,EAEX,CACA,OAAOwC,CAAC,EAEJylG,EAAQ,CAACV,EAAI/xF,EAAG+1B,KACpB28D,EAAMX,GAAI,CAACvnG,EAAGjF,KACZwwC,EAAM/1B,EAAE+1B,EAAKvrC,EAAGjF,EAAE,IAEbwwC,GAEH48D,EAAQ,CAACZ,EAAI/xF,EAAG+1B,KACpB6rS,EAAO7vO,GAAI,CAACvnG,EAAGjF,KACbwwC,EAAM/1B,EAAE+1B,EAAKvrC,EAAGjF,EAAE,IAEbwwC,GAEHgsS,EAAc,CAAChwO,EAAIG,EAAMW,KAC7B,IAAK,IAAIttG,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAC7C,MAAMiF,EAAIunG,EAAGxsG,GACb,GAAI2sG,EAAK1nG,EAAGjF,GACV,OAAO4qG,EAAS/iH,KAAKod,GAChB,GAAIqoG,EAAMroG,EAAGjF,GAClB,KAEJ,CACA,OAAO4qG,EAASE,MAAM,EAElBy6E,GAAS,CAAC/4E,EAAIG,IACX6vO,EAAYhwO,EAAIG,EAAMjC,GAEzB+xO,GAAc,CAACjwO,EAAIG,KACvB,IAAK,IAAI3sG,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAE7C,GAAI2sG,EADMH,EAAGxsG,GACDA,GACV,OAAO4qG,EAAS/iH,KAAKmY,EAEzB,CACA,OAAO4qG,EAASE,MAAM,EAElB0C,GAAUhB,IACd,MAAM/kG,EAAI,GACV,IAAK,IAAIzH,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,IAAO/nB,EAAG,CAC7C,IAAKk8U,EAAU1vO,EAAGxsG,IAChB,MAAM,IAAItd,MAAM,oBAAsBsd,EAAI,6BAA+BwsG,GAE3EF,EAAWtzF,MAAMvR,EAAG+kG,EAAGxsG,GACzB,CACA,OAAOyH,CAAC,EAEJ66K,GAAS,CAAC91E,EAAI/xF,IAAM+yF,GAAQ4uO,EAAM5vO,EAAI/xF,IACtC+wF,GAAS,CAACgB,EAAIG,KAClB,IAAK,IAAI3sG,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,IAAO/nB,EAAG,CAE7C,IAAmB,IAAf2sG,EADMH,EAAGxsG,GACDA,GACV,OAAO,CAEX,CACA,OAAO,CAAI,EAEPrR,GAAU69G,IACd,MAAM/kG,EAAI2kG,EAAYhyH,KAAKoyH,EAAI,GAE/B,OADA/kG,EAAE9Y,UACK8Y,CAAC,EAEJo8F,GAAa,CAACl5E,EAAI43J,IAAOg6J,EAAS5xT,GAAI1lB,IAAMsnG,EAAWg2E,EAAIt9K,KAC3DyoG,GAAc,CAAClB,EAAI/xF,KACvB,MAAMhT,EAAI,CAAC,EACX,IAAK,IAAIzH,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAC7C,MAAMiF,EAAIunG,EAAGxsG,GACbyH,EAAE7K,OAAOqI,IAAMwV,EAAExV,EAAGjF,EACtB,CACA,OAAOyH,CAAC,EAEJ9sB,GAAO,CAAC6xH,EAAI2J,KAChB,MAAM5iG,EAAO64F,EAAYhyH,KAAKoyH,EAAI,GAElC,OADAj5F,EAAK54B,KAAKw7H,GACH5iG,CAAI,EAEPo8F,GAAQ,CAACnD,EAAIxsG,IAAMA,GAAK,GAAKA,EAAIwsG,EAAGjiH,OAASqgH,EAAS/iH,KAAK2kH,EAAGxsG,IAAM4qG,EAASE,OAC7E1wG,GAAOoyG,GAAMmD,GAAMnD,EAAI,GACvBoB,GAASpB,GAAMmD,GAAMnD,EAAIA,EAAGjiH,OAAS,GACrC7P,GAAOgkB,EAAWjkB,MAAMC,MAAQD,MAAMC,KAAOuqB,GAAKmnG,EAAYhyH,KAAK6qB,GACnE4oG,GAAU,CAAC9tG,EAAK0a,KACpB,IAAK,IAAIza,EAAI,EAAGA,EAAID,EAAIxV,OAAQyV,IAAK,CACnC,MAAMyH,EAAIgT,EAAE1a,EAAIC,GAAIA,GACpB,GAAIyH,EAAE0jG,SACJ,OAAO1jG,CAEX,CACA,OAAOmjG,EAASE,MAAM,EAElB4xO,GAAW,CAAClwO,EAAI2J,KACpB,MAAM1uG,EAAI,GACJwnK,EAAevwK,EAAWy3G,GAAclxG,GAAKsmG,EAAO9jG,GAAGzH,GAAKm2G,EAAWn2G,EAAGiF,KAAMA,GAAKsnG,EAAW9kG,EAAGxC,GACzG,IAAK,IAAIjF,EAAI,EAAG+nB,EAAMykF,EAAGjiH,OAAQyV,EAAI+nB,EAAK/nB,IAAK,CAC7C,MAAMiF,EAAIunG,EAAGxsG,GACRivK,EAAahqK,IAChBwC,EAAEvqB,KAAK+nB,EAEX,CACA,OAAOwC,CAAC,EAGJzqB,GAAO/C,OAAO+C,KACd2/V,GAAmB1iW,OAAOiF,eAC1B09V,GAAS,CAACz9U,EAAKsb,KACnB,MAAM8lB,EAAQvjD,GAAKmiB,GACnB,IAAK,IAAI1F,EAAI,EAAGsuB,EAAMwY,EAAMh2C,OAAQkP,EAAIsuB,EAAKtuB,IAAK,CAChD,MAAMuG,EAAIugC,EAAM9mC,GAEhBghB,EADUtb,EAAIa,GACTA,EACP,GAEIkiL,GAAQ,CAAC/iL,EAAKsb,IACXszF,GAAS5uG,GAAK,CAAC8F,EAAGjF,KAAM,CAC7BvG,EAAGuG,EACHtG,EAAG+gB,EAAExV,EAAGjF,OAGN+tG,GAAW,CAAC5uG,EAAKsb,KACrB,MAAMhT,EAAI,CAAC,EAKX,OAJAm1U,GAAOz9U,GAAK,CAAC8F,EAAGjF,KACd,MAAMguG,EAAQvzF,EAAExV,EAAGjF,GACnByH,EAAEumG,EAAMv0G,GAAKu0G,EAAMt0G,CAAC,IAEf+N,CAAC,EAEJ4mG,GAAS5mG,GAAK,CAACxC,EAAGjF,KACtByH,EAAEzH,GAAKiF,CAAC,EAEJmpG,GAAiB,CAACjvG,EAAKwtG,EAAMuB,EAAQC,KACzCyuO,GAAOz9U,GAAK,CAAC8F,EAAGjF,MACb2sG,EAAK1nG,EAAGjF,GAAKkuG,EAASC,GAASlpG,EAAGjF,EAAE,GACrC,EAWE68U,GAAW,CAAC19U,EAAKwtG,KACrB,MAAM9jF,EAAI,CAAC,EAEX,OADAulF,GAAejvG,EAAKwtG,EAAM0B,GAAOxlF,GAAIc,GAC9Bd,CAAC,EAEJylF,GAAa,CAACnvG,EAAKsb,KACvB,MAAMhT,EAAI,GAIV,OAHAm1U,GAAOz9U,GAAK,CAAC9hB,EAAOgE,KAClBomB,EAAEvqB,KAAKu9B,EAAEp9B,EAAOgE,GAAM,IAEjBomB,CAAC,EAEJ9rB,GAASwjB,GACNmvG,GAAWnvG,EAAKirG,GAEnB0M,GAAQ,CAAC33G,EAAKliB,IACX2lM,GAAMzjL,EAAKliB,GAAO2tH,EAASlwH,KAAKykB,EAAIliB,IAAQ2tH,EAASE,OAExD83E,GAAQ,CAACzjL,EAAKliB,IAAQ0/V,GAAiBviW,KAAK+kB,EAAKliB,GACjDkkI,GAAoB,CAAChiH,EAAKliB,IAAQ2lM,GAAMzjL,EAAKliB,SAAqB6B,IAAbqgB,EAAIliB,IAAmC,OAAbkiB,EAAIliB,GAGnF6/V,GAAc76V,IAClB,MAAM8wD,EAAM,CAAC,EAIb,OAHAspS,EAAOp6V,GAAGhF,IACR81D,EAAI91D,GAAO,CAAC,CAAC,IAERD,GAAK+1D,EAAI,EAGZgqS,GAAcpxT,QAAkB7sC,IAAb6sC,EAAEphC,OACrB8D,GAAU5T,MAAM4T,QAYhB2uV,GAAS,CAACrxT,EAAGza,EAAI1R,KACrB,IAAKmsB,EACH,OAAO,EAGT,GADAnsB,EAAIA,GAAKmsB,EACLoxT,GAAYpxT,IACd,IAAK,IAAIryB,EAAI,EAAGsgB,EAAI+R,EAAEphC,OAAQ+O,EAAIsgB,EAAGtgB,IACnC,IAA+B,IAA3B4X,EAAG92B,KAAKolB,EAAGmsB,EAAEryB,GAAIA,EAAGqyB,GACtB,OAAO,OAIX,IAAK,MAAMryB,KAAKqyB,EACd,GAAIi3J,GAAMj3J,EAAGryB,KACoB,IAA3B4X,EAAG92B,KAAKolB,EAAGmsB,EAAEryB,GAAIA,EAAGqyB,GACtB,OAAO,EAKf,OAAO,CAAI,EAEPzR,GAAQ,CAAC3gB,EAAOvU,KACpB,MAAMm8I,EAAM,GAIZ,OAHA67M,GAAOzjV,GAAO,CAAC6yB,EAAMrxC,KACnBomJ,EAAIjkJ,KAAK8H,EAASonC,EAAMrxC,EAAOwe,GAAO,IAEjC4nI,CAAG,EAEN87M,GAAW,CAACh7V,EAAGw4B,KACnB,MAAMkR,EAAI,GAMV,OALAqxT,GAAO/6V,GAAG,CAACyX,EAAG3e,KACP0/B,IAAKA,EAAE/gB,EAAG3e,EAAOkH,IACpB0pC,EAAEzuC,KAAKwc,EACT,IAEKiyB,CAAC,EAYJ/vC,GAAS,CAACq4S,EAAYipD,EAAUC,EAAa7yT,KACjD,IAAIkmB,EAAMy5D,EAAYkzO,GAAelpD,EAAW,GAAKkpD,EACrD,IAAK,IAAIn9U,EAAI,EAAGA,EAAIi0R,EAAW1pS,OAAQyV,IACrCwwC,EAAM0sS,EAAS9iW,KAAKkwC,EAASkmB,EAAKyjP,EAAWj0R,GAAIA,GAEnD,OAAOwwC,CAAG,EAEN6xI,GAAc,CAAC9oL,EAAOs6F,EAAWvpE,KACrC,IAAK,IAAItqB,EAAI,EAAG4Z,EAAIrgB,EAAMhP,OAAQyV,EAAI4Z,EAAG5Z,IACvC,GAAI6zF,EAAUz5G,KAAKkwC,EAAS/wB,EAAMyG,GAAIA,EAAGzG,GACvC,OAAOyG,EAGX,OAAQ,CAAC,EAELmtH,GAAS8mK,GAAcA,EAAWA,EAAW1pS,OAAS,GAEtD4qD,GAAS16B,IACb,IACIhT,EADAsxG,GAAS,EAEb,MAAO,IAAI7mH,KACJ6mH,IACHA,GAAS,EACTtxG,EAAIgT,EAAEzB,MAAM,KAAM9mB,IAEbuV,EACR,EAsDGuxG,GAAY,IACT+iJ,GAAK,EAAG,GAEXA,GAAO,CAACzhO,EAAOD,KACZ,CACLC,QACAD,UAGE6+E,GAAU,CACdtF,GAAImoJ,GACJ5iJ,OAlBe,CAACC,EAAgBC,KAChC,MAAMC,EAAe18G,OAAOy8G,GAAO16H,cACnC,OAA8B,IAA1By6H,EAAe7uH,OACVyuH,KAhBI,EAACO,EAASF,KACvB,MAAM5xG,EAVW,EAAC8xG,EAAS/5G,KAC3B,IAAK,IAAIQ,EAAI,EAAGA,EAAIu5G,EAAQhvH,OAAQyV,IAAK,CACvC,MAAMiF,EAAIs0G,EAAQv5G,GAClB,GAAIiF,EAAE3kB,KAAKkf,GACT,OAAOyF,CAEX,CACgB,EAGNu0G,CAAWD,EAASF,GAC9B,IAAK5xG,EACH,MAAO,CACL6yB,MAAO,EACPD,MAAO,GAGX,MAAMs+E,EAAQ34G,GACLrD,OAAO08G,EAAMn7H,QAAQupB,EAAG,IAAMzH,IAEvC,OAAO+7P,GAAKpjJ,EAAM,GAAIA,EAAM,GAAG,EAOxBtL,CAAO+L,EAAgBE,EAAa,EAc3CG,QAAST,IAgBLurE,GAAW,CAAC5qE,EAAY3T,KAC5B,MAAMqT,EAAQz8G,OAAOopG,GAAWrnH,cAChC,OAAO4mM,GAAO5rE,GAAYC,GACjBA,EAAUC,OAAOR,IACxB,EAyBE/C,GAAa,CAACz2G,EAAKu9F,EAAQ9hH,IAAqB,KAAX8hH,GAAiBv9F,EAAItV,QAAU6yG,EAAO7yG,QAAUsV,EAAIu9F,OAAO9hH,EAAOA,EAAQ8hH,EAAO7yG,UAAY6yG,EAClIk9D,GAAgB,CAACz6J,EAAKvC,IACnB26B,GAAWp4B,EAAKvC,GAND,EAACuC,EAAK06J,IACrB16J,EAAImL,UAAUuvJ,GAKYC,CAAgB36J,EAAKvC,EAAO/S,QAAUsV,EAEnE4xG,GAAa,CAAC5xG,EAAKu9F,EAAQ9hH,EAAQ,EAAG2d,KAC1C,MAAMugE,EAAM35D,EAAIiY,QAAQslF,EAAQ9hH,GAChC,OAAa,IAATk+E,MACKywC,EAAYhxG,IAAcugE,EAAM4jC,EAAO7yG,QAAU0O,EAG1D,EAEIg/B,GAAa,CAACp4B,EAAKvC,IAChBg5G,GAAWz2G,EAAKvC,EAAQ,GAE3B+sB,GAAW,CAACxqB,EAAKoD,IACdqzG,GAAWz2G,EAAKoD,EAAQpD,EAAItV,OAAS0Y,EAAO1Y,QAE/CgsH,GAAQ9uG,GAAKjI,GAAKA,EAAEthB,QAAQupB,EAAG,IAC/B21U,GAAS7mO,GAAM,cACf8mO,GAAQ9mO,GAAM,SACd+mO,GAAQ/mO,GAAM,SACdC,GAAah3G,GAAKA,EAAEjV,OAAS,EAC7BgzV,GAAY/9U,IAAMg3G,GAAWh3G,GAE7Bg+U,GAAQ,CAACngW,EAAOogW,EAAQ,MAC5B,MAAM/5U,EAAMhE,SAASriB,EAAOogW,GAC5B,OAAO96U,MAAMe,GAAOknG,EAASE,OAASF,EAAS/iH,KAAK6b,EAAI,EAGpDo2G,GAAqB,sCACrBC,GAAgBp8H,GACbq8H,GACEvI,GAAWuI,EAAUr8H,GAG1Bs8H,GAAW,CACf,CACE54H,KAAM,OACN+3H,eAAgB,CAAC,kCACjBS,OAAQG,GACCvI,GAAWuI,EAAU,UAAYvI,GAAWuI,EAAU,WAAavI,GAAWuI,EAAU,WAAavI,GAAWuI,EAAU,gBAGrI,CACE34H,KAAM,WACN64H,MAAO,WACPd,eAAgB,CACd,kCACAU,IAEFD,OAAQG,GACCvI,GAAWuI,EAAU,YAAcvI,GAAWuI,EAAU,gBAGnE,CACE34H,KAAM,KACN+3H,eAAgB,CACd,iCACA,8BAEFS,OAAQG,GACCvI,GAAWuI,EAAU,SAAWvI,GAAWuI,EAAU,YAGhE,CACE34H,KAAM,QACN+3H,eAAgB,CACdU,GACA,kCAEFD,OAAQE,GAAc,UAExB,CACE14H,KAAM,UACN+3H,eAAgB,CAAC,uCACjBS,OAAQE,GAAc,YAExB,CACE14H,KAAM,SACN+3H,eAAgB,CACdU,GACA,iCAEFD,OAAQG,IACEvI,GAAWuI,EAAU,WAAavI,GAAWuI,EAAU,aAAevI,GAAWuI,EAAU,iBAInGG,GAAO,CACX,CACE94H,KAAM,UACNw4H,OAAQE,GAAc,OACtBX,eAAgB,CAAC,0CAEnB,CACE/3H,KAAM,MACNw4H,OAAQG,GACCvI,GAAWuI,EAAU,WAAavI,GAAWuI,EAAU,QAEhEZ,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACE/3H,KAAM,UACNw4H,OAAQE,GAAc,WACtBX,eAAgB,CAAC,sCAEnB,CACE/3H,KAAM,QACNw4H,OAAQE,GAAc,YACtBX,eAAgB,CAAC,wCAEnB,CACE/3H,KAAM,QACNw4H,OAAQE,GAAc,SACtBX,eAAgB,IAElB,CACE/3H,KAAM,UACNw4H,OAAQE,GAAc,SACtBX,eAAgB,IAElB,CACE/3H,KAAM,UACNw4H,OAAQE,GAAc,WACtBX,eAAgB,IAElB,CACE/3H,KAAM,WACNw4H,OAAQE,GAAc,QACtBX,eAAgB,CAAC,qCAGfgB,GAAe,CACnBH,SAAU/9G,EAAS+9G,IACnBE,KAAMj+G,EAASi+G,KAGXr7D,GAAO,OACPu7D,GAAW,WAEXC,GAAQ,QACRC,GAAU,UACV1T,GAAS,SAOToS,GAAOh4E,IACX,MAAM1V,EAAU0V,EAAK1V,QACfkvF,EAAUx5E,EAAKw5E,QACfC,EAAYr5H,GAAQ,IAAMkqC,IAAYlqC,EAC5C,MAAO,CACLkqC,UACAkvF,UACAE,OAAQD,EAAU57D,IAClB87D,WAAYF,EAAUL,IACtBQ,KAAMH,EAnBC,MAoBPI,QAASJ,EAAUJ,IACnBS,UAAWL,EAAUH,IACrBS,SAAUN,EAAU7T,IACrB,EAEGoU,GAAU,CACdxB,QAtBgB,IACTR,GAAK,CACV1tF,aAASzsC,EACT27H,QAASvB,GAAQO,YAoBnB7F,GAAIqF,GACJn6D,KAAM5iD,EAAS4iD,IACfu7D,SAAUn+G,EAASm+G,IACnBa,GAAIh/G,EA9BK,MA+BTo+G,MAAOp+G,EAASo+G,IAChBC,QAASr+G,EAASq+G,IAClB1T,OAAQ3qG,EAAS2qG,KAGbsU,GAAU,UAEVC,GAAU,UACVC,GAAQ,QACRC,GAAQ,QACRC,GAAU,UACVC,GAAU,UACVC,GAAW,WAOXjB,GAAOv5E,IACX,MAAM1V,EAAU0V,EAAK1V,QACfkvF,EAAUx5E,EAAKw5E,QACfiB,EAAOr6H,GAAQ,IAAMkqC,IAAYlqC,EACvC,MAAO,CACLkqC,UACAkvF,UACAkB,UAAWD,EAAKP,IAChBS,MAAOF,EArBC,OAsBRG,UAAWH,EAAKN,IAChBU,QAASJ,EAAKJ,IACdS,QAASL,EAAKL,IACdW,UAAWN,EAAKH,IAChBU,UAAWP,EAAKF,IAChBU,WAAYR,EAAKD,IAClB,EAEGU,GAAkB,CACtB1C,QAxBc,IACPe,GAAK,CACVjvF,aAASzsC,EACT27H,QAASvB,GAAQO,YAsBnB7F,GAAI4G,GACJW,QAASj/G,EAASi/G,IAClBiB,IAAKlgH,EAlCK,OAmCVk/G,QAASl/G,EAASk/G,IAClBC,MAAOn/G,EAASm/G,IAChBC,MAAOp/G,EAASo/G,IAChBC,QAASr/G,EAASq/G,IAClBC,QAASt/G,EAASs/G,IAClBC,SAAUv/G,EAASu/G,KAefY,GAZW,CAACrW,EAAWsW,EAAkBC,KAC7C,MAAMtC,EAAWG,GAAaH,WACxBE,EAAOC,GAAaD,OACpBqC,EAAUF,EAAiBl5D,MAAKq5D,GA7QhB,EAACxC,EAAUwC,IAC1B5O,GAAQ4O,EAAcC,QAAQC,IACnC,MAAMC,EAAUD,EAAQzC,MAAMv7H,cAC9B,OAAO4mM,GAAOtrE,GAAUuC,IACtB,IAAI3uH,EACJ,OAAO+uH,KAAsC,QAAxB/uH,EAAK2uH,EAAQtC,aAA0B,IAAPrsH,OAAgB,EAASA,EAAGlP,cAAc,IAC9F7C,KAAImlD,IAAQ,CACb1V,QAAS0V,EAAK5/C,KACdo5H,QAASvB,GAAQtF,GAAGl0G,SAASi9G,EAAQlC,QAAS,IAAK,MAClD,IAoQkDoC,CAAgB5C,EAAUwC,KAAgB3Q,SAAQ,IA1PrF,EAACmO,EAAUjU,IACxBu+E,GAAStqE,EAAUjU,GAAWlqH,KAAI0gI,IACvC,MAAM/B,EAAUvB,GAAQC,OAAOqD,EAAQpD,eAAgBpT,GACvD,MAAO,CACLz6E,QAASixF,EAAQn7H,KACjBo5H,UACD,IAoP4GqC,CAAc7C,EAAUjU,KAAYgF,KAAKiQ,GAAQxB,QAASwB,GAAQrH,IAC3KmJ,EAlPS,EAAC5C,EAAMnU,IACfu+E,GAASpqE,EAAMnU,GAAWlqH,KAAIihI,IACnC,MAAMtC,EAAUvB,GAAQC,OAAO4D,EAAG3D,eAAgBpT,GAClD,MAAO,CACLz6E,QAASwxF,EAAG17H,KACZo5H,UACD,IA4OQuC,CAAS7C,EAAMnU,GAAWgF,KAAKmR,GAAgB1C,QAAS0C,GAAgBvI,IAC7EqJ,EAjVW,EAACF,EAAIP,EAASxW,EAAWuW,KAC1C,MAAMW,EAASH,EAAGnB,UAAuC,IAA5B,QAAQt7H,KAAK0lH,GACpCmX,EAAWJ,EAAGnB,UAAYsB,EAC1BE,EAAWL,EAAGnB,SAAWmB,EAAGlB,YAC5BwB,EAAUD,GAAYb,EAAW,oBACjCe,EAAWJ,IAAWC,GAAYC,GAAYb,EAAW,4BACzDgB,EAAUJ,GAAYC,IAAaE,EACnCE,EAAahB,EAAQxB,YAAc+B,EAAGnB,UAAyC,IAA9B,UAAUt7H,KAAK0lH,GAChEyX,GAAaF,IAAYD,IAAaE,EAC5C,MAAO,CACLN,OAAQhhH,EAASghH,GACjBC,SAAUjhH,EAASihH,GACnBG,SAAUphH,EAASohH,GACnBC,QAASrhH,EAASqhH,GAClBF,QAASnhH,EAASmhH,GAClBxB,UAAWkB,EAAGlB,UACdD,MAAOmB,EAAGnB,MACV8B,UAAWxhH,EAASshH,GACpBC,UAAWvhH,EAASuhH,GACrB,EA8TkBE,CAAWZ,EAAIP,EAASxW,EAAWuW,GACtD,MAAO,CACLC,UACAO,KACAE,aACD,EAIGV,GAAaqB,GAAS7/H,OAAO8/H,WAAWD,GAAO59H,QACrD,IAAI09V,GAAavoS,IAAO,IAAMknE,GAAyBt+H,OAAOgoH,UAAUC,UAAW4E,EAASlwH,KAAKqD,OAAOgoH,UAAU0W,eAAgBF,MAClI,MAAMkJ,GAAW,IAAMi4N,KAEjB13O,GAAYjoH,OAAOgoH,UAAUC,UAC7B23O,GAAal4N,KACbm4N,GAAYD,GAAWnhO,QACvBqhO,GAAOF,GAAW5gO,GAClBE,GAAa0gO,GAAW1gO,WACxB6gO,IAAuD,IAAxC93O,GAAUluF,QAAQ,iBACjCimU,GAAM,CACVC,eAAgB,iFAChBC,aAAcL,GAAU/iO,OAAS78H,SAASigW,cAAgB,EAAI,GAC9DC,YAAa,KACbn0S,UAAW,KACXo0S,YAAaP,GAAU/iO,OACvBijO,gBACAthO,QAAS,CACPjxF,QAASqyT,GAAUryT,QACnBkvF,QAASmjO,GAAUnjO,QACnBG,WAAYgjO,GAAUhjO,WACtBD,OAAQijO,GAAUjjO,OAClBI,UAAW6iO,GAAU7iO,UACrBF,KAAM+iO,GAAU/iO,KAChBC,QAAS8iO,GAAU9iO,QACnBE,SAAU4iO,GAAU5iO,UAEtB+B,GAAI,CACFxxF,QAASsyT,GAAKtyT,QACdkvF,QAASojO,GAAKpjO,QACdoB,UAAWgiO,GAAKhiO,UAChBK,WAAY2hO,GAAK3hO,WACjBD,UAAW4hO,GAAK5hO,UAChBL,MAAOiiO,GAAKjiO,MACZG,QAAS8hO,GAAK9hO,QACdD,QAAS+hO,GAAK/hO,QACdE,UAAW6hO,GAAK7hO,UAChBL,UAAWkiO,GAAKliO,WAElBsB,WAAY,CACVQ,UAAWR,GAAWQ,UACtBP,OAAQD,GAAWC,OACnBC,SAAUF,GAAWE,SACrBI,QAASN,GAAWM,QACpBD,SAAUL,GAAWK,SACrBD,QAASJ,GAAWI,QACpBK,UAAWT,GAAWS,YAIpB0gO,GAAqB,aACrBC,GAASx+U,GACNsqG,EAAWtqG,GAAO,IAAM,GAAKA,GAAK3hB,QAAQkgW,GAAoB,IAkCjEE,GAAS,SAAU3yT,EAAGlR,EAAGnhB,EAAGkG,GAChCA,EAAIA,GAAKvmB,KACL0yC,IACEryB,IACFqyB,EAAIA,EAAEryB,IAER0jV,GAAOrxT,GAAG,CAACA,EAAG3rB,KACe,IAAvBya,EAAErgC,KAAKolB,EAAGmsB,EAAG3rB,EAAG1G,KAGlBglV,GAAO3yT,EAAGlR,EAAGnhB,EAAGkG,IACT,KAIf,EA2BMiqG,GAAQ,CACZxpH,KAAMo+V,GACNhwV,QAASA,GACTmnH,GA7EW,CAACr2G,EAAK3Z,IACZA,IAGQ,UAATA,IAAoB6I,GAAQ8Q,YAGlBA,IAAQ3Z,OALL1G,IAARqgB,EA4ETgtG,QAtjBgBhtG,IAChB,GAAK9Q,GAAQ8Q,GAOX,OAAOA,EAPU,CACjB,MAAM5F,EAAQ,GACd,IAAK,IAAIyG,EAAI,EAAG4Z,EAAIza,EAAI5U,OAAQyV,EAAI4Z,EAAG5Z,IACrCzG,EAAMyG,GAAKb,EAAIa,GAEjB,OAAOzG,CACT,CAEA,EA8iBAwmS,QAtEgB,CAAC1vQ,EAAOkuT,EAAOziW,EAAM,CAAC,KACtC,MAAM0iW,EAAgB10O,EAASz5E,GAASA,EAAMjwC,MAAMm+V,GAAS,KAAOluT,GAAS,GAC7E,IAAIrwB,EAAIw+U,EAAcj0V,OACtB,KAAOyV,KACLlkB,EAAI0iW,EAAcx+U,IAAM,CAAC,EAE3B,OAAOlkB,CAAG,EAiEVyuC,KAAMyyT,GACNlhW,IAAKo+B,GACLsqJ,KAAMy4K,GACNt5K,QA1gBc,CAAC1hL,EAAGyX,KAClB,GAAIzX,EACF,IAAK,IAAI+d,EAAI,EAAG4Z,EAAI33B,EAAEsI,OAAQyV,EAAI4Z,EAAG5Z,IACnC,GAAI/d,EAAE+d,KAAOtG,EACX,OAAOsG,EAIb,OAAQ,CAAC,EAmgBTy+U,OAnEqB77J,GAoErBtwL,OAnEe,CAAC6M,KAAQu/U,KACxB,IAAK,IAAI1+U,EAAI,EAAGA,EAAI0+U,EAAKn0V,OAAQyV,IAAK,CACpC,MAAM2+U,EAAMD,EAAK1+U,GACjB,IAAK,MAAM3e,KAAQs9V,EACjB,GAAI/7J,GAAM+7J,EAAKt9V,GAAO,CACpB,MAAMhE,EAAQshW,EAAIt9V,QACJvC,IAAVzB,IACF8hB,EAAI9d,GAAQhE,EAEhB,CAEJ,CACA,OAAO8hB,CAAG,EAwDVy/U,KAAMN,GACNvkV,QAvCgB,CAACT,EAAGqyB,EAAI5tC,UACxB,MAAMmwF,EAAO50E,EAAElZ,MAAM,KACrB,IAAK,IAAI4f,EAAI,EAAG4Z,EAAIs0D,EAAK3jF,OAAQyV,EAAI4Z,IACnC+R,EAAIA,EAAEuiD,EAAKluE,KAD2BA,KAMxC,OAAO2rB,CAAC,EAgCR6wP,QA9BgB,CAACh9Q,EAAGyC,IAChBi6U,EAAU18U,GACLA,EACQ,KAANA,EACF,GAEA0a,GAAM1a,EAAEpf,MAAM6hB,GAAK,KAAMo8U,IAyBlCQ,gBAtBsB3qU,IACtB,MAAMgqU,EAAcH,GAAIG,YAIxB,OAHIA,IACFhqU,KAA8B,IAAtBA,EAAI4D,QAAQ,KAAc,IAAM,KAAOomU,GAE1ChqU,CAAG,GAoBN48F,GAAO,CAACmF,EAAKC,EAAKC,EAAa9L,IAAiB4L,EAAI1K,QAAO3wH,GAAQu7H,EAAWv7H,EAAMs7H,KACpF4oE,GAAS,CAAC7oE,EAAKC,EAAKC,EAAa9L,IAAiB6kE,GAAMj5D,EAAKC,EAAKC,GAAY1K,MAAMwK,EAAI7K,UAAY8K,EAAI9K,UAWxG8jE,GAAQ,CAACC,EAAIC,EAAI30J,IAAM00J,EAAGhkE,UAAYikE,EAAGjkE,SAAWP,EAAS/iH,KAAK4yB,EAAE00J,EAAGpjE,WAAYqjE,EAAGrjE,aAAenB,EAASE,OAE9GuL,GAAS,CAACziH,EAAG3R,IAAM2R,EAAIg3G,EAAS/iH,KAAK5F,GAAK2oH,EAASE,OAEnD0D,GAA2B,qBAAXzwH,OAAyBA,OAAS4gB,SAAS,eAATA,GASlD8vG,GAAY,CAAC/lF,EAAGzkC,IAPT,EAAClH,EAAOkH,KACnB,IAAI0nC,OAAc7sC,IAAVmF,GAAiC,OAAVA,EAAiBA,EAAQuqH,GACxD,IAAK,IAAIxuG,EAAI,EAAGA,EAAIjjB,EAAMwN,aAAgBzL,IAAN6sC,GAAyB,OAANA,IAAc3rB,EACnE2rB,EAAIA,EAAE5uC,EAAMijB,IAEd,OAAO2rB,CAAC,EAIDuiD,CADOxlD,EAAEtoC,MAAM,KACH6D,GAMf8nH,GAAW,CAAC1qH,EAAM4C,KACtB,MAAMyqH,EAJO,EAACrtH,EAAM4C,IACbwqH,GAAUptH,EAAM4C,GAGR0qH,CAAOttH,EAAM4C,GAC5B,QAAenF,IAAX4vH,GAAmC,OAAXA,EAC1B,MAAM,IAAIhsH,MAAMrB,EAAO,kCAEzB,OAAOqtH,CAAM,EAGTu0E,GAAmBhpM,OAAOyU,eAI1ByuE,GAAgBl4D,IACpB,MAAMhhB,EAAQwqH,GAAU,4BAA6BxpG,GACrD,OAAO6kB,EAAS7kB,KALMhhB,IACf8nH,GAAS,cAAe9nH,GAIR2qH,CAAgB3qH,GAAOhF,UAAUk+E,cAAcl4D,IAAM,mBAAmB3kB,KAAK2iM,GAAiBh+K,GAAGpsB,YAAYwI,MAAM,EAStIA,GAAO3D,GACDA,EAAQmxH,IAAIC,SACbnwH,cAELwkM,GAASzlM,GAAWA,EAAQmxH,IAAIroH,SAChCuoH,GAASlmF,GAAKnrC,GAAWylM,GAAOzlM,KAAamrC,EAE7Ci2T,GAAkBphW,GAAWqhW,GAAYrhW,IAAYy/E,GAAcz/E,EAAQmxH,KAC3EkwO,GAAchwO,GAXJ,GAYViwO,GAAWjwO,GAXJ,GAYPkwO,GAAelwO,GAfJ,GAgBXmwO,GAAuBnwO,GAfH,IAgBpBO,GAAQzE,GAAOvoH,GAAKy8V,GAAYz8V,IAAMjB,GAAKiB,KAAOuoH,EAElD0E,GAAS,CAACV,EAAK5xH,EAAKI,KACxB,KAAIysH,EAASzsH,IAAU2sH,EAAU3sH,IAAUulB,EAASvlB,IAIlD,MADAmb,QAAQpc,MAAM,sCAAuCa,EAAK,YAAaI,EAAO,cAAewxH,GACvF,IAAInsH,MAAM,kCAHhBmsH,EAAIl6G,aAAa1X,EAAKI,EAAQ,GAIhC,EAEI8hW,GAAQ,CAACzhW,EAAST,EAAKI,KAC3BkyH,GAAO7xH,EAAQmxH,IAAK5xH,EAAKI,EAAM,EAE3BoyH,GAAW,CAAC/xH,EAASgyH,KACzB,MAAMb,EAAMnxH,EAAQmxH,IACpB+tO,GAAOltO,GAAO,CAACh2G,EAAGD,KAChB81G,GAAOV,EAAKp1G,EAAGC,EAAE,GACjB,EAEEilH,GAAQ,CAACjhI,EAAST,KACtB,MAAMyc,EAAIhc,EAAQmxH,IAAItsH,aAAatF,GACnC,OAAa,OAANyc,OAAa5a,EAAY4a,CAAC,EAE7Bk2G,GAAS,CAAClyH,EAAST,IAAQ2tH,EAASlwH,KAAKikI,GAAMjhI,EAAST,IACxDsxH,GAAQ,CAAC7wH,EAAST,KACtB,MAAM4xH,EAAMnxH,EAAQmxH,IACpB,SAAOA,IAAOA,EAAI5nH,eAAe4nH,EAAI5nH,aAAahK,EAAY,EAE1DmiW,GAAW,CAAC1hW,EAAST,KACzBS,EAAQmxH,IAAIj6G,gBAAgB3X,EAAI,EAM5BoiW,GAAU3hW,GAAW0vH,EAAM1vH,EAAQmxH,IAAIvtH,YAAY,CAACkvD,EAAKu/D,KAC7Dv/D,EAAIu/D,EAAK1uH,MAAQ0uH,EAAK1yH,MACfmzD,IACN,CAAC,GAEE8uS,GAAS,CAAC5hW,EAASqyH,KACvB,MAAM1yH,EAAQshI,GAAMjhI,EAASqyH,GAC7B,YAAiBjxH,IAAVzB,GAAiC,KAAVA,EAAe,GAAKA,EAAM+C,MAAM,IAAI,EAkB9D4uK,GAAWtxK,QAAqCoB,IAA1BpB,EAAQmxH,IAAIogD,UAClCvrC,GAAQhmI,GAAW4hW,GAAO5hW,EAAS,SACnCw5J,GAAQ,CAACx5J,EAASogK,IAlBV,EAACpgK,EAASqyH,EAAM/hG,KAC5B,MACM4lG,EADM0rO,GAAO5hW,EAASqyH,GACbh0H,OAAO,CAACiyB,IAEvB,OADAmxU,GAAMzhW,EAASqyH,EAAM6D,EAAGz2H,KAAK,OACtB,CAAI,EAcqB05M,CAAMn5M,EAAS,QAASogK,GACpDjuC,GAAW,CAACnyH,EAASogK,IAbV,EAACpgK,EAASqyH,EAAM/hG,KAC/B,MAAM4lG,EAAK2oO,EAAS+C,GAAO5hW,EAASqyH,IAAOr2G,GAAKA,IAAMsU,IAMtD,OALI4lG,EAAGrpH,OAAS,EACd40V,GAAMzhW,EAASqyH,EAAM6D,EAAGz2H,KAAK,MAE7BiiW,GAAS1hW,EAASqyH,IAEb,CAAK,EAMuB0zE,CAAS/lM,EAAS,QAASogK,GAS1DqR,GAAQ,CAACzxK,EAASogK,KAClBkR,GAAStxK,GACXA,EAAQmxH,IAAIogD,UAAUv1K,IAAIokK,GAE1B5G,GAAMx5J,EAASogK,EACjB,EAEIi5C,GAAar5M,IAEQ,KADPsxK,GAAStxK,GAAWA,EAAQmxH,IAAIogD,UAAYvrC,GAAMhmI,IACtD6M,QACZ60V,GAAS1hW,EAAS,QACpB,EAEIy1H,GAAW,CAACz1H,EAASogK,KACzB,GAAIkR,GAAStxK,GAAU,CACHA,EAAQmxH,IAAIogD,UACpBr+G,OAAOktG,EACnB,MACEjuC,GAASnyH,EAASogK,GAEpBi5C,GAAWr5M,EAAQ,EAEfq9Q,GAAW,CAACr9Q,EAASogK,KACzB,MAAM//I,EAASixJ,GAAStxK,GAAWA,EAAQmxH,IAAIogD,UAAU/Q,OAAOJ,GA/BjD,EAACpgK,EAASogK,IACrBvxC,EAAWmX,GAAMhmI,GAAUogK,GACtBjuC,GAASnyH,EAASogK,GAElB5G,GAAMx5J,EAASogK,GA2BiD8/E,CAASlgP,EAASogK,GAE3F,OADAi5C,GAAWr5M,GACJqgB,CAAM,EAET5Y,GAAM,CAACzH,EAASogK,IAAUkR,GAAStxK,IAAYA,EAAQmxH,IAAIogD,UAAUjrK,SAAS85J,GAuB9EyhM,GAAYr5V,IAChB,GAAa,OAATA,QAA0BpH,IAAToH,EACnB,MAAM,IAAIxD,MAAM,oCAElB,MAAO,CAAEmsH,IAAK3oH,EAAM,EAGhB+pH,GAAe,CACnBC,SA7BiB,CAACC,EAAMlsH,KACxB,MACMmsH,GADMnsH,GAASjG,UACL+3B,cAAc,OAE9B,GADAq6F,EAAIzkG,UAAYwkG,GACXC,EAAIC,iBAAmBD,EAAIE,WAAW/lH,OAAS,EAAG,CACrD,MAAMlO,EAAU,wCAEhB,MADAmc,QAAQpc,MAAMC,EAAS8zH,GACjB,IAAIztH,MAAMrG,EAClB,CACA,OAAOkjW,GAAUnvO,EAAIE,WAAW,GAAG,EAqBnCC,QAnBc,CAAC1F,EAAK5mH,KACpB,MACMiC,GADMjC,GAASjG,UACJ+3B,cAAc80F,GAC/B,OAAO00O,GAAUr5V,EAAK,EAiBtBsqH,SAfe,CAAC/qG,EAAMxhB,KACtB,MACMiC,GADMjC,GAASjG,UACJyyH,eAAehrG,GAChC,OAAO85U,GAAUr5V,EAAK,EAatBwqH,QAAS6uO,GACT5uO,UANkB,CAACC,EAAQ3rG,EAAGJ,IAAM+lG,EAASlwH,KAAKk2H,EAAO/B,IAAIgC,iBAAiB5rG,EAAGJ,IAAI/oB,IAAIyjW,KASrFpzO,GAAU,CAACxuH,EAAQ88B,KACvB,MAAMhT,EAAI,GACJ+3U,EAAUl9V,IACdmlB,EAAEvqB,KAAKoF,GACAm4B,EAAEn4B,IAEX,IAAImuD,EAAMh2B,EAAE98B,GACZ,GACE8yD,EAAMA,EAAI2S,KAAKo8R,SACR/uS,EAAI06D,UACb,OAAO1jG,CAAC,EAGJkqG,GAAO,CAACj0H,EAASsJ,KACrB,MAAM6nH,EAAMnxH,EAAQmxH,IACpB,GAvKc,IAuKVA,EAAIroH,SACN,OAAO,EACF,CACL,MAAMuqH,EAAOlC,EACb,QAAqB/vH,IAAjBiyH,EAAK/wH,QACP,OAAO+wH,EAAK/wH,QAAQgH,GACf,QAA+BlI,IAA3BiyH,EAAKC,kBACd,OAAOD,EAAKC,kBAAkBhqH,GACzB,QAAmClI,IAA/BiyH,EAAKE,sBACd,OAAOF,EAAKE,sBAAsBjqH,GAC7B,QAAgClI,IAA5BiyH,EAAKG,mBACd,OAAOH,EAAKG,mBAAmBlqH,GAE/B,MAAM,IAAItE,MAAM,iCAEpB,GAEIyuH,GAAiBtC,GAxLP,IAwLcA,EAAIroH,UA1LjB,IA0LyCqoH,EAAIroH,UAzLpC,KAyL6DqoH,EAAIroH,UAA4D,IAA1BqoH,EAAIuC,kBAU3Hx2F,GAAK,CAAC22F,EAAIC,IAAOD,EAAG1C,MAAQ2C,EAAG3C,IAC/B7qH,GAAW,CAACutH,EAAIC,KACpB,MAAME,EAAKH,EAAG1C,IACR/gG,EAAK0jG,EAAG3C,IACd,OAAO6C,IAAO5jG,GAAa4jG,EAAG1tH,SAAS8pB,EAAG,EAGtCinQ,GAAUr3R,GAAWuyH,GAAaS,QAAQhzH,EAAQmxH,IAAI3mE,eACtD2pE,GAAkBC,GAAOmtO,GAAantO,GAAOA,EAAMijK,GAAQjjK,GAE3D3pE,GAAczqD,GAAWuyH,GAAaS,QAAQmB,GAAgBn0H,GAASmxH,IAAI1mE,aAC3E/D,GAAS1mD,GAAWktH,EAASlwH,KAAKgD,EAAQmxH,IAAIj4F,YAAY96B,IAAIm0H,GAAaS,SAC3E1+G,GAAgBtU,GAAWktH,EAASlwH,KAAKgD,EAAQmxH,IAAI78G,eAAelW,IAAIm0H,GAAaS,SACrF+uO,GAAY,CAAC/hW,EAASs0H,KAC1B,MAAMt2H,EAAOgjB,EAAWszG,GAAUA,EAAStH,EAC3C,IAAImE,EAAMnxH,EAAQmxH,IAClB,MAAM/mF,EAAM,GACZ,KAA0B,OAAnB+mF,EAAIj4F,iBAA0C93B,IAAnB+vH,EAAIj4F,YAA0B,CAC9D,MAAMq7F,EAAYpD,EAAIj4F,WAChB8R,EAAIunF,GAAaS,QAAQuB,GAE/B,GADAnqF,EAAI5qC,KAAKwrC,IACO,IAAZhtC,EAAKgtC,GACP,MAEAmmF,EAAMoD,CAEV,CACA,OAAOnqF,CAAG,EAMNoqF,GAAcx0H,GAAWktH,EAASlwH,KAAKgD,EAAQmxH,IAAIsD,iBAAiBr2H,IAAIm0H,GAAaS,SACrF0B,GAAc10H,GAAWktH,EAASlwH,KAAKgD,EAAQmxH,IAAIuD,aAAat2H,IAAIm0H,GAAaS,SACjFgvO,GAAehiW,GAAWiR,GAAQw9G,GAAQzuH,EAASw0H,KACnDytO,GAAejiW,GAAWyuH,GAAQzuH,EAAS00H,IAC3CgD,GAAa13H,GAAW0+V,EAAM1+V,EAAQmxH,IAAIyB,WAAYL,GAAaS,SACnEoF,GAAU,CAACp4H,EAAS3C,KACxB,MAAMw3H,EAAK70H,EAAQmxH,IAAIyB,WACvB,OAAO1F,EAASlwH,KAAK63H,EAAGx3H,IAAQe,IAAIm0H,GAAaS,QAAQ,EAErDoC,GAAap1H,GAAWo4H,GAAQp4H,EAAS,GACzC4xL,GAAY5xL,GAAWo4H,GAAQp4H,EAASA,EAAQmxH,IAAIyB,WAAW/lH,OAAS,GACxEq1V,GAAkBliW,GAAWA,EAAQmxH,IAAIyB,WAAW/lH,OAUpDgqH,GAAezC,GAAOotO,GAAqBptO,IAAQ5H,EAAc4H,EAAIjD,IAAIjnE,MACzE4sE,GAAclyH,GAAK2tH,GAAaS,QAAQpuH,EAAEusH,IAAI2F,eAC9CqrO,GAAoB/tO,GAAOyC,GAAazC,GAAOA,EAVrC8C,KACd,MAAMhhH,EAAIghH,EAAI/F,IAAIz0G,KAClB,GAAU,OAANxG,QAAoB9U,IAAN8U,EAChB,MAAM,IAAIlR,MAAM,6BAElB,OAAOutH,GAAaS,QAAQ98G,EAAE,EAK2BksV,CAAQjuO,GAAgBC,IAM7E2C,GAAgBnyH,GAAK2tH,GAAaS,QAAQpuH,EAAEusH,IAAIjnE,MAChD6oH,GAAyB32K,IAC7B,GAAIowH,EAAcpwH,EAAM6D,QAAS,CAC/B,MAAMstD,EAAKglE,GAAaS,QAAQ52H,EAAM6D,QACtC,GAAIohW,GAAY9zS,IAAOypE,GAAiBzpE,IAClCnxD,EAAMy2K,UAAYz2K,EAAM02K,aAAc,CACxC,MAAMA,EAAe12K,EAAM02K,eAC3B,GAAIA,EACF,OAAOp2J,GAAKo2J,EAEhB,CAEJ,CACA,OAAO5lD,EAASlwH,KAAKZ,EAAM6D,OAAO,EAE9B+2H,GAAmBh3H,GAAWwsH,EAAcxsH,EAAQmxH,IAAI5lE,YAExD0rE,GAASj3H,IACb,MAAMmxH,EAAMmwO,GAASthW,GAAWA,EAAQmxH,IAAIj4F,WAAal5B,EAAQmxH,IACjE,QAAY/vH,IAAR+vH,GAA6B,OAARA,GAAsC,OAAtBA,EAAI3mE,cAC3C,OAAO,EAET,MAAM0sE,EAAM/F,EAAI3mE,cAChB,MA3BoB5lD,KACpB,MAAMmlB,EAAI+sG,GAAYlyH,GACtB,OAAOiyH,GAAa9sG,GAAKmjG,EAAS/iH,KAAK4f,GAAKmjG,EAASE,MAAM,EAyBpD+J,CAAc5E,GAAaS,QAAQ7B,IAAM7D,MAAK,IAAM4J,EAAIpkH,KAAKxM,SAAS6qH,IAAMstO,EAASxnO,GAAQF,IAAe,EAGrH,IAAIc,GAAoB,CAACC,EAAIC,EAAUxxH,EAAOhC,EAAG+vH,IAC3CwD,EAAGvxH,EAAOhC,GACL2oH,EAAS/iH,KAAK5D,GACZya,EAAWszG,IAAWA,EAAO/tH,GAC/B2mH,EAASE,OAET2K,EAASxxH,EAAOhC,EAAG+vH,GAI9B,MAAM+tO,GAAa,CAAC97V,EAAO4vG,EAAWme,KACpC,IAAIt0H,EAAUuG,EAAM4qH,IACpB,MAAMnzH,EAAOgjB,EAAWszG,GAAUA,EAAStH,EAC3C,KAAOhtH,EAAQk5B,YAAY,CACzBl5B,EAAUA,EAAQk5B,WAClB,MAAMq0B,EAAKglE,GAAaS,QAAQhzH,GAChC,GAAIm2G,EAAU5oD,GACZ,OAAO2/D,EAAS/iH,KAAKojD,GAChB,GAAIvvD,EAAKuvD,GACd,KAEJ,CACA,OAAO2/D,EAASE,MAAM,EAElBqkF,GAAY,CAAClrM,EAAO4vG,EAAWme,IAE5BuD,IADI,CAAC/1G,EAAGlf,IAASA,EAAKkf,IACAugV,GAAY97V,EAAO4vG,EAAWme,GASvD6D,GAAQ,CAAC5xH,EAAO4vG,IAEL0xF,GAAOthM,EAAM4qH,IAAIyB,YADnBpqH,GAAQ2tG,EAAUoc,GAAaS,QAAQxqH,MAEtCpK,IAAIm0H,GAAaS,SAE3BsvO,GAAe,CAAC/7V,EAAO4vG,KAC3B,MAAMo5B,EAAU/mI,IACd,IAAK,IAAI8Z,EAAI,EAAGA,EAAI9Z,EAAKoqH,WAAW/lH,OAAQyV,IAAK,CAC/C,MAAM61G,EAAQ5F,GAAaS,QAAQxqH,EAAKoqH,WAAWtwG,IACnD,GAAI6zF,EAAUgiB,GACZ,OAAOjL,EAAS/iH,KAAKguH,GAEvB,MAAM5jE,EAAMg7E,EAAQ/mI,EAAKoqH,WAAWtwG,IACpC,GAAIiyC,EAAIk5D,SACN,OAAOl5D,CAEX,CACA,OAAO24D,EAASE,MAAM,EAExB,OAAOmiB,EAAQhpI,EAAM4qH,IAAI,EAGrB0gE,GAAa,CAACtrL,EAAO+C,EAAUgrH,IAAW+tO,GAAW97V,GAAO3B,GAAKqvH,GAAKrvH,EAAG0E,IAAWgrH,GACpFkb,GAAe,CAACjpI,EAAO+C,IAvJjB,EAACA,EAAU/C,KACrB,MAAMm0D,OAAiBt5D,IAAVmF,EAAsBjG,SAAWiG,EAAM4qH,IACpD,OAAOsC,GAAe/4D,GAAQwyD,EAASE,OAASF,EAASlwH,KAAK09D,EAAKi5D,cAAcrqH,IAAWlL,IAAIm0H,GAAaS,QAAQ,EAqJ7EzgB,CAAIjpG,EAAU/C,GAClD8lN,GAAY,CAAC9lN,EAAO+C,EAAUgrH,IAE3BuD,IADI,CAAC73H,EAASsJ,IAAa2qH,GAAKj0H,EAASsJ,IACnBuoL,GAAYtrL,EAAO+C,EAAUgrH,GAItDiuO,GAAe,CAACviW,EAASozI,GAAiB,KAC9C,OAAInc,GAAOj3H,GACFA,EAAQmxH,IAAIkiB,mBAHLpzI,EAKGD,EALOqsN,GAAUpsN,EAAQ,sBAKhBqtH,KAAK9uG,EAAS40H,IAAiBE,GAAmC,SAAvB3J,GAAS2J,KALhErzI,KAMhB,EAEI0pI,GAAW3pI,GAAWA,EAAQmxH,IAAIqiB,gBAElCza,GAAc5H,QAAqB/vH,IAAd+vH,EAAI7iG,OAAuBtN,EAAWmwG,EAAI7iG,MAAMk/B,kBAErEwrE,GAAc,CAAC7H,EAAK7vH,EAAU3B,KAClC,IAAKysH,EAASzsH,GAEZ,MADAmb,QAAQpc,MAAM,qCAAsC4C,EAAU,YAAa3B,EAAO,cAAewxH,GAC3F,IAAInsH,MAAM,+BAAiCrF,GAE/Co5H,GAAY5H,IACdA,EAAI7iG,MAAMsgC,YAAYttD,EAAU3B,EAClC,EAOImyH,GAAQ,CAAC9xH,EAASsB,EAAU3B,KAChC,MAAMwxH,EAAMnxH,EAAQmxH,IACpB6H,GAAY7H,EAAK7vH,EAAU3B,EAAM,EAE7Bu5H,GAAS,CAACl5H,EAASm5H,KACvB,MAAMhI,EAAMnxH,EAAQmxH,IACpB+tO,GAAO/lO,GAAK,CAACn9G,EAAGD,KACdi9G,GAAY7H,EAAKp1G,EAAGC,EAAE,GACtB,EAEEguH,GAAQ,CAAChqI,EAASsB,KACtB,MAAM6vH,EAAMnxH,EAAQmxH,IAEdpnG,EADS1pB,OAAOkqD,iBAAiB4mE,GACtB3jE,iBAAiBlsD,GAClC,MAAa,KAANyoB,GAAaktG,GAAOj3H,GAA8C+pB,EAAnCsvG,GAAkBlI,EAAK7vH,EAAa,EAEtE+3H,GAAoB,CAAClI,EAAK7vH,IAAay3H,GAAY5H,GAAOA,EAAI7iG,MAAMk/B,iBAAiBlsD,GAAY,GACjGiyI,GAAS,CAACvzI,EAASsB,KACvB,MAAM6vH,EAAMnxH,EAAQmxH,IACd3nG,EAAM6vG,GAAkBlI,EAAK7vH,GACnC,OAAO4rH,EAASlwH,KAAKwsB,GAAKnmB,QAAO0mB,GAAKA,EAAEld,OAAS,GAAE,EAE/Cq5L,GAAYlmM,IAChB,MAAMm5H,EAAM,CAAC,EACPhI,EAAMnxH,EAAQmxH,IACpB,GAAI4H,GAAY5H,GACd,IAAK,IAAI7uG,EAAI,EAAGA,EAAI6uG,EAAI7iG,MAAMzhB,OAAQyV,IAAK,CACzC,MAAM6jL,EAAWh1E,EAAI7iG,MAAMogB,KAAKpsB,GAChC62G,EAAIgtE,GAAYh1E,EAAI7iG,MAAM63K,EAC5B,CAEF,OAAOhtE,CAAG,EAENI,GAAW,CAACv5H,EAASsB,KAtCJ,EAAC6vH,EAAK7vH,KACvBy3H,GAAY5H,IACdA,EAAI7iG,MAAMkrG,eAAel4H,EAC3B,EAqCAm4H,CADYz5H,EAAQmxH,IACA7vH,GAChB8xH,GAAKlB,GAAOlyH,EAAS,SAAS5B,IAAIshW,IAAS,KAC7CgC,GAAS1hW,EAAS,QACpB,EAII80H,GAAW,CAAChmG,EAAQ9uB,KACP0mD,GAAO53B,GACf+d,MAAK7wB,IACZA,EAAEm1G,IAAI4D,aAAa/0H,EAAQmxH,IAAKriG,EAAOqiG,IAAI,GAC3C,EAEEmE,GAAU,CAACxmG,EAAQ9uB,KACP00H,GAAY5lG,GACpBw+F,MAAK,KACM5mE,GAAO53B,GACf+d,MAAK7wB,IACZi5G,GAASj5G,EAAGhc,EAAQ,GACpB,IACDgc,IACD84G,GAAS94G,EAAGhc,EAAQ,GACpB,EAEEk1H,GAAU,CAACxuE,EAAQ1mD,KACFo1H,GAAW1uE,GACnB4mE,MAAK,KAChB2H,GAASvuE,EAAQ1mD,EAAQ,IACxBgc,IACD0qC,EAAOyqE,IAAI4D,aAAa/0H,EAAQmxH,IAAKn1G,EAAEm1G,IAAI,GAC3C,EAEE8D,GAAW,CAACvuE,EAAQ1mD,KACxB0mD,EAAOyqE,IAAIx4F,YAAY34B,EAAQmxH,IAAI,EAE/B2/E,GAAS,CAAC9wM,EAASq1H,KACvBP,GAAS90H,EAASq1H,GAClBJ,GAASI,EAASr1H,EAAQ,EAStBu1H,GAAS,CAAC7uE,EAAQ5/C,KACtB63V,EAAO73V,GAAUygB,IACf0tG,GAASvuE,EAAQn/B,EAAE,GACnB,EAGEwQ,GAAQ/3B,IACZA,EAAQmxH,IAAI/5F,YAAc,GAC1BunU,EAAOjnO,GAAW13H,IAAUw1H,IAC1B4jF,GAAS5jF,EAAM,GACf,EAEE4jF,GAAWp5M,IACf,MAAMmxH,EAAMnxH,EAAQmxH,IACG,OAAnBA,EAAIj4F,YACNi4F,EAAIj4F,WAAWC,YAAYg4F,EAC7B,EAEIuE,GAASL,IACb,MAAMM,EAAW+B,GAAWrC,GAzBd,IAACvmG,EAAQhoB,EA0BnB6uH,EAAS9oH,OAAS,IA1BPiiB,EA2BLumG,EA1BVspO,EADuB73V,EA2BJ6uH,GA1BF,CAACpuG,EAAGjF,KACnB,MAAM1d,EAAU,IAAN0d,EAAUwM,EAAShoB,EAASwb,EAAI,GAC1CgzG,GAAQ1wH,EAAG2iB,EAAE,KA0Bf6xL,GAAS/jF,EAAQ,EASb/C,GAAY/pH,GAASm2V,EAAMn2V,EAAOgqH,GAAaS,SAE/Ckc,GAAQlvI,GAAWA,EAAQmxH,IAAIljG,UAC/BgrG,GAAQ,CAACj5H,EAAS8C,KACtB,MACMs8M,EADQi4E,GAAQr3R,GACDmxH,IACfgiE,EAAW5gE,GAAaS,QAAQosF,EAAOtoB,0BACvCuoB,EAbS,EAAC5sF,EAAMlsH,KACtB,MACMmsH,GADMnsH,GAASjG,UACL+3B,cAAc,OAE9B,OADAq6F,EAAIzkG,UAAYwkG,EACTiF,GAAWnF,GAAaS,QAAQN,GAAK,EASpBF,CAAS1vH,EAASs8M,GAC1C7pF,GAAO49D,EAAUksB,GACjBtnL,GAAM/3B,GACNi1H,GAASj1H,EAASmzL,EAAS,EAyBvBvoB,GAAW,CAACvnK,EAAQioE,IAAYsnG,IAChCvvK,EAAOuvK,IACTtnG,EATiBsnG,KACnB,MAAM3yK,EAASsyH,GAAaS,QAAQ+/C,GAAuBH,GAAU7kD,MAAM6kD,EAAS3yK,SAC9EjC,EAAO,IAAM40K,EAAShzK,kBACtBC,EAAU,IAAM+yK,EAAS9yK,iBACzBmiK,EAAOiiC,EAAQrkM,EAAS7B,GAC9B,MAdc,EAACiC,EAAQsnB,EAAGJ,EAAGnpB,EAAM6B,EAASoiK,EAAMz4I,KAAQ,CAC1DvpB,SACAsnB,IACAJ,IACAnpB,OACA6B,UACAoiK,OACAz4I,QAOOwpJ,CAAQ/yK,EAAQ2yK,EAASlnH,QAASknH,EAASjnH,QAAS3tD,EAAM6B,EAASoiK,EAAM2Q,EAAS,EAI/EU,CAAaV,GACvB,EAOI7iD,GAAS,CAAC/vH,EAAS5D,EAAOiH,EAAQioE,IALzB,EAACtrE,EAAS5D,EAAOiH,EAAQioE,EAAS2nG,KAC/C,MAAMC,EAAUtI,GAASvnK,EAAQioE,GAEjC,OADAtrE,EAAQmxH,IAAIx1H,iBAAiBS,EAAO82K,EAASD,GACtC,CAAEG,OAAQxmD,EAAMwmD,GAAQpzK,EAAS5D,EAAO82K,EAASD,GAAa,EAEnBrlD,CAAO5tH,EAAS5D,EAAOiH,EAAQioE,GAAS,GACtF8nG,GAAS,CAACpzK,EAAS5D,EAAOkvE,EAAS2nG,KACvCjzK,EAAQmxH,IAAIt1H,oBAAoBO,EAAOkvE,EAAS2nG,EAAW,EAGvDlpJ,GAAI,CAAC7sB,EAAM20B,KAER,CACL30B,OACA20B,MACAqtB,UAJgB,CAAC33B,EAAGJ,IAAM4C,GAAE7sB,EAAOqqB,EAAGsK,EAAM1K,KAO1Cg/G,GAAgBp8G,GAMhBq8G,GAAqB,CAAC7hI,EAAG2R,SACnB9U,IAANmD,EACKA,OAEMnD,IAAN8U,EAAkBA,EAAI,EAiB3B4wH,GAAW9mI,IACf,MAAMmxH,EAAMnxH,EAAQmxH,IAEdr+G,EADMq+G,EAAI3mE,cACC13C,KACjB,OAAIA,IAASq+G,EACJgV,GAAcrzH,EAAKkoE,WAAYloE,EAAKyzH,WAExCtP,GAAOj3H,GAhCMmxH,KAClB,MAAMhmE,EAAMgmE,EAAI1lE,wBAChB,OAAO06E,GAAch7E,EAAIjuD,KAAMiuD,EAAIt5B,IAAI,EAiChCk1G,CAAY5V,GAFVgV,GAAc,EAAG,EAEH,EAGnBsvB,GAAQ+Z,IACZ,MAAMt4C,OAAe91H,IAATouK,EAAqBA,EAAKr+C,IAAM7wH,SACtCinB,EAAI2vG,EAAIpkH,KAAK4zH,YAAcxP,EAAIz9G,gBAAgBitH,WAC/Cv/G,EAAI+vG,EAAIpkH,KAAK0zH,WAAatP,EAAIz9G,gBAAgB+sH,UACpD,OAAOL,GAAc5+G,EAAGJ,EAAE,EAEtBuiB,GAAK,CAACniB,EAAGJ,EAAGqoJ,KAChB,MACMlpC,QADellI,IAATouK,EAAqBA,EAAKr+C,IAAM7wH,UAC5BmqD,YACZ67E,GACFA,EAAI09C,SAASz8J,EAAGJ,EAClB,EAEIq7U,GAAW,CAACxiW,EAASyiW,KACR16N,KAAWjJ,QAAQxB,YACpBt8G,EAAWhhB,EAAQmxH,IAAIuxO,wBACrC1iW,EAAQmxH,IAAIuxO,wBAAuB,GAEnC1iW,EAAQmxH,IAAIizD,eAAeq+K,EAC7B,EAWIjnT,GAAS,CAACj0B,EAAGJ,EAAGkF,EAAOyF,KAAW,CACtCvK,IACAJ,IACAkF,QACAyF,SACA30B,MAAOoqB,EAAI8E,EACXgvB,OAAQl0B,EAAI2K,IAERytM,GAAYn4B,IAChB,MAAM9gE,OAAellI,IAATgmM,EAAqB/mM,OAAS+mM,EACpClwE,EAAMoP,EAAIhmI,SACV+mM,EAAS5xC,GAAMljC,GAAaS,QAAQkE,IAC1C,MApBYkwE,KACZ,MAAM9gE,OAAellI,IAATgmM,EAAqB/mM,OAAS+mM,EAC1C,OAAIr/D,KAAWjJ,QAAQzB,YACdnQ,EAASE,OAETF,EAASlwH,KAAKspI,EAAIghE,eAC3B,EAcOjrC,CAAM/1B,GAAKhZ,MAAK,KACrB,MAAMmF,EAAO6T,EAAIhmI,SAASmZ,gBACpB4S,EAAQomG,EAAKhmE,YACb36B,EAAS2gG,EAAK/lE,aACpB,OAAOlR,GAAO6rJ,EAAOnqM,KAAMmqM,EAAOx1K,IAAKxF,EAAOyF,EAAO,IACpDw1K,GAAkB9rJ,GAAO1uC,KAAKC,IAAIu6L,EAAeC,SAAUF,EAAOnqM,MAAO4P,KAAKC,IAAIu6L,EAAeE,QAASH,EAAOx1K,KAAMy1K,EAAej7K,MAAOi7K,EAAex1K,SAAQ,EAInKylG,GAAgB,CAAChxH,EAAO4vG,KAC5B,IAAI91F,EAAS,GAOb,OANAs+U,EAAOjnO,GAAWnxH,IAAQghB,IACpB4uF,EAAU5uF,KACZlH,EAASA,EAAOhiB,OAAO,CAACkpB,KAE1BlH,EAASA,EAAOhiB,OAAOk5H,GAAchwG,EAAG4uF,GAAW,IAE9C91F,CAAM,EAGTs3G,GAAc,CAACpxH,EAAO+C,IA5chB,EAACA,EAAU/C,KACrB,MAAMm0D,OAAiBt5D,IAAVmF,EAAsBjG,SAAWiG,EAAM4qH,IACpD,OAAOsC,GAAe/4D,GAAQ,GAAKgkS,EAAMhkS,EAAKlxD,iBAAiBF,GAAWipH,GAAaS,QAAQ,EA0cxD39D,CAAI/rD,EAAU/C,GAEjDyxH,GAAa,CAACzxH,EAAO4vG,EAAWme,IAAW+tO,GAAW97V,EAAO4vG,EAAWme,GAAQ7G,SAChFm3C,GAAU,CAACr+J,EAAO4vG,IAlVN,EAAC5vG,EAAO4vG,KACxB,MAAMn2G,EAAUuG,EAAM4qH,IACtB,OAAKnxH,EAAQk5B,WAGNi/F,GAAM5F,GAAaS,QAAQhzH,EAAQk5B,aAAa3R,IAAM2V,GAAG32B,EAAOghB,IAAM4uF,EAAU5uF,KAF9E2lG,EAASE,MAEwE,EA6UtDk/F,CAAU/lN,EAAO4vG,GAAWsX,SAC5D4K,GAAa,CAAC9xH,EAAO4vG,IAAcmsP,GAAa/7V,EAAO4vG,GAAWsX,SAExE,MAAMk1O,GACJ,WAAAxnW,CAAY+hM,EAAW+5J,GACrB17V,KAAKiN,KAAO00L,EACZ3hM,KAAK07V,SAAWA,EAChB17V,KAAKsyC,QAAUtyC,KAAKsyC,QAAQ63B,KAAKnqE,MACjCA,KAAKqsD,KAAOrsD,KAAKqsD,KAAK8d,KAAKnqE,MAC3BA,KAAKmuD,KAAOnuD,KAAKmuD,KAAKgc,KAAKnqE,MAC3BA,KAAKmkM,MAAQnkM,KAAKmkM,MAAMh6H,KAAKnqE,KAC/B,CACA,OAAAsyC,GACE,OAAOtyC,KAAKiN,IACd,CACA,IAAAo/C,CAAKmuE,GAEH,OADAx6H,KAAKiN,KAAOjN,KAAKqnW,YAAYrnW,KAAKiN,KAAM,aAAc,cAAeutH,GAC9Dx6H,KAAKiN,IACd,CACA,IAAAkhD,CAAKqsE,GAEH,OADAx6H,KAAKiN,KAAOjN,KAAKqnW,YAAYrnW,KAAKiN,KAAM,YAAa,kBAAmButH,GACjEx6H,KAAKiN,IACd,CACA,KAAAk3L,CAAM3pE,GAEJ,OADAx6H,KAAKiN,KAAOjN,KAAKsnW,iBAAiBtnW,KAAKiN,KAAMutH,GACtCx6H,KAAKiN,IACd,CACA,WAAAo6V,CAAYp6V,EAAMs6V,EAAWC,EAAahtO,GACxC,GAAIvtH,EAAM,CACR,IAAKutH,GAAWvtH,EAAKs6V,GACnB,OAAOt6V,EAAKs6V,GAEd,GAAIt6V,IAASjN,KAAK07V,SAAU,CAC1B,IAAIryL,EAAUp8J,EAAKu6V,GACnB,GAAIn+L,EACF,OAAOA,EAET,IAAK,IAAIl+G,EAASl+C,EAAK0wB,WAAYwtB,GAAUA,IAAWnrD,KAAK07V,SAAUvwS,EAASA,EAAOxtB,WAErF,GADA0rI,EAAUl+G,EAAOq8S,GACbn+L,EACF,OAAOA,CAGb,CACF,CAEF,CACA,gBAAAi+L,CAAiBr6V,EAAMutH,GACrB,GAAIvtH,EAAM,CACR,MAAMo8J,EAAUp8J,EAAKisH,gBACrB,GAAIl5H,KAAK07V,UAAYryL,IAAYrpK,KAAK07V,SACpC,OAEF,GAAIryL,EAAS,CACX,IAAK7uC,EACH,IAAK,IAAIoC,EAAQysC,EAAQgtB,UAAWz5D,EAAOA,EAAQA,EAAMy5D,UACvD,IAAKz5D,EAAMy5D,UACT,OAAOz5D,EAIb,OAAOysC,CACT,CACA,MAAMl+G,EAASl+C,EAAK0wB,WACpB,GAAIwtB,GAAUA,IAAWnrD,KAAK07V,SAC5B,OAAOvwS,CAEX,CAEF,EAGF,MAAMs8S,GAAY,SACZC,GAAO,OACPC,GAAWxiW,GAAQA,IAASsiW,GAG5BG,GAAmB,eACnBC,GAAmBr7U,GAAQo7U,GAAiBvgW,KAAKmlB,GAUjDs7U,GAAgB1nV,GAAW,OAANA,GAAoB,OAANA,EAEnC2nV,GAAc,CAACv7U,EAAMw7U,EAAY,EAAGC,GAAmB,EAAMC,GAAiB,KAClF,MAAMC,EAhoCO,EAAC5hV,EAAGwxB,IAAUA,GAAS,EAAI,GAAK,IAAIv2C,MAAMu2C,EAAQ,GAAG7zC,KAAKqiB,GAgoCtD6hV,CAAO,IAAKJ,GACvBK,EAAiB77U,EAAKvnB,QAAQ,MAAOkjW,GACrCrjV,EAASqvG,EAAMk0O,GAAgB,CAAC9wS,EAAKn3C,IANXA,KAAiC,IAA5B,UAAYye,QAAQze,GAOnDkoV,CAA0BloV,IAAMA,IAAMsnV,GACpCnwS,EAAIgxS,WAAyB,KAAZhxS,EAAI3wC,KAAcqhV,GAAoB1wS,EAAI3wC,IAAItV,SAAW+2V,EAAe/2V,OAAS,GAAK42V,GAN/F,EAAC17U,EAAM+zD,IAAQA,EAAM/zD,EAAKlb,QAAUivE,GAAO,GAAIunR,GAAct7U,EAAK+zD,IAM+CioR,CAAUH,EAAgB9wS,EAAI3wC,IAAItV,OAAS,GAC/J,CACLi3V,WAAW,EACX3hV,IAAK2wC,EAAI3wC,IAAM8gV,IAGV,CACLa,WAAW,EACX3hV,IAAK2wC,EAAI3wC,IAAM,KAIZ,CACL2hV,UAAWT,GAAc1nV,GACzBwG,IAAK2wC,EAAI3wC,IAAMxG,IAGlB,CACDmoV,WAAW,EACX3hV,IAAK,KAEP,OAAO9B,EAAO8B,GAAG,EAGb6hV,GAAal8V,GACVU,KACIA,GAAQA,EAAKM,WAAahB,EAGjCm8V,GAAmBz7V,KAAUA,IAASjM,OAAOyU,eAAexI,GAC5D07V,GAAcF,GAAW,GACzBzyO,GAAgB/oH,GAAQ07V,GAAY17V,IAAS44V,GAAgB7uO,GAAaS,QAAQxqH,IAElFupL,GAAgBpuL,IACpB,MAAMwgW,EAAiBxgW,EAAK1C,cAC5B,OAAOuH,GAAQgkH,EAAchkH,IAASA,EAAK4oH,SAASnwH,gBAAkBkjW,CAAc,EAEhFzkL,GAAiBz2I,IACrB,MAAMm7T,EAAkBn7T,EAAM7qC,KAAI0jB,GAAKA,EAAE7gB,gBACzC,OAAOuH,IACL,GAAIA,GAAQA,EAAK4oH,SAAU,CACzB,MAAMA,EAAW5oH,EAAK4oH,SAASnwH,cAC/B,OAAO4tH,EAAWu1O,EAAiBhzO,EACrC,CACA,OAAO,CAAK,CACb,EAEGizO,GAAmB,CAAC1gW,EAAM1F,KAC9B,MAAM00C,EAAQ10C,EAAOgD,cAAcyB,MAAM,KACzC,OAAO8F,IACL,GAAI07V,GAAY17V,GAAO,CACrB,MAAM89H,EAAM99H,EAAKgiD,cAAcC,YAC/B,GAAI67E,EACF,IAAK,IAAIhkH,EAAI,EAAGA,EAAIqwB,EAAM9lC,OAAQyV,IAAK,CACrC,MAAMygK,EAAWz8C,EAAI/7E,iBAAiB/hD,EAAM,MAE5C,IADiBu6K,EAAWA,EAASv1H,iBAAiB7pD,GAAQ,QAC7CgvC,EAAMrwB,GACrB,OAAO,CAEX,CAEJ,CACA,OAAO,CAAK,CACb,EAOGgiV,GAAY97V,GAAQ07V,GAAY17V,IAASA,EAAKe,aAAa,kBAE3Dg7V,GAAY/7V,GAAQ07V,GAAY17V,IAA0B,UAAjBA,EAAK3G,QAC9C2+S,GAA0B7gT,GACvB6I,IACL,GAAI+oH,GAAc/oH,GAAO,CACvB,GAAIA,EAAKgrI,kBAAoB7zI,EAC3B,OAAO,EAET,GAAI6I,EAAK3D,aAAa,8BAAgClF,EACpD,OAAO,CAEX,CACA,OAAO,CAAK,EAGV6kW,GAAoB9kL,GAAe,CACvC,WACA,UAEI+kL,GAAWT,GAAW,GACtBU,GAAUV,GAAW,GACrBW,GAAOX,GAAW,GAClB1yO,GAAY0yO,GAAW,GACvBY,GAAeZ,GAAW,GAC1BryO,GAAqBqyO,GAAW,IAChCa,GAAS9yK,GAAc,MACvB+yK,GAAQ/yK,GAAc,OACtBgzK,GAA0BvkD,GAAwB,QAClDwkD,GAA2BxkD,GAAwB,SACnDykD,GAAgBvlL,GAAe,CACnC,KACA,OAEIwlL,GAAuBxlL,GAAe,CAC1C,KACA,KACA,YAEIylL,GAAYzlL,GAAe,CAC/B,QACA,QACA,SACA,UAEI0lL,GAAerzK,GAAc,MAC7BszK,GAAYtzK,GAAc,WAC1BuzK,GAAcvzK,GAAc,WAE5BwzK,GAAsB,CAC1BC,WAAW,EACXC,aAAa,EACbxkK,oBAAoB,GAehBykK,IAxEehmG,GAwEW,oBAvEvBl3P,GACE07V,GAAY17V,IAASA,EAAKe,aAAam2P,KAF7BA,OAyErB,MACMimG,GAAiB,CAACn9V,EAAMyuV,EAAUr1V,IAAWwhW,GAAiB56V,EAAK6G,QAfrC,EAAC7G,EAAMyuV,EAAUr1V,KACnD,MAAMgkW,EAAcrzO,GAAaS,QAAQikO,GACnC/5J,EAAY3qE,GAAaS,QAAQxqH,GACjCq9V,EAAqBjkW,EAAOkkW,wBAElC,OAAO9tO,GAAWklE,GADA10L,GAAQ08L,GAAM2gK,EAAoBliW,GAAK6E,KACjBokH,EAAM1vF,GAAI0oU,GAAa,EAUkBG,CAA4Bv9V,EAAMyuV,EAAUr1V,GACzHokW,GAAW,CAACx9V,EAAMyuV,EAAUr1V,EAAQe,IAAY8hW,GAASj8V,KAAUm9V,GAAen9V,EAAMyuV,EAAUr1V,MAAae,EAAQ8iW,cA5J5G19U,KACf,IAAK,MAAMpM,KAAKoM,EACd,IAAKm7U,GAASvnV,GACZ,OAAO,EAGX,OAAO,CAAI,EAsJgIsqV,CAASz9V,EAAK6G,OACrJ62V,GAAgB,CAACtkW,EAAQ4G,EAAMyuV,EAAUt0V,IACtCqe,EAAWre,EAAQwjW,YAAcxjW,EAAQwjW,UAAU39V,IARhC,EAACA,EAAM5G,IAC1BsiW,GAAY17V,IAAS08L,GAAMtjM,EAAO29L,sBAAuB/2L,EAAK4oH,UAOFg1O,CAAoB59V,EAAM5G,IAAW8jW,GAAWl9V,IAX/FA,IACb07V,GAAY17V,IAA2B,MAAlBA,EAAK4oH,WAAqB5oH,EAAKe,aAAa,UAAYf,EAAKe,aAAa,SAAWf,EAAKe,aAAa,OAUP88V,CAAc79V,IAASw9V,GAASx9V,EAAMyuV,EAAUr1V,EAAQe,IAAYqiW,GAAyBx8V,IAASu8V,GAAwBv8V,IAJ/NA,IAAQ8L,GAAci+G,GAAaS,QAAQxqH,IAAOqlH,QAAOnnE,IAAW67S,GAAa77S,KAIuJ4/S,CAAqB99V,GAEpR+9V,GAAc,CAAC3kW,EAAQsyL,EAAYjxK,KACvC,MAAMtgB,EAAU,IACX4iW,MACAtiV,GAEL,GAAItgB,EAAQs+L,oBACNilK,GAActkW,EAAQsyL,EAAYA,EAAYvxL,GAChD,OAAO,EAGX,IAAI6F,EAAO0rL,EAAW9+D,WAClBoxO,EAAU,EACd,IAAKh+V,EACH,OAAO,EAET,MAAMm9K,EAAS,IAAIg9K,GAAcn6V,EAAM0rL,GACvC,EAAG,CACD,GAAIvxL,EAAQ6iW,WAAatB,GAAY17V,GAAO,CAC1C,MAAMi+V,EAAaj+V,EAAK3D,aAAa,kBACrC,GAAI4hW,EAAY,CACdj+V,EAAOm9K,EAAO/9H,KAAoB,QAAf6+S,GACnB,QACF,CACF,CACA,GAAIn1O,GAAU9oH,GACZA,EAAOm9K,EAAO/9H,MAAK,QAGrB,GAAIi9S,GAAOr8V,GACTg+V,IACAh+V,EAAOm9K,EAAO/9H,WAFhB,CAKA,GAAIs+S,GAActkW,EAAQ4G,EAAM0rL,EAAYvxL,GAC1C,OAAO,EAET6F,EAAOm9K,EAAO/9H,MAJd,CAKF,OAASp/C,GACT,OAAOg+V,GAAW,CAAC,EAEf9zK,GAAY,CAAC9wL,EAAQy4H,EAAK13H,IACvB4jW,GAAY3kW,EAAQy4H,EAAIlJ,IAAK,CAClC8vE,oBAAoB,KACjBt+L,IAGD+jW,GAAc,CAAC9kW,EAAQ4G,EAAM7F,IAC1BujW,GAActkW,EAAQ4G,EAAMA,EAAM,CACvCi9V,YAAaF,GAAoBE,eAC9B9iW,IAIDyoK,GAAOr5G,IACX,IAAIpyD,EAAQoyD,EAOZ,MAAO,CACL7yD,IAPU,IACHS,EAOPP,IALU4c,IACVrc,EAAQqc,CAAC,EAKV,EAuBG2qV,GAAajsT,IACjB,MAAMrgB,EAAa+wI,GAAKl+C,EAASE,QAC3Bk+C,EAAS,IAAMjxI,EAAWn7B,MAAM2tC,MAAKvc,GAAMkK,cAAclK,KAW/D,MAAO,CACL5hB,MAXY,KACZ48J,IACAjxI,EAAWj7B,IAAI8tH,EAASE,OAAO,EAU/BylB,MARY,IAAMx4G,EAAWn7B,MAAMuuH,SASnCvuH,IARU,IAAMm7B,EAAWn7B,MAS3BE,IARUwnW,IACVt7L,IACAjxI,EAAWj7B,IAAI8tH,EAAS/iH,KAAKmwB,YAAYssU,EAAkBlsT,IAAQ,EAOpE,EAEGgwJ,GAAU,KACd,MAAM5yF,EAzCUuzD,KAChB,MAAMvzD,EAAUszD,GAAKl+C,EAASE,QACxBk+C,EAAS,IAAMxzD,EAAQ54G,MAAM2tC,KAAKw+H,GAWxC,MAAO,CACL38J,MAXY,KACZ48J,IACAxzD,EAAQ14G,IAAI8tH,EAASE,OAAO,EAU5BylB,MARY,IAAM/6B,EAAQ54G,MAAMuuH,SAShCvuH,IARU,IAAM44G,EAAQ54G,MASxBE,IARU0iB,IACVwpJ,IACAxzD,EAAQ14G,IAAI8tH,EAAS/iH,KAAK2X,GAAG,EAO9B,EAuBeypJ,CAAUt/H,GAE1B,MAAO,IACF6rE,EACHwkC,GAHSv/G,GAAK+6E,EAAQ54G,MAAM2tC,KAAK9P,GAIlC,EAGG8pU,GAA0BljW,IAC9B,MAAMmjW,EAAgBnjW,EAAK1C,cAC3B,MAAsB,QAAlB6lW,EACK,MACoB,SAAlBA,EACF,OAEA,MACT,EAEIC,GAA2BpjW,GAA0C,SAAlCkjW,GAAwBljW,GAC3DqjW,GAAuBx+V,GAAQu+V,GAAyBv+V,EAAK4oH,UAC7D61O,GAAcz+V,GAAQq+V,GAAwBr+V,EAAK4oH,UACnD81O,GAAoB,CACxB,MACA,QAuBIC,GAAuB,iBAEvBC,GAA4BhpW,GAAOsgW,EADpBtgW,IAAOygW,EAASv/V,GAAKlB,IAAMmB,IAAQ,QAAQqD,KAAKrD,KACtB8nW,CAAajpW,IAAMuF,IAChE,MAAM2jW,EAAcC,IAAIx0F,OAAOpvQ,GAC/B,MAAO,GAAI2jW,KAAkB5I,EAAMwI,IAAmB1yL,GAAM,OAAQA,KAAQ8yL,OAAiB7nW,KAAK,IAAI,IACrGA,KAAK,KACF+nW,GAAoB,CAACC,EAAgBj+T,IACrCgjF,EAAchjF,EAAYmqF,cAAc8zO,KAC1Cj+T,EAAYvyB,aAAakwV,GAAsB,QACO,oBAAlD39T,EAAY3kC,aAAa,sBAC3B2kC,EAAYtyB,gBAAgB,sBAEvB,IAEPsyB,EAAYtyB,gBAAgBiwV,KACrB,GAGLO,GAA6B,CAAC9lW,EAAQ2E,KAC1C,MAAMohW,EAAsBP,GAA0BxlW,EAAOgmW,0BACvDH,EAAiBL,GAA0BxlW,EAAOsxL,oBACxD,OAAO2rK,EAASt4V,EAAMiD,iBAAiBm+V,IAAsBn+T,GAAeg+T,GAAkBC,EAAgBj+T,IAAa,EAEvHq+T,GAAW,CAACjmW,EAAQ2rD,EAAIu6S,KAC5B,IAAI33V,EACJ,MAAM43V,EAAoBD,EAAW,YAAc,aACnD,IAAK,IAAI3vO,EAAQ5qE,EAAGw6S,GAAoB5vO,EAAOA,EAAQA,EAAM4vO,GAC3D,GAAIxB,GAAY3kW,EAAQu2H,EAAO,CAAE8oE,oBAAoB,IAEnD,YAD4B,QAA3B9wL,EAAKgoH,EAAMj/F,kBAA+B,IAAP/oB,GAAyBA,EAAGgpB,YAAYg/F,GAGhF,EA0BI6vO,GAAuB,CAACpmW,EAAQ2E,EAAO0hW,KAC3C,MAAMC,EAAiBtmW,EAAOsxL,mBACxB+jK,EAAW1kO,GAAaS,QAAQzsH,GAChCurI,EAAUvkF,GAAM5pD,GAAK4pD,KAAO26S,EAC5B5zO,EAAS/mE,GAAMrwB,GAAGqwB,EAAI0pS,GAC5B0H,EAAOrsO,GAAU21O,IAAoBE,IACnC9F,GAAW8F,EAAkBr2N,EAASxd,GAAQznF,MAAK6kG,IACjD,MAAM02N,EAxdK,EAAC7hW,EAAO4vG,IAAc0oP,EAASnnO,GAAWnxH,GAAQ4vG,GAwdrCwf,CAASwyO,GAAkB56S,GAAMukF,EAAQvkF,KAAQ3rD,EAAOm0L,aAAapyL,GAAK+tI,GAAc/tI,GAAK4pD,MACrH,GAAI66S,EAAgBv7V,OAAS,EAAG,CAC9B,MAAMw7V,EAAa/zV,GAAco9H,GACjCitN,EAAOyJ,GAAiBjwO,IACtBkqO,GAAWlqO,EAAO2Z,EAASxd,GAAQznF,MAAK6kG,IAnClC,EAAC9vI,EAAQ0mW,EAAWC,KAClC,MAAM94T,EAAQnvC,SAAS4hK,cACjBhpI,EAAaovU,EAAUpvU,WAC7B,GAAIA,EAAY,CACduW,EAAM+yH,eAAe8lM,GACrB74T,EAAMizH,aAAa6lM,GACnB,MAAMC,EAAiB/4T,EAAMukJ,kBAC7B6zK,GAASjmW,EAAQ4mW,GAAgB,GACjC/4T,EAAMgzH,cAAc8lM,GACpB94T,EAAMkzH,YAAY2lM,GAClB,MAAMG,EAAgBh5T,EAAMukJ,kBAC5B6zK,GAASjmW,EAAQ6mW,GAAe,GAC3BlC,GAAY3kW,EAAQ4mW,EAAgB,CAAEvnK,oBAAoB,KAC7D/nK,EAAW67F,aAAayzO,EAAgBF,GAErC/B,GAAY3kW,EAAQ2mW,EAAU,CAAEtnK,oBAAoB,KACvD/nK,EAAW67F,aAAawzO,EAAUD,GAE/B/B,GAAY3kW,EAAQ6mW,EAAe,CAAExnK,oBAAoB,KAC5D/nK,EAAW67F,aAAa0zO,EAAeH,GAEzCpvU,EAAWC,YAAYmvU,EACzB,GAcUI,CAAQ9mW,EAAQ8vI,EAAYvgB,IAAKgH,EAAMhH,IAAI,GAC3C,IAEJk3O,EAAWx7T,MAAKtmC,GAASmhW,GAA2B9lW,EAAQ2E,EAAM4qH,MACpE,IACA,GACF,EAYEw3O,GAAiB,CAAC/mW,EAAQ2E,KAC9B,MAAM0hW,EAAoBP,GAA2B9lW,EAAQ2E,GAC7DyhW,GAAqBpmW,EAAQ2E,EAAO0hW,GAZR,EAACrmW,EAAQ2E,EAAO0hW,KAC5CtJ,EAAO,IACFsJ,KACAW,GAAmBhnW,EAAQ2E,GAAS,CAACA,GAAS,KAChD62L,GAASuhK,EAAOhnO,GAAYpF,GAAaS,QAAQoqE,GAAQA,EAAMhsE,SAASnwH,gBAAgBo5H,IACrFwuO,GAAoBjnW,EAAQy4H,EAAIlJ,MAClCuE,GAAO2E,EACT,KACC,EAKHyuO,CAAsBlnW,EAAQ2E,EAAO0hW,EAAkB,EAEnDzpS,GAAgB,CAAC58D,EAAQ3B,KAC7B,GAAI8oW,GAAqBnnW,EAAQ3B,GAAS,CACxC,MAAMwnW,EAAiBL,GAA0BxlW,EAAOsxL,oBACxDs0K,GAAkBC,EAAgBxnW,EACpC,GAOI+oW,GAAez7S,GAAMA,EAAGhkD,aAAa49V,IACrC8B,GAA2B,CAACrnW,EAAQ+B,IAASuhM,GAAMtjM,EAAOgmW,yBAA0BjkW,GACpFolW,GAAuB,CAACnnW,EAAQ4G,IAAS07V,GAAY17V,IAASygW,GAAyBrnW,EAAQ4G,EAAK4oH,UACpGw3O,GAAqB,CAAChnW,EAAQ4G,IAASugW,GAAqBnnW,EAAQ4G,IAASwgW,GAAaxgW,GAC1FqgW,GAAsB,CAACjnW,EAAQ4G,IAASugW,GAAqBnnW,EAAQ4G,KAAUwgW,GAAaxgW,GAC5F0gW,GAAwB,CAACtnW,EAAQ4G,IAAuB,IAAdA,EAAKV,MAAcmhW,GAAyBrnW,EAAQ4G,EAAK7E,OAASyoH,EAAS5jH,EAAK6pH,KAAK80O,KAE/HgC,GAAYphO,KAAWjJ,QACvBsqO,GAAe7gW,GAASs/L,GAAOt/L,EAAO84V,IAiBtCgI,GAAW,CAAChvO,EAAKlC,IAAUkC,EAAI1E,UAAY9G,EAAWwL,EAAI1E,SAAUwC,GACpEw8M,GAAS,CAAC7hU,EAAMunH,EAAK2tL,KACzB,IAAIzgS,EAAI,EAAGJ,EAAI,EACf,MAAM+vG,EAAMpkH,EAAK03C,cAEjB,GADAw9P,EAAUA,GAAoBl1S,EAC1BunH,EAAK,CACP,GAAI2tL,IAAYl1S,GAAQunH,EAAI5uE,uBAA2E,WAAlDu+E,GAAMzX,GAAaS,QAAQlgH,GAAO,YAA0B,CAC/G,MAAM+3C,EAAMwvE,EAAI5uE,wBAGhB,OAFAlkC,EAAIsjC,EAAI3tD,MAAQg6H,EAAIz9G,gBAAgBitH,YAAc5zH,EAAK4zH,YAAcxP,EAAIz9G,gBAAgBotH,WACzF1/G,EAAI0jC,EAAIh5B,KAAOqlG,EAAIz9G,gBAAgB+sH,WAAa1zH,EAAK0zH,WAAatP,EAAIz9G,gBAAgBmtH,UAC/E,CACLr/G,IACAJ,IAEJ,CACA,IAAIw+K,EAAetrE,EACnB,KAAOsrE,GAAgBA,IAAiBqiH,GAAWriH,EAAa78L,WAAaugW,GAAS1jK,EAAcqiH,IAAU,CAC5G,MAAMshD,EAAmB3jK,EACzBp+K,GAAK+hV,EAAiBtuR,YAAc,EACpC7zD,GAAKmiV,EAAiB/iO,WAAa,EACnCo/D,EAAe2jK,EAAiB3jK,YAClC,CAEA,IADAA,EAAetrE,EAAInhG,WACZysK,GAAgBA,IAAiBqiH,GAAWriH,EAAa78L,WAAaugW,GAAS1jK,EAAcqiH,IAClGzgS,GAAKo+K,EAAaj/D,YAAc,EAChCv/G,GAAKw+K,EAAan/D,WAAa,EAC/Bm/D,EAAeA,EAAazsK,WAE9B/R,GA5C0BkzG,IACxB8uO,GAAU9rO,aAA6B,UAAd15H,GAAK02H,GACzB+uO,GAAa1xO,GAAW2C,IAAMh3H,QAAOg3H,GACrB,YAAd12H,GAAK02H,KACX30D,MAAKg7F,GACC0oM,GAAanH,GAAavhM,IAAUtiK,KAAI0U,IAC7C,MAAMy2V,EAAUz2V,EAAKq+G,IAAIoV,UACnBijO,EAAa9oM,EAAQvvC,IAAIoV,UACzBkjO,EAAgB/oM,EAAQvvC,IAAI4U,aAClC,OAAOwjO,GAAWC,GAAcC,EAAgB,CAAC,MAElD17O,MAAM,GAEF,EA+BF27O,CAAsBn3O,GAAaS,QAAQqH,GAClD,CACA,MAAO,CACL9yG,IACAJ,IACD,EAGGwiV,GAAmB,CAACC,EAAsBpyL,EAAW,CAAC,KAC1D,IAAIqyL,EAAU,EACd,MAAMC,EAAe,CAAC,EAChBC,EAAOx3O,GAAaS,QAAQ42O,GAC5B1yO,EAAM/C,GAAgB41O,GAOtBt5S,EAAWzwD,IACfi1H,GAASktO,GAAkB4H,GAAO/pW,EAAQ,EAEtCgqW,EAAc15U,IAClB,MAAM25U,EAAiB9H,GAAkB4H,GACzCv6N,GAAay6N,EAAgB,IAAM35U,GAAIuc,KAAKusK,GAAS,EAEjD8wJ,EAAmB1zU,GAAO4iG,GAAM0wO,EAActzU,GAAK03F,YAAW,KAAM,CACxE59F,GAAI,QAAUu5U,IACdM,OAAQ,GACRC,OAAQ,GACR92T,MAAO,MAEH92B,EAAOga,GAAO,IAAIpa,SAAQ,CAACqa,EAAS0vI,KACxC,IAAI/tI,EACJ,MAAMiyU,EAAgBt+O,GAAMo1O,gBAAgB3qU,GACtCosJ,EAAQsnL,EAAiBG,GAC/BP,EAAaO,GAAiBznL,EAC9BA,EAAMtvI,QACN,MAAMj3B,EAAU,CAACwK,EAAWkQ,KAC1B4nU,EAAO93U,EAAWnqB,GAClBkmL,EAAM7rJ,OAASA,EACf6rJ,EAAMunL,OAAS,GACfvnL,EAAMwnL,OAAS,GACXhyU,IACFA,EAAKtB,OAAS,KACdsB,EAAKrb,QAAU,KACfqb,EAAO,KACT,EAEI+xU,EAAS,IAAM9tV,EAAQumK,EAAMunL,OAAQ,GACrCC,EAAS,IAAM/tV,EAAQumK,EAAMwnL,OAAQ,GAO3C,GANI3zU,GACFmsJ,EAAMunL,OAAO3qW,KAAKi3B,GAEhB0vI,GACFyc,EAAMwnL,OAAO5qW,KAAK2mK,GAEC,IAAjByc,EAAM7rJ,OACR,OAEF,GAAqB,IAAjB6rJ,EAAM7rJ,OAER,YADAozU,IAGF,GAAqB,IAAjBvnL,EAAM7rJ,OAER,YADAqzU,IAGFxnL,EAAM7rJ,OAAS,EACf,MAAMuzU,EAAW/3O,GAAaM,QAAQ,OAAQqE,EAAI/F,KAClDY,GAASu4O,EAAU,CACjB3hP,IAAK,aACL7gH,KAAM,WACNwoB,GAAIsyJ,EAAMtyJ,KAERknJ,EAAS+yL,gBACX9I,GAAM6I,EAAU,cAAe,aAE7B9yL,EAASgzL,gBACX/I,GAAM6I,EAAU,iBAAkB9yL,EAASgzL,gBAE7CpyU,EAAOkyU,EAASn5O,IAChB/4F,EAAKtB,OAASqzU,EACd/xU,EAAKrb,QAAUqtV,EACf35S,EAAS65S,GACT7I,GAAM6I,EAAU,OAAQD,EAAc,IA0BlCxtV,EAAS2Z,IACb,MAAM6zU,EAAgBt+O,GAAMo1O,gBAAgB3qU,GAC5C4iG,GAAM0wO,EAAcO,GAAex9T,MAAK+1I,IAExB,MADEA,EAAMtvI,eAEbw2T,EAAaO,GACpBL,EAAYpnL,EAAMtyJ,IACpB,GACA,EAgBJ,MAAO,CACL9T,OACAu9S,WAlDiB,CAACx6T,EAAK45H,KACvB,MAAMypD,EAAQsnL,EAAiB3qW,GAC/BuqW,EAAavqW,GAAOqjL,EACpBA,EAAMtvI,QACN,MAAMm3T,EAAYl4O,GAAaM,QAAQ,QAASqE,EAAI/F,KACpDY,GAAS04O,EAAW,CAClB9hP,IAAK,aACL7gH,KAAM,WACNwoB,GAAIsyJ,EAAMtyJ,KAEZm6U,EAAUt5O,IAAIljG,UAAYkrG,EAC1B1oE,EAASg6S,EAAU,EAwCnBC,QAtCcC,GACKvuV,QAAQwuV,WAAWlM,EAAMiM,GAAMn0U,GAAOha,EAAKga,GAAK++B,KAAK/2C,EAASgY,OAC/D++B,MAAKsoF,IACrB,MAAMx+I,EAAQu/V,EAAY/gN,GAAS9zH,GAAkB,cAAbA,EAAEgN,SAC1C,OAAI13B,EAAMiwH,KAAKziH,OAAS,EACfuP,QAAQ+vK,OAAOuyK,EAAMr/V,EAAMiwH,MAAMjvG,GAAUA,EAAOwqV,UAElDnM,EAAMr/V,EAAMgwH,MAAMhvG,GAAUA,EAAO1gB,OAC5C,IA+BFkd,SACAm9S,aAnBmBz6T,IACnB65H,GAAM0wO,EAAcvqW,GAAKstC,MAAK+1I,IAEd,MADEA,EAAMtvI,eAEbw2T,EAAavqW,GACpByqW,EAAYpnL,EAAMtyJ,IACpB,GACA,EAaFw6U,UAXgBH,IAChBhM,EAAOgM,GAAMn0U,IACX3Z,EAAO2Z,EAAI,GACX,EASFu0U,mBAjIyBP,IACzBhzL,EAASgzL,eAAiBA,CAAc,EAiIxCQ,mBA/HyBT,IACzB/yL,EAAS+yL,eAAiBA,CAAc,EA+HzC,EAgBGU,GAbW,MACf,MAAM7sW,EAAM,IAAIqP,QAUhB,MAAO,CAAEy9V,WATU,CAACC,EAAkB3zL,KACpC,MACM4zL,EADOt0O,GAAYq0O,GACJh6O,IACrB,OAAOjE,EAASlwH,KAAKoB,EAAIc,IAAIksW,IAAUl9O,YAAW,KAChD,MAAMm9O,EAAK1B,GAAiByB,EAAS5zL,GAErC,OADAp5K,EAAIgB,IAAIgsW,EAASC,GACVA,CAAE,GACT,EAEiB,EAENC,GAGXC,GAAkB,CAAC/iW,EAAM5G,IAAW4qH,EAAchkH,KAAUk+V,GAAY9kW,EAAQ4G,IAAS5G,EAAOy6L,SAAS7zL,EAAK4oH,SAASnwH,gBAQvHuqW,GAAmBhjW,GATVA,IAAwC,SAAhCA,EAAK4oH,SAASnwH,cASJwqW,CAAOjjW,IAAgD,aAAvCA,EAAK3D,aAAa,iBAC7D6mW,GAAiB,CAACljW,EAAM8vC,EAAM12C,IAAW6iW,GAASj8V,IAASA,EAAK6G,KAAKxC,OAAS,GARlD,EAACrE,EAAM8vC,EAAM12C,KAC7C,MAAM8nD,EAAO,IAAIi5S,GAAcn6V,EAAM8vC,GAAMoR,MAAK,GAC1C9B,EAAO,IAAI+6S,GAAcn6V,EAAM8vC,GAAMsP,MAAK,GAC1C+jT,EAAep/O,EAAY7iE,IAAS6hT,GAAgB7hT,EAAM9nD,GAC1DgqW,EAAer/O,EAAY3kE,IAAS2jT,GAAgB3jT,EAAMhmD,GAChE,OAAO+pW,GAAgBC,CAAY,EAGoDC,CAA0BrjW,EAAM8vC,EAAM12C,GAGzHkqW,GAAW,CAAC36O,EAAK3oH,EAAM5G,EAAQ02C,KACnC,IAAInoC,EACJ,MAAM8mV,EAAW3+S,GAAQ9vC,EACzB,GAAI07V,GAAY17V,IAASgjW,GAAiBhjW,GACxC,OAAOA,EAET,MAAMmtH,EAAWntH,EAAKoqH,WACtB,IAAK,IAAItwG,EAAIqzG,EAAS9oH,OAAS,EAAGyV,GAAK,EAAGA,IACxCwpV,GAAS36O,EAAKwE,EAASrzG,GAAI1gB,EAAQq1V,GAErC,GAAIiN,GAAY17V,GAAO,CACrB,MAAMo+M,EAAkBp+M,EAAKoqH,WACE,IAA3Bg0F,EAAgB/5M,QAAgB2+V,GAAiB5kJ,EAAgB,MACxC,QAA1Bz2M,EAAK3H,EAAK0wB,kBAA+B,IAAP/oB,GAAyBA,EAAG4kH,aAAa6xF,EAAgB,GAAIp+M,GAEpG,CAIA,MApBiBA,IAAQmpH,GAAmBnpH,IAASo8V,GAAap8V,GAiB7DkpH,CAAWlpH,IAAUk+V,GAAY9kW,EAAQ4G,IAlB1BA,MAAQ07V,GAAY17V,IAAQA,EAAKoqH,WAAW/lH,OAAS,EAkBjBk/V,CAAcvjW,IAAUkjW,GAAeljW,EAAMyuV,EAAUr1V,IAC7GuvH,EAAIj+D,OAAO1qD,GAENA,CAAI,EAGPwjW,GAAYjgP,GAAMs2L,QAClB4pD,GAAmB,0EACnBC,GAAkB,kEAClBC,GAAiB,aACjBC,GAAe,kCACfC,GAAW,CACf,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,UAEDC,GAAe,CACnB,IAAK,SACL,IAAM,QACN,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SAEDC,GAAkB,CACtB,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,KAONC,GAAsB,CAAC75T,EAAOotT,KAClC,MAAMzlO,EAAS,CAAC,EAChB,GAAI3nF,EAAO,CACT,MAAM85T,EAAW95T,EAAMjwC,MAAM,KAC7Bq9V,EAAQA,GAAS,GACjB,IAAK,IAAIz9U,EAAI,EAAGA,EAAImqV,EAAS5/V,OAAQyV,GAAK,EAAG,CAC3C,MAAMg/J,EAAMpiK,OAAOgjL,aAAalgL,SAASyqV,EAASnqV,GAAIy9U,IACtD,IAAKuM,GAAahrL,GAAM,CACtB,MAAMorL,EAAS,IAAMD,EAASnqV,EAAI,GAAK,IACvCg4G,EAAOgnD,GAAOorL,EACdpyO,EAAOoyO,GAAUprL,CACnB,CACF,CACA,OAAOhnD,CACT,CAEA,EAEIqyO,GAAgBH,GAAoB,+rEAAwzE,IAC51EI,GAAY,CAAC7kV,EAAMsqG,IAAStqG,EAAKvnB,QAAQ6xH,EAAO45O,GAAmBC,IAAiB5qL,GACjFgrL,GAAahrL,IAAQA,IAKxBurL,GAAgB,CAAC9kV,EAAMsqG,IAAStqG,EAAKvnB,QAAQ6xH,EAAO45O,GAAmBC,IAAiB5qL,GACxFA,EAAIz0K,OAAS,EACR,MAAsC,MAA7By0K,EAAIygB,WAAW,GAAK,QAAiBzgB,EAAIygB,WAAW,GAAK,OAAS,OAAS,IAEtFuqK,GAAahrL,IAAQ,KAAOA,EAAIygB,WAAW,GAAK,MAEnD+qK,GAAc,CAAC/kV,EAAMsqG,EAAM06O,KAC/B,MAAMC,EAAkBD,GAAYJ,GACpC,OAAO5kV,EAAKvnB,QAAQ6xH,EAAO45O,GAAmBC,IAAiB5qL,GACtDgrL,GAAahrL,IAAQ0rL,EAAgB1rL,IAAQA,GACpD,EAiDE2rL,GAAW,CACfL,aACAjhF,aAhEmB5jQ,IAAS,GAAKA,GAAMvnB,QAAQ2rW,IAAgB7qL,GACxDgrL,GAAahrL,IAAQA,IAgE5BurL,iBACAC,eACAI,cApDoB,CAACvpW,EAAMopW,KAC3B,MAAMI,EAAcX,GAAoBO,IAAaJ,GAC/CS,EAAwB,CAACrlV,EAAMsqG,IAAStqG,EAAKvnB,QAAQ6xH,EAAO45O,GAAmBC,IAAiB5qL,QAC1ElgL,IAAtBkrW,GAAahrL,GACRgrL,GAAahrL,QAEGlgL,IAArB+rW,EAAY7rL,GACP6rL,EAAY7rL,GAEjBA,EAAIz0K,OAAS,EACR,MAAsC,MAA7By0K,EAAIygB,WAAW,GAAK,QAAiBzgB,EAAIygB,WAAW,GAAK,OAAS,OAAS,IAEtF,KAAOzgB,EAAIygB,WAAW,GAAK,MAE9BsrK,EAAoB,CAACtlV,EAAMsqG,IACxBy6O,GAAY/kV,EAAMsqG,EAAM86O,GAE3BG,EAAUtB,GAAUroW,EAAKnD,QAAQ,MAAO,MAC9C,OAAI8sW,EAAQC,OAASD,EAAQh2T,QACpB81T,EAELE,EAAQC,MACNR,EACKM,EAEFP,GAELQ,EAAQh2T,QACHu1T,GAEFD,EAAS,EAuBhBY,OArBazlV,GAAQA,EAAKvnB,QAAQ4rW,IAAc,CAAC/2S,EAAK/d,IAClDA,GAEAA,EADsC,MAApCA,EAAQx2C,OAAO,GAAGG,cACV+gB,SAASs1B,EAAQooE,OAAO,GAAI,IAE5B19F,SAASs1B,EAAS,KAEhB,OACZA,GAAW,MACJp4B,OAAOgjL,aAAa,OAAS5qJ,GAAW,IAAK,OAAmB,KAAVA,KAExD+0T,GAAS/0T,IAAYp4B,OAAOgjL,aAAa5qJ,GAE3Ci1T,GAAgBl3S,IAAQs3S,GAAct3S,IAvF1BttC,KACnB,MAAMsyG,EAAM9H,GAAaM,QAAQ,OAAO1B,IAExC,OADAkJ,EAAIpsG,UAAYlG,EACTsyG,EAAIjjG,aAAeijG,EAAIpR,WAAalhG,CAAI,EAoFM0lV,CAAap4S,MAW9Dq4S,GAAU,CAAC/6T,EAAOkuT,KACtBluT,EAAQo5E,GAAMxpH,KAAKowC,IACJA,EAAMjwC,MAAMm+V,GAAS,KAAO,GAEvC8M,GAAkBxrV,GAAO,IAAIze,OAAO,IAAMye,EAAI3hB,QAAQ,WAAY,OAAS,KAE3EotW,GAAuBnsV,IAC3B,MAAMosV,EAASluW,GACT6+V,EAAU7+V,GACL++V,EAAM/+V,EAAOkuW,GAJPpsV,IAAO2qB,EAAS3qB,IAAQA,EAAIN,QAAkD,oBAAxC5kB,OAAOgF,UAAUwB,SAASrG,KAAK+kB,GAKzEqsV,CAAWnuW,GACb,IAAI+D,OAAO/D,EAAMwhB,OAAQxhB,EAAMo5G,OAC7B3sE,EAASzsC,GACX6kM,GAAM7kM,EAAOkuW,GAEbluW,EAGX,OAAOkuW,EAAOpsV,EAAI,EAqBdssV,GAAwBjmW,GACrBvL,OAAOqhE,OAAO,CACnB,KACA,YACA,QACA,MACA,OACA,QACA,WACA,QACA,UACY,UAAT91D,EAAmB,CACpB,kBACA,cACA,YACA,WACA,SACA,aACA,YACA,WACA,YACA,YACE,MACQ,iBAATA,EAA0B,CAAC,YAAc,KAI1CkmW,GAA0BlmW,IAC9B,IAAImmW,EACAC,EAGJ,GAFAD,EAAe,sFACfC,EAAkB,wLACL,UAATpmW,EAAkB,CAEpBmmW,GAAgB,8EADW,uBAE3BC,GAAmB,2GACrB,CACA,GAAa,iBAATpmW,EAAyB,CAE3BomW,EAAkB,CAChBA,EAF2B,8CAI3BzuW,KAAK,KAEPwuW,EAAe,CACbA,EAFwB,+BAIxBxuW,KAAK,IACT,CACA,MAAM0uW,EAAc,CAClBF,EACAC,GACAzuW,KAAK,KACP,MAAO,CACLwuW,eACAC,kBACAC,cACD,EAEGC,GAAiBtmW,IACrB,MAAM,aAACmmW,EAAY,gBAAEC,EAAe,YAAEC,GAAeH,GAAwBlmW,GACvEsa,EAAQziB,GACLpD,OAAOqhE,OAAOj+D,EAAM+C,MAAM,MAEnC,OAAOnG,OAAOqhE,OAAO,CACnBqwS,aAAc7rV,EAAM6rV,GACpBC,gBAAiB9rV,EAAM8rV,GACvBC,YAAa/rV,EAAM+rV,IACnB,EAGEE,GAAa,CACjB,MAAS52S,IAAO,IAAM22S,GAAe,WACrC,MAAS32S,IAAO,IAAM22S,GAAe,WACrC,eAAgB32S,IAAO,IAAM22S,GAAe,mBAExCE,GAAoB,CAACxmW,EAAMnE,KAC/B,MAAM,aAACsqW,EAAY,gBAAEC,EAAe,YAAEC,GAAeE,GAAWvmW,KAChE,MAAa,WAATnE,EACKupH,EAAS/iH,KAAK8jW,GACH,aAATtqW,EACFupH,EAAS/iH,KAAK+jW,GACH,SAATvqW,EACFupH,EAAS/iH,KAAKgkW,GAEdjhP,EAASE,MAClB,EAwNImhP,GAAkB5qW,GAEfupH,EAASlwH,KADS,gLACawrB,KAAK7kB,IAAOvF,KAAIkE,IAAW,CAC/DksW,OAAuB,MAAflsW,EAAQ,GAChBqB,KAAMrB,EAAQ,OAoFZmsW,GAA0B,CAACC,EAAeC,KAC9C,MAAMC,EAAoB,6DAC1B,OAAOhqK,GAAO8oK,GAAQiB,EAAe,MAAM1pM,IACzC,MAAM3iK,EAAUssW,EAAkBpmV,KAAKy8I,GACvC,GAAI3iK,EAAS,CACX,MAAMsd,EAAStd,EAAQ,GACjBusW,EAAcvsW,EAAQ,GACtBwsW,EAAaxsW,EAAQ,GACrBysW,EAAczsW,EAAQ,GACtB0sW,EAAW1sW,EAAQ,GACnBtC,EAAU,CACd4D,WAAY,CAAC,EACbqrW,gBAAiB,IAiBnB,GAfAP,EAAc7hU,MAAK0gB,GApBG,EAACvwD,EAAM0sC,KACjCw1T,GAAOliW,EAAK4G,YAAY,CAACjE,EAAOJ,KAC9BmqC,EAAG9lC,WAAWrE,GAAOI,CAAK,IAE5B+pC,EAAGulU,gBAAgBzvW,QAAQxC,EAAKiyW,gBAAgB,EAgBnBC,CAAoB3hT,EAAIvtD,KAClC,MAAX4f,EACF5f,EAAQmvW,WAAY,EACA,MAAXvvV,IACT5f,EAAQovW,aAAc,GAEJ,MAAhBL,IACF/uW,EAAQqvW,kBAAmB,GAEzBL,GApFoC,EAACA,EAAUM,KACvD,MAAMC,EAAiB,oDACjBC,EAAoB,SACpB,WAAC5rW,EAAU,gBAAEqrW,GAAmBK,EAC/B3Q,EAAO+O,GAAQsB,EAAU,MAAM/pM,IACpC,MAAM3iK,EAAUitW,EAAe/mV,KAAKy8I,GACpC,GAAI3iK,EAAS,CACX,MAAM+vH,EAAO,CAAC,EACRo9O,EAAWntW,EAAQ,GACnBo9P,EAAWp9P,EAAQ,GAAG9B,QAAQ,UAAW,KACzCkvW,EAAaptW,EAAQ,GACrB3C,EAAQ2C,EAAQ,GAMtB,GALiB,MAAbmtW,IACFH,EAAcK,mBAAqBL,EAAcK,oBAAsB,GACvEL,EAAcK,mBAAmBnwW,KAAKkgQ,GACtCrtI,EAAKwjD,UAAW,GAED,MAAb45L,EAGF,cAFO7rW,EAAW87P,QAClBuvG,EAAgBr7U,OAAOm4F,GAAMk6D,QAAQgpL,EAAiBvvG,GAAW,GAsBnE,GAnBIgwG,IACiB,MAAfA,GACFJ,EAAcM,kBAAoBN,EAAcM,mBAAqB,GACrEN,EAAcM,kBAAkBpwW,KAAK,CACnCmE,KAAM+7P,EACN//P,UAEF0yH,EAAKnjH,aAAevP,GACI,MAAf+vW,GACTJ,EAAcO,iBAAmBP,EAAcO,kBAAoB,GACnEP,EAAcO,iBAAiBrwW,KAAK,CAClCmE,KAAM+7P,EACN//P,UAEF0yH,EAAKy9O,YAAcnwW,GACK,MAAf+vW,IACTr9O,EAAK09O,YAAchkP,GAAMs2L,QAAQ1iT,EAAO,OAGxC6vW,EAAkB5sW,KAAK88P,GAAW,CACpC,MAAMswG,EAAc39O,EACpBi9O,EAAcW,kBAAoBX,EAAcW,mBAAqB,GACrED,EAAYvsW,QAAUkqW,GAAgBjuG,GACtC4vG,EAAcW,kBAAkBzwW,KAAKwwW,EACvC,MACOpsW,EAAW87P,IACduvG,EAAgBzvW,KAAKkgQ,GAEvB97P,EAAW87P,GAAYrtI,CAE3B,IACA,EAgCI69O,CAAsClB,EAAUhvW,GAE9C8uW,IACF9uW,EAAQ8uW,WAAaD,GAEH,MAAhBA,EAAqB,CACvB,IAAIH,EAAchhP,SAGhB,MAAO,GAFPghP,EAAgBxhP,EAAS/iH,KAAKnK,EAIlC,CACA,MAAO,CAAC8uW,EAAa,CACjBnrW,KAAMkrW,EACN7uW,UACAmwW,UAAWrB,GACT,CACFnrW,KAAMkrW,EACN7uW,WAEN,CACE,MAAO,EACT,GACA,EAGEowW,GAAW,CAAC,EACZC,GAAYtkP,GAAMs2L,QAASiuD,GAASvkP,GAAMl/E,KAAM0jU,GAAWxkP,GAAMn3G,OAAQ47V,GAAYzkP,GAAM+yK,QAC3F2xE,GAAY,CAACvhW,EAAcwhW,EAAa,CAAC,KAC7C,MAAM/wW,EAAQ0wW,GAAUnhW,EAAc,IAAKmhW,GAAUnhW,EAAavO,cAAe,MACjF,OAAO4vW,GAAS5wW,EAAO+wW,EAAW,EAE9BC,GAA2B/uW,GAAU6uW,GAAU,oDAAqD7uW,EAAO0wL,wBAC3Gs+K,GAAoB,CAACjxW,EAAO6tB,KAChC,GAAI7tB,EAAO,CACT,MAAMirD,EAAS,CAAC,EAOhB,OANIwhE,EAASzsH,KACXA,EAAQ,CAAE,IAAKA,IAEjB2wW,GAAO3wW,GAAO,CAACA,EAAOJ,KACpBqrD,EAAOrrD,GAAOqrD,EAAOrrD,EAAIoB,eAA0B,QAAT6sB,EAAiB6iV,GAAU1wW,EAAO,QAAU6wW,GAAU7wW,EAAO,OAAO,IAEzGirD,CACT,CAEA,EAEIimT,GAAS,CAACr5L,EAAW,CAAC,KAC1B,IAAIrnK,EACJ,MAAMrJ,EAAW,CAAC,EACZ6uH,EAAW,CAAC,EAClB,IAAIm7O,EAAkB,GACtB,MAAMC,EAAoB,CAAC,EACrBC,EAAkB,CAAC,EACnBC,EAAoB,CAAC3qV,EAAQpX,EAAcwhW,KAC/C,MAAM/wW,EAAQ63K,EAASlxJ,GACvB,GAAK3mB,EAQH,OAAO0wW,GAAU1wW,EAAO,OAAQ0wW,GAAU1wW,EAAMgB,cAAe,SARrD,CACV,IAAI2hO,EAAW8tI,GAAS9pV,GAKxB,OAJKg8M,IACHA,EAAWmuI,GAAUvhW,EAAcwhW,GACnCN,GAAS9pV,GAAUg8M,GAEdA,CACT,CAEA,EAEI4uI,EAAwC,QAA1B/gW,EAAKqnK,EAAS51K,cAA2B,IAAPuO,EAAgBA,EAAK,QACrEghW,EAzYWrpW,KACjB,MAAMspW,EAAmBrD,GAAsBjmW,IACzC,gBAAComW,EAAe,YAAEC,GAAeH,GAAwBlmW,GACzDlG,EAAS,CAAC,EACV+F,EAAa,CAAChE,EAAMC,EAAY+xH,KACpC/zH,EAAO+B,GAAQ,CACbC,WAAYosH,GAAYpsH,EAAY4a,EAAS,CAAC,IAC9CywV,gBAAiBrrW,EACjB+xH,SAAU3F,GAAY2F,EAAUn3G,EAAS,CAAC,IAC3C,EAEGxiB,EAAM,CAAC2H,EAAMC,EAAa,GAAI+xH,EAAW,MAC7C,MAAM07O,EAAa3D,GAAQ/3O,GACrB1sF,EAAQykU,GAAQ/pW,GACtB,IAAI2tW,EAAKroU,EAAMp8B,OACf,MAAM0kW,EAAgB,IACjBH,KACA1D,GAAQ9pW,IAEb,KAAO0tW,KACL3pW,EAAWshC,EAAMqoU,GAAKC,EAAcxwW,QAASswW,EAC/C,EAEIG,EAAW,CAAC7tW,EAAMC,KACtB,MAAMqlC,EAAQykU,GAAQ/pW,GAChBquH,EAAQ07O,GAAQ9pW,GACtB,IAAI0tW,EAAKroU,EAAMp8B,OACf,KAAOykW,KAAM,CACX,MAAMG,EAAa7vW,EAAOqnC,EAAMqoU,IAChC,IAAK,IAAIhvV,EAAI,EAAG4Z,EAAI81F,EAAMnlH,OAAQyV,EAAI4Z,EAAG5Z,IACvCmvV,EAAW7tW,WAAWouH,EAAM1vG,IAAM,CAAC,EACnCmvV,EAAWxC,gBAAgBzvW,KAAKwyH,EAAM1vG,GAE1C,GAEW,iBAATxa,IAEF62V,EAAO+O,GADsB,+CACS/pW,IACpC3H,EAAI2H,EAAM,GAAIuqW,EAAgB,IAGhCvP,EAAO+O,GADmB,gCACS/pW,IACjC3H,EAAI2H,EAAM,GAAIwqW,EAAY,KAuK9B,OApKAnyW,EAAI,OAAQ,WAAY,aACxBA,EAAI,OAAQ,GAAI,sDAChBA,EAAI,wBACJA,EAAI,OAAQ,eACZA,EAAI,OAAQ,+CACZA,EAAI,OAAQ,mCACZA,EAAI,QAAS,qBACbA,EAAI,SAAU,gCACdA,EAAI,OAAQ,0LAAqMmyW,GACjNnyW,EAAI,SAAU,GAAImyW,GAClBnyW,EAAI,qBAAsB,GAAa,UAAT8L,EAAmBomW,EAAkBC,GACnEnyW,EAAI,0GAA2G,GAAIkyW,GACnHlyW,EAAI,aAAc,OAAQmyW,GAC1BnyW,EAAI,KAAM,sBAAuB,MACjCA,EAAI,KAAM,GAAI,MACdA,EAAI,KAAM,QAASmyW,GACnBnyW,EAAI,KAAM,GAAI,SACdA,EAAI,IAAK,sCAAgD,UAAT8L,EAAmBomW,EAAkBC,GACrFnyW,EAAI,IAAK,OAAQkyW,GACjBlyW,EAAI,UAAW,gBAAiBmyW,GAChCnyW,EAAI,MAAO,kDACXA,EAAI,SAAU,wBAAyBmyW,GACvCnyW,EAAI,QAAS,yBACbA,EAAI,SAAU,wDAAyD,CACrEmyW,EACA,SACA1uW,KAAK,MACPzD,EAAI,QAAS,cACbA,EAAI,MAAO,OAAQ,CACjBmyW,EACA,QACA1uW,KAAK,MACPzD,EAAI,OAAQ,wDACZA,EAAI,QAAS,SAAU,yCAAoD,UAAT8L,EAAmB,OAAS,KAC9F9L,EAAI,WAAY,OAAQ,OACxBA,EAAI,MAAO,QACXA,EAAI,oBAAqB,GAAI,MAC7BA,EAAI,KAAM,GAAI,SACdA,EAAI,KAAM,0BAA2BmyW,GACrCnyW,EAAI,KAAM,qCAAsCmyW,GAChDnyW,EAAI,OAAQ,2EAA4EmyW,GACxFnyW,EAAI,WAAY,qBAAsB,CACpCmyW,EACA,UACA1uW,KAAK,MACPzD,EAAI,QAAS,WAAYkyW,GACzBlyW,EAAI,QAAS,0NACbA,EAAI,SAAU,4FAAsG,UAAT8L,EAAmBqmW,EAAcD,GAC5IlyW,EAAI,SAAU,4CAA6C,mBAC3DA,EAAI,WAAY,iBAAkB,UAClCA,EAAI,SAAU,iCACdA,EAAI,WAAY,yEAChBA,EAAI,OAAQ,aAAc,CACxBmyW,EACA,MACA1uW,KAAK,MACPzD,EAAI,WAAY,GAAImyW,GACP,UAATrmW,IACF9L,EAAI,OACJA,EAAI,OAAQ,GAAI,CACdkyW,EACA,SACAzuW,KAAK,MACPzD,EAAI,aAAc,GAAImyW,GACtBnyW,EAAI,iBAAkB,GAAIkyW,GAC1BlyW,EAAI,UAAW,GAAI,CACjBkyW,EACA,qBACAzuW,KAAK,MACPzD,EAAI,SAAU,eAAgBmyW,GAC9BnyW,EAAI,OAAQ,QAASkyW,GACrBlyW,EAAI,QAAS,+FAAqG,CAChHmyW,EACA,gBACA1uW,KAAK,MACPzD,EAAI,QAAS,kFAAwF,CACnGmyW,EACA,gBACA1uW,KAAK,MACPzD,EAAI,UAAW,GAAI,cACnBA,EAAI,SAAU,+BACdA,EAAI,QAAS,kCACbA,EAAI,WAAY,GAAI,CAClBkyW,EACA,UACAzuW,KAAK,MACPzD,EAAI,+CAAgD,GAAImyW,GACxDnyW,EAAI,SAAU,GAAI,qBAClBA,EAAI,SAAU,GAAI,CAChBmyW,EACA,cACA1uW,KAAK,MACPzD,EAAI,OAAQ,WAAYkyW,GACxBlyW,EAAI,SAAU,OAAQmyW,GACtBnyW,EAAI,UAAW,uDACfA,EAAI,SAAU,gBAAiBkyW,GAC/BlyW,EAAI,WAAY,YAAakyW,GAC7BlyW,EAAI,QAAS,iCAAkCkyW,GAC/ClyW,EAAI,UAAW,OAAQ,CACrBmyW,EACA,WACA1uW,KAAK,MACPzD,EAAI,SAAU,kDACd2L,EAAW,MAAO,2GAA2GjF,MAAM,KAAM,KAE9H,iBAAToF,IACF0pW,EAAS,SAAU,sBACnBA,EAAS,QAAS,aAClBA,EAAS,SAAU,qFACnBA,EAAS,QAAS,4BAClBA,EAAS,QAAS,kBAClBA,EAAS,IAAK,iCACdA,EAAS,KAAM,SACfA,EAAS,SAAU,0EACnBA,EAAS,MAAO,4CAChBA,EAAS,SAAU,iEACnBA,EAAS,gBAAiB,mBAC1BA,EAAS,QAAS,gBAClBA,EAAS,UACTA,EAAS,YACTA,EAAS,yCAA0C,SACnDA,EAAS,KAAM,gBACfA,EAAS,KAAM,QACfA,EAAS,iBAAkB,WAC3BA,EAAS,MAAO,mBAChBA,EAAS,KAAM,4BACfA,EAAS,UAAW,UACpBA,EAAS,QAAS,mEAClBA,EAAS,MAAO,mCAChBA,EAAS,WAAY,mCACrBA,EAAS,QAAS,6BAClBA,EAAS,KAAM,qCACfA,EAAS,KAAM,8DACfA,EAAS,OAAQ,UACjBA,EAAS,KAAM,yEACfA,EAAS,QAAS,6BAClBA,EAAS,QAAS,6BAClBA,EAAS,OAAQ,UACjBA,EAAS,OAAQ,6CAEN,UAAT1pW,IACF0pW,EAAS,+BAAgC,aACzCA,EAAS,iBAAkB,eAC3BA,EAAS,IAAK,YACdA,EAAS,kBAAmB,eAC5BA,EAAS,MAAO,WAChBA,EAAS,SAAU,kEAER,UAAT1pW,GACF62V,EAAO,CACL/8V,EAAO8vW,MACP9vW,EAAO+vW,QACNjjU,WACMA,EAAKinF,SAASg8O,aACdjjU,EAAKinF,SAAS+7O,KAAK,IAG9B/S,EAAO+O,GAAQ,8BAA8B/pW,IACvC/B,EAAO+B,WACF/B,EAAO+B,GAAMgyH,SAAShyH,EAC/B,WAEK/B,EAAO8+J,QAAQ/qC,SAAS/jF,aACxBhwC,EAAOgwW,OACPhwW,CAAM,EAwLOiwW,CAAWX,IACF,IAAzB15L,EAASs6L,cACXt6L,EAASu6L,eAAiB,QAE5B,MAAMC,EAAcpB,GAAkBp5L,EAASy6L,cACzCC,EAAgBtB,GAAkBp5L,EAAS26L,eAAgB,OAC3DC,EAAexB,GAAkBp5L,EAAS66L,cAAe,OACzDC,EAAwBrB,EAAkB,sBAAuB,qEACjEsB,EAAyBtB,EAAkB,wBAAyB,mDACpEuB,EAAkBvB,EAAkB,gBAAiB,+FACrDwB,EAAcxB,EAAkB,qBAAsB,iJACtDyB,EAAmC,8CACnCC,EAAsB1B,EAAkB,qBAAsByB,EAAmC,4BAA6BF,GAC9HI,EAAoC3B,EAAkB,sCAAuCyB,EAAmC,SAAUF,GAC1IK,EAAW,oBACXC,EAAuB7B,EAAkB,sBAAuB4B,uHAChEE,EAAmB9B,EAAkB,iBAAkB,4KAAuL6B,GAC9OE,EAAwB/B,EAAkB,uBAAwB,4EAClEgC,EAAyBhC,EAAkB,uBAAwB,wBACnEiC,EAAuBjC,EAAkB,sBAAuB,OAAS4B,GAC/EvC,GAAO,6EAA6E5tW,MAAM,MAAMiB,IAC9FqtW,EAAgBrtW,GAAQ,IAAID,OAAO,KAAOC,EAAO,SAAU,KAAK,IAElE,MAAMwvW,EAAmBxE,IACvB,MAAMD,EAAgBxhP,EAASlwH,KAAK8J,EAAS,MACvC0oW,EAAoB,QAC1B7Q,EAAO8P,GAAwBC,EAAiC,OAAlBC,QAA4C,IAAlBA,EAA2BA,EAAgB,KAAK,EAAEhrW,OAAM3D,UAASmwW,gBAIvI,GAHIA,IACFrpW,EAASqpW,GAAanwW,GAEpBwvW,EAAkB5sW,KAAKe,GAAO,CAChC,MAAMyvW,EAAiBpzW,EACvBozW,EAAe3vW,QAAUkqW,GAAgBhqW,GACzCmtW,EAAgBtxW,KAAK4zW,EACvB,MACEtsW,EAASnD,GAAQ3D,CACnB,GACA,EAEEqzW,EAAmB1E,IACvBmC,EAAkB,GAClBnS,EAAOr/V,GAAKwH,IAAWnD,WACdmD,EAASnD,EAAK,IAEvBwvW,EAAiBxE,EAAc,EAE3B2E,EAAmB,CAAC3vW,EAAMwqL,KAC9B,IAAIh+K,EAAI+/I,SACDkgN,GAASmD,2BACTnD,GAASoD,eAChB,MAAMr1L,IAASgQ,EAAKslL,UAAW3hO,GAAQq8C,EAAKslL,SACtCC,EAAYvlL,EAAKslL,QASvB,GARA99O,EAAShyH,GAAQ+vW,EAAY/9O,EAAS+9O,GAAa,CAAC,EACpD3C,EAAkBptW,GAAsB,OAAd+vW,QAAoC,IAAdA,EAAuBA,EAAY/vW,EACnFgvW,EAAoBhvW,EAAKhD,eAAiB,CAAC,EAC3CgyW,EAAoBhvW,GAAQ,CAAC,EACxBw6K,IACH40L,EAAiBpvW,EAAKhD,eAAiB,CAAC,EACxCoyW,EAAiBpvW,GAAQ,CAAC,GAExB+vW,IAAc5sW,EAASnD,IAASmD,EAAS4sW,GAAY,CACvD,MAAMC,EAAa/F,GAAqB9mW,EAAS4sW,WAC1CC,EAAWtE,wBACXsE,EAAWvE,YAClBtoW,EAASnD,GAAQgwW,CACnB,MACE7sW,EAASnD,GAAQ,CACfsrW,gBAAiB,GACjBrrW,WAAY,CAAC,GAGjB,GAAI46V,EAAUrwK,EAAKvqL,YAAa,CAC9B,MAAMgwW,EAAkBjwW,IACtBgwW,EAAW1E,gBAAgBzvW,KAAKmE,GAChCgwW,EAAW/vW,WAAWD,GAAQ,CAAC,CAAC,EAE5BgwW,EAAuC,QAAzBxjW,EAAKrJ,EAASnD,UAA0B,IAAPwM,EAAgBA,EAAK,CAAC,SACpEwjW,EAAW/D,yBACX+D,EAAW9D,wBACX8D,EAAW1D,yBACX0D,EAAWhE,mBAClBgE,EAAW1E,gBAAkB,GAC7B0E,EAAW/vW,WAAa,CAAC,EACzB+6V,EAAOxwK,EAAKvqL,YAAY87P,IACtB,MAAMm0G,EAAc9F,GAAsBmD,GAC1C3C,GAAgB7uG,GAAU7yN,MAAK,EAAE2hU,SAAQ7qW,WACnC6qW,EACW,WAAT7qW,GACFg7V,EAAOkV,EAAaD,GAGtBA,EAAgBjwW,EAClB,GACA,IAEJmD,EAASnD,GAAQgwW,CACnB,CACA,GAAIrnP,EAAU6hE,EAAK2lL,UAAW,CAC5B,MAAMH,EAAuC,QAAzBzjN,EAAKppJ,EAASnD,UAA0B,IAAPusJ,EAAgBA,EAAK,CAAC,EAC3EyjN,EAAWxE,UAAYhhL,EAAK2lL,SAC5BhtW,EAASnD,GAAQgwW,CACnB,CACA,GAAInV,EAAUrwK,EAAKx4D,UAAW,CAC5B,MAAMo+O,EAAwB,CAAC,EACzBC,EAAkBrwW,IACtBowW,EAAsBpwW,GAAQ,CAAC,CAAC,EAE5BswW,EAAgBtwW,IACpB2qW,GAAkB4C,EAAYvtW,GAAMkpC,MAAK5D,IACvC01T,EAAO11T,EAAO+qU,EAAgB,GAC9B,EAEJrV,EAAOxwK,EAAKx4D,UAAUwC,IACpBo2O,GAAgBp2O,GAAOtrF,MAAK,EAAE2hU,SAAQ7qW,WAChC6qW,EACFyF,EAActwW,GAEdqwW,EAAgBrwW,EAClB,GACA,IAEJgyH,EAAShyH,GAAQowW,CACnB,CACIL,GACFxU,GAAOvpO,GAAU,CAAC31H,EAASk0W,KACrBl0W,EAAQ0zW,KACV/9O,EAASu+O,GAAWl0W,EAAUuwW,GAAS,CAAC,EAAG56O,EAASu+O,IACpDl0W,EAAQ2D,GAAQ3D,EAAQ0zW,GAC1B,GAEJ,EAEIS,EAA8BC,IAClCzV,EAznB6Bh/V,KAC/B,MAAM00W,EAAsB,aAC5B,OAAOzvK,GAAO8oK,GAAQ/tW,EAAO,MAAMslK,IACjC,MAAM3iK,EAAU+xW,EAAoB7rV,KAAKy8I,GACzC,OAAI3iK,EAIK,CAAC,CACJoxW,UAJ0B,MAAfpxW,EAAQ,GACI,OAAS,MAIhCqB,KAHSrB,EAAQ,KAMd,EACT,GACA,EA0mBOgyW,CAA4C,OAAnBF,QAA8C,IAAnBA,EAA4BA,EAAiB,KAAK,EAAEzwW,OAAM+vW,gBACnHJ,EAAiB3vW,EAAM,CAAE8vW,QAASC,GAAY,GAC9C,EAEEa,EAAoBH,IACpBhoU,EAASgoU,GACXlV,GAAOkV,GAAgB,CAACjmL,EAAMxqL,IAAS2vW,EAAiB3vW,EAAMwqL,KACrD/hE,EAASgoP,IAClBD,EAA4BC,EAC9B,EAEII,EAAmBC,IACvB9V,EA9T4Bh/V,KAC9B,MAAM+0W,EAAkB,+LACxB,OAAO9vK,GAAO8oK,GAAQ/tW,EAAO,MAAMslK,IACjC,MAAM3iK,EAAUoyW,EAAgBlsV,KAAKy8I,GACrC,GAAI3iK,EAAS,CACX,MAAMsd,EAAStd,EAAQ,GACjB2gJ,EAAYrjI,EAdEA,IAAqB,MAAXA,EAAiB,SAAW,MAc/B+0V,CAAkB/0V,GAAU,UAGvD,MAAO,CAAC,CACJqjI,YACAt/I,KAJSrB,EAAQ,GAKjBmyW,cAJkB7vK,GAAO8oK,GAAQprW,EAAQ,GAAI,MAAMsyW,GAAcrG,GAAgBqG,GAAYnmP,aAMnG,CACE,MAAO,EACT,GACA,EA6SOomP,CAA0C,OAAlBJ,QAA4C,IAAlBA,EAA2BA,EAAgB,KAAK,EAAExxN,YAAWt/I,OAAM8wW,oBAC1H,MAAM/tT,EAAuB,YAAdu8F,EAA0B,CAAE,WAAY,CAAC,GAAMttB,EAAShyH,GACjEqwW,EAAkBrwW,IACJ,WAAds/I,SACKv8F,EAAO/iD,GAEd+iD,EAAO/iD,GAAQ,CAAC,CAClB,EAOFg7V,EAAO8V,GAAe,EAAEjG,SAAQ7qW,WAC1B6qW,EANgB7qW,KACpB2qW,GAAkB4C,EAAYvtW,GAAMkpC,MAAK5D,IACvC01T,EAAO11T,EAAO+qU,EAAgB,GAC9B,EAIAC,CAActwW,GAEdqwW,EAAgBrwW,EAClB,IAEFgyH,EAAShyH,GAAQ+iD,CAAM,GACvB,EAEEouT,EAAiBnxW,IACrB,MAAM3D,EAAU8G,EAASnD,GACzB,GAAI3D,EACF,OAAOA,EAET,IAAIsiB,EAAIwuV,EAAgBjkW,OACxB,KAAOyV,KAAK,CACV,MAAM8wV,EAAiBtC,EAAgBxuV,GACvC,GAAI8wV,EAAe3vW,QAAQb,KAAKe,GAC9B,OAAOyvW,CAEX,CACgB,EA4EZ2B,EAAiBv2V,EAASwzV,GAC1BgD,EAAmBx2V,EAAS0zV,GAC5B+C,EAAkBz2V,EAAS4zV,GAC3B8C,EAAe12V,EAASi0V,GACxBv/K,EAAmB10K,EAASu0V,GAC5BzgL,EAAuB9zK,EAASs0V,GAChC5rL,EAAwB1oK,EAASw0V,GACjCvgL,EAAkBj0K,EAASjiB,OAAOq4P,KAAK49G,IACvC2C,EAAyB32V,EAAS+zV,GAClChzK,EAAsB/gL,EAASm0V,GAC/ByC,EAAoC52V,EAASo0V,GAC7C9M,EAAwBtnV,EAAS8zV,GACjC1K,EAAyBppV,EAASy0V,GAClCoC,EAAuB72V,EAAS00V,GAChCoC,GAAqB92V,EAASjiB,OAAOq4P,KAAKo8G,IAK1C5uP,GAAU,CAACz+G,EAAM0uH,KACrB,MAAM4yC,EAAO6vM,EAAenxW,GAC5B,GAAIshK,EAAM,CACR,IAAI5yC,EAcF,OAAO,EAdC,CACR,GAAI4yC,EAAKrhK,WAAWyuH,GAClB,OAAO,EAET,MAAMkjP,EAAetwM,EAAKgrM,kBAC1B,GAAIsF,EAAc,CAChB,IAAIjzV,EAAIizV,EAAa1oW,OACrB,KAAOyV,KACL,GAAIizV,EAAajzV,GAAG7e,QAAQb,KAAKyvH,GAC/B,OAAO,CAGb,CACF,CAGF,CACA,OAAO,CAAK,EAERyf,GAAUnuI,GAAQuhM,GAAMhS,IAAoBvvL,GAC5C04L,GAAW14L,IAAS42C,GAAW52C,EAAM,MAAQy+G,GAAQz+G,KAAUmuI,GAAQnuI,GAEvE6xW,GAAoBh3V,EAASuyV,GAEnC,OAvHOv5L,EAASu6L,gBAkCZsB,EAAiB77L,EAASu6L,gBAC1BzB,GAAOa,GAAa,CAACnxW,EAAS2D,KAC5BgyH,EAAShyH,GAAQ3D,EAAQ21H,QAAQ,MAnCnC26O,GAAOa,GAAa,CAACnxW,EAAS2D,KAC5BmD,EAASnD,GAAQ,CACfC,WAAY5D,EAAQ4D,WACpBqrW,gBAAiBjvW,EAAQivW,iBAE3Bt5O,EAAShyH,GAAQ3D,EAAQ21H,QAAQ,IAEnC26O,GAAO5C,GAAQ,kBAAkBh/T,IAC/B,MAAMiE,EAAQ+6T,GAAQh/T,EAAM,KAC5B5nC,EAAS6rC,EAAM,IAAIm8T,WAAan8T,EAAM,EAAE,IAE1C29T,GAAO0C,GAAuB,CAACtwO,EAAM/+H,KAC/BmD,EAASnD,KACP6zK,EAASi+L,mCACX3uW,EAASnD,GAAM+xW,kBAAmB,GAEpC5uW,EAASnD,GAAMyrW,aAAc,EAC/B,IAEFkB,GAAO5C,GAAQ,mCAAmC/pW,IAC5CmD,EAASnD,KACXmD,EAASnD,GAAMyrW,aAAc,EAC/B,IAEFkB,GAAO5C,GAAQ,iEAAiE/pW,IAC1EmD,EAASnD,KACXmD,EAASnD,GAAMwrW,WAAY,EAC7B,IAEFmB,GAAO5C,GAAQ,SAAS/pW,IACtBmD,EAASnD,GAAM0rW,kBAAmB,CAAI,YAQnCvoW,EAAS+vP,IAChB09G,EAAkB/8L,EAASm+L,iBAC3BnB,EAAiBh9L,EAASo+L,gBAC1BzC,EAAiB37L,EAASq+L,yBAC1BrB,EAAiB,yBACjBlE,GAAO,CACLwF,GAAI,KACJC,GAAI,KACJniL,GAAI,QACJ9mD,GAAI,KACJkpO,GAAI,KACJ/0N,GAAI,oBACJkb,MAAO,QACPF,MAAO,QACPg6M,MAAO,QACP5yV,OAAQ,WACRwL,KAAM,MACNqnV,MAAO,uBACN,CAAC7hP,EAAS3lF,KACP5nC,EAAS4nC,KACX5nC,EAAS4nC,GAAMynU,gBAAkBzI,GAAQr5O,GAC3C,IAEEmjD,EAAS4+L,kBACX9F,GAAOE,GAAUh5L,EAAS4+L,mBAAmB1nU,IACvC5nC,EAAS4nC,WACJ5nC,EAAS4nC,EAClB,IAGComU,EAAe,SAClB3B,EAAiB,0BAiDd,CACLrrW,KAAMopW,EACNv7O,WACA7uH,WACAiuW,iBACAE,kBACA/hL,mBACA8hL,mBACAviL,kBACAH,uBACApL,wBACAguL,eACAJ,iBACAK,yBACA51K,sBACA61K,oCACAtP,wBACA8B,yBACA0N,sBACAv/K,aAlDmB,CAACpyL,EAAMw0H,KAC1B,MAAMzxE,EAASivE,EAAShyH,EAAK1C,eAC7B,SAAUylD,IAAUA,EAAOyxE,EAAMl3H,eAAe,EAiDhDmhH,WACA0vB,WACAuqD,YACAg6K,UA1BgB1yW,GAAQuhM,GAAMmwK,IAAwB1xW,IAAS04L,GAAS14L,GA2BxE6xW,qBACArC,mBACAE,mBACAkB,oBACAC,mBACD,EAIG5gG,GAAetrP,GAAOs0J,GAAct0J,EAAK,KAAK3nB,cAC9CyzQ,GAAQ3yL,IACZ,MAAMn5D,EAAMm5D,EAAU1+E,SAAS,IAC/B,OAAuB,IAAfulB,EAAIzb,OAAe,IAAMyb,EAAMA,GAAK3nB,aAAa,EAErD0zQ,GAAWC,GANC30Q,KAAS,CAAGA,MAAOi0Q,GAAaj0Q,KAQzCg0Q,CADOS,GAAME,EAAWC,KAAOH,GAAME,EAAWE,OAASJ,GAAME,EAAWG,OAI7EE,GAAW,iEACXC,GAAY,iGAOZS,GAAmB,CAACd,EAAKC,EAAOC,EAAMn3O,IANzB,EAACi3O,EAAKC,EAAOC,EAAMn3O,KAAU,CAC9Ci3O,MACAC,QACAC,OACAn3O,UAOOg3O,CAJGtyP,SAASuyP,EAAK,IACdvyP,SAASwyP,EAAO,IAChBxyP,SAASyyP,EAAM,IACf9yP,WAAW2b,IAWjBg4O,GAAaC,IACjB,MAAMC,EAAWb,GAASnsP,KAAK+sP,GAC/B,GAAiB,OAAbC,EACF,OAAOtoJ,EAAS/iH,KAAKkrQ,GAAiBG,EAAS,GAAIA,EAAS,GAAIA,EAAS,GAAI,MAE/E,MAAMC,EAAYb,GAAUpsP,KAAK+sP,GACjC,OAAkB,OAAdE,EACKvoJ,EAAS/iH,KAAKkrQ,GAAiBI,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAErFvoJ,EAASE,MAAM,EAElBrqH,GAAW2yQ,GAAQ,QAASA,EAAKnB,OAASmB,EAAKlB,SAAWkB,EAAKjB,QAAUiB,EAAKp4O,SAE9Eg5U,GAAkBvvV,GAASuuP,GAAWvuP,GAAO3oB,IAAIi2Q,IAAUj2Q,KAAI+9B,GAAK,IAAMA,EAAEx8B,QAAOouH,MAAMhnG,GAEzFwvV,GAAS,CAAC/+L,EAAW,CAAC,EAAG51K,KAC7B,MAAM40W,EAAiB,+HACjBC,EAAc,2BACdC,EAAkB,OAClBC,EAAiB,CAAC,EACxB,IAAI3E,EACAE,EACJ,MAAM0E,EAAgB5T,GAClBphW,IACFowW,EAAcpwW,EAAOmzW,iBACrB7C,EAAgBtwW,EAAOozW,oBAEzB,MAAM6B,EAAgB,8BAAyCn0W,MAAM,KACrE,IAAK,IAAI4f,EAAI,EAAGA,EAAIu0V,EAAchqW,OAAQyV,IACxCq0V,EAAeE,EAAcv0V,IAAMs0V,EAAgBt0V,EACnDq0V,EAAeC,EAAgBt0V,GAAKu0V,EAAcv0V,GAEpD,MAAMviB,EAAO,CACXmF,MAAOi0H,IACL,MAAMvuE,EAAS,CAAC,EAChB,IAAIksT,GAAY,EAChB,MAAMC,EAAev/L,EAASw/L,cACxBC,EAAoBz/L,EAAS0/L,qBAAuBn3W,EACpDo3W,EAAW,CAACv3V,EAAQ2F,EAAQ6xV,KAChC,MAAMvlV,EAAM+4B,EAAOhrC,EAAS,OAAS2F,GACrC,IAAKsM,EACH,OAEF,MAAM10B,EAAQytD,EAAOhrC,EAAS,SAAW2F,GACzC,IAAKpoB,EACH,OAEF,MAAMk+C,EAASuP,EAAOhrC,EAAS,UAAY2F,GAC3C,IAAK81B,EACH,OAEF,MAAMn+C,EAAO0tD,EAAOhrC,EAAS,QAAU2F,GACvC,IAAKroB,EACH,OAEF,MAAMiuD,EAAM,CACVt5B,EACA10B,EACAk+C,EACAn+C,GAEF,IAAIolB,EAAI6oC,EAAIt+C,OAAS,EACrB,KAAOyV,KACD6oC,EAAI7oC,KAAO6oC,EAAI7oC,EAAI,KAIrBA,GAAK,GAAK80V,IAGdxsT,EAAOhrC,EAAS2F,IAAiB,IAAPjD,EAAW6oC,EAAI,GAAKA,EAAI1rD,KAAK,YAChDmrD,EAAOhrC,EAAS,OAAS2F,UACzBqlC,EAAOhrC,EAAS,SAAW2F,UAC3BqlC,EAAOhrC,EAAS,UAAY2F,UAC5BqlC,EAAOhrC,EAAS,QAAU2F,GAAO,EAEpC8xV,EAAc93W,IAClB,MAAMI,EAAQirD,EAAOrrD,GACrB,IAAKI,EACH,OAEF,MAAM1B,EAAS0B,EAAMy6B,QAAQ,MAAQ,EAAI,CAACz6B,GAASA,EAAM+C,MAAM,KAC/D,IAAI4f,EAAIrkB,EAAO4O,OACf,KAAOyV,KACL,GAAIrkB,EAAOqkB,KAAOrkB,EAAO,GACvB,OAAO,EAIX,OADA2sD,EAAOrrD,GAAOtB,EAAO,IACd,CAAI,EAiBP6pL,EAAS3lK,IACb20V,GAAY,EACLH,EAAex0V,IAElBqrV,EAAS,CAACrrV,EAAKm1V,KACfR,IACF30V,EAAMA,EAAI3hB,QAAQ,gBAAgB2hB,GACzBw0V,EAAex0V,MAGrBm1V,IACHn1V,EAAMA,EAAI3hB,QAAQ,gBAAiB,OAE9B2hB,GAEHo1V,EAA0BC,GACvBt4V,OAAOgjL,aAAalgL,SAASw1V,EAAOz2W,MAAM,GAAI,KAEjD02W,EAAqB93W,GAClBA,EAAMa,QAAQ,gBAAiB+2W,GAElCG,EAAa,CAACl1W,EAAOg0B,EAAKmhV,EAAMC,EAAMz1V,EAAK01V,KAE/C,GADA11V,EAAMA,GAAO01V,EAGX,MAAO,KADP11V,EAAMqrV,EAAOrrV,IACI3hB,QAAQ,MAAO,OAAS,IAG3C,GADAg2B,EAAMg3U,EAAOh3U,GAAOmhV,GAAQC,GAAQ,KAC/BpgM,EAASiR,kBAAmB,CAC/B,MAAMw0E,EAAYzmO,EAAIh2B,QAAQ,aAAc,IAC5C,GAAI,oBAAoBoC,KAAKq6P,GAC3B,MAAO,GAET,IAAKzlF,EAASkR,qBAAuB,oBAAoB9lL,KAAKq6P,GAC5D,MAAO,EAEX,CAIA,OAHI85G,IACFvgV,EAAMugV,EAAar6W,KAAKu6W,EAAmBzgV,EAAK,UAE3C,QAAUA,EAAIh2B,QAAQ,MAAO,OAAS,IAAI,EAEnD,GAAI24H,EAAK,CAKP,IAAI72H,EACJ,IAJA62H,GADAA,EAAMA,EAAI34H,QAAQ,mBAAoB,KAC5BA,QAAQ,oBAAqBsnL,GAAQtnL,QAAQ,0BAA0B2hB,GACxEA,EAAI3hB,QAAQ,QAASsnL,KAGvBxlL,EAAUm0W,EAAYjuV,KAAK2wG,IAAM,CACtCs9O,EAAYjgR,UAAYl0F,EAAQjF,MAAQiF,EAAQ,GAAGuK,OACnD,IAAIlJ,EAAOrB,EAAQ,GAAG9B,QAAQk2W,EAAiB,IAAIz1W,cAC/CtB,EAAQ2C,EAAQ,GAAG9B,QAAQk2W,EAAiB,IAChD,GAAI/yW,GAAQhE,EAAO,CAGjB,GAFAgE,EAAO8zW,EAAmB9zW,GAC1BhE,EAAQ83W,EAAmB93W,IACU,IAAjCgE,EAAKy2B,QAAQw8U,KAAgD,IAAvBjzW,EAAKy2B,QAAQ,KACrD,SAEF,IAAKo9I,EAASiR,oBAA+B,aAAT9kL,GAAuB,4BAA4Bf,KAAKjD,IAC1F,SAEW,gBAATgE,GAAoC,QAAVhE,EAC5BA,EAAQ,OACU,UAATgE,GAA6B,qBAATA,IAC7BhE,EAAQA,EAAMsB,eAEc,SApLnB62W,EAoLQn4W,EAnLzBg1Q,GAAS/xQ,KAAKk1W,GACT,MACEljG,GAAUhyQ,KAAKk1W,GACjB,OAEF,UA+KKxiG,GAAW31Q,GAAOktC,MAAK6oO,IACrB/1Q,EAAQ22W,GAAgBvzW,GAAS2yQ,IAAOz0Q,aAAa,IAGzDtB,EAAQA,EAAMa,QAAQg2W,EAAgBkB,GACtC9sT,EAAOjnD,GAAQmzW,EAAYtJ,EAAO7tW,GAAO,GAAQA,CACnD,CACF,CACAw3W,EAAS,SAAU,IAAI,GACvBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,UAAW,IACpBA,EAAS,SAAU,IA/FFl3W,EAgGP,SAhGkBiW,EAgGQ,eAhGLyF,EAgGqB,eA/F/C07V,EADoB9yW,EAgGL,iBA5Ff8yW,EAAYnhW,IAGZmhW,EAAY17V,KAGjBivC,EAAO3qD,GAAU2qD,EAAOrmD,GAAK,IAAMqmD,EAAO10C,GAAK,IAAM00C,EAAOjvC,UACrDivC,EAAOrmD,UACPqmD,EAAO10C,UACP00C,EAAOjvC,IAoFQ,gBAAlBivC,EAAOlyB,eACFkyB,EAAOlyB,OAEe,SAA3BkyB,EAAO,wBACFA,EAAO,eAElB,CAvGkB,IAAC3qD,EAAQsE,EAAG2R,EAAGyF,EAnGhBm8V,EA2MjB,OAAOltT,CAAM,EAEf8xF,UAAW,CAAC9xF,EAAQikT,KAClB,IAAI11O,EAAM,GACV,MAAM4+O,EAAkB,CAACC,EAAUC,KACjC,MAAMC,EAAYD,EAAeD,GACjC,GAAIE,EACF,IAAK,IAAI51V,EAAI,EAAG4Z,EAAIg8U,EAAUrrW,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAChD,MAAM3e,EAAOu0W,EAAU51V,GACjB3iB,EAAQirD,EAAOjnD,GACjBhE,IACFw5H,IAAQA,EAAItsH,OAAS,EAAI,IAAM,IAAMlJ,EAAO,KAAOhE,EAAQ,IAE/D,CACF,EAuBF,OAVIkvW,GAAemD,GACjB+F,EAAgB,IAAK/F,GACrB+F,EAAgBlJ,EAAamD,IAE7B9S,GAAOt0S,GAAQ,CAACjrD,EAAOgE,KACjBhE,GAhBQ,EAACgE,EAAMq0W,KACrB,IAAK9F,IAAkB8F,EACrB,OAAO,EAET,IAAIG,EAAWjG,EAAc,KAC7B,QAAIiG,IAAYA,EAASx0W,MAGzBw0W,EAAWjG,EAAc8F,KAChBG,GAAYA,EAASx0W,IAAM,EAOrBy+G,CAAQz+G,EAAMkrW,KACzB11O,IAAQA,EAAItsH,OAAS,EAAI,IAAM,IAAMlJ,EAAO,KAAOhE,EAAQ,IAC7D,IAGGw5H,CAAG,GAGd,OAAOp5H,CAAI,EAGPq4W,GAAa,CACjBC,aAAa,EACbC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EACjBC,eAAe,EACfC,aAAa,GAITC,GAAmBz8W,GAASqwH,EAAWrwH,EAAM0D,iBAF7B1D,IAASA,aAAiB4/B,OAAShb,EAAW5kB,EAAM08W,WAEJC,CAAc38W,GAC9E48W,GAAU,CAACC,EAAe5pW,KAC9B,MAAMjT,EAAiB,OAATiT,QAA0B,IAATA,EAAkBA,EAAO,CAAC,EACzD,IAAK,MAAM1L,KAAQs1W,EACZ/zK,GAAMkzK,GAAYz0W,KACrBvH,EAAMuH,GAAQs1W,EAAct1W,IAYhC,OATI6oH,EAAcysP,EAAcnmM,gBAC9B12K,EAAM02K,aAAe,IAAMmmM,EAAcnmM,gBAEvCtmD,EAAcysP,EAAcC,oBAC9B98W,EAAM88W,iBAAmBC,GAAUF,EAAcC,iBAAiBC,IAEhE3sP,EAAcysP,EAAcG,mBAC9Bh9W,EAAMg9W,gBAAkB,IAAMH,EAAcG,mBAEvCh9W,CAAK,EAERi9W,GAAc,CAACvxW,EAAMmxW,EAAeK,EAAgBjqW,KACxD,IAAIc,EACJ,MAAM/T,EAAQ48W,GAAQC,EAAe5pW,GA8BrC,OA7BAjT,EAAM0L,KAAOA,EACT2kH,EAAWrwH,EAAM6D,UACnB7D,EAAM6D,OAAqC,QAA3BkQ,EAAK/T,EAAMm9W,kBAA+B,IAAPppW,EAAgBA,EAAKmpW,GAEtET,GAAiBI,KACnB78W,EAAM0D,eAAiB,KACrB1D,EAAMo9W,kBAAmB,EACzBp9W,EAAMm0L,mBAAqBtjE,EACvBjsG,EAAWi4V,EAAcn5W,iBAC3Bm5W,EAAcn5W,gBAChB,EAEF1D,EAAMwD,gBAAkB,KACtBxD,EAAMq9W,cAAe,EACrBr9W,EAAM+jV,qBAAuBlzN,EACzBjsG,EAAWi4V,EAAcr5W,kBAC3Bq5W,EAAcr5W,iBAChB,EAEFxD,EAAME,yBAA2B,KAC/BF,EAAMs9W,8BAAgCzsP,EACtC7wH,EAAMwD,iBAAiB,EA5CCxD,IAASA,EAAMm0L,qBAAuBtjE,GAAU7wH,EAAMm0L,qBAAuBvjE,EA8ClG2sP,CAAsBv9W,KACzBA,EAAMm0L,oBAAgD,IAA3Bn0L,EAAMo9W,iBAA4BvsP,EAASD,EACtE5wH,EAAM+jV,sBAA8C,IAAvB/jV,EAAMq9W,aAAwBxsP,EAASD,EACpE5wH,EAAMs9W,8BAAgC1sP,IAGnC5wH,CAAK,EAIRw9W,GAAe,+BACfC,GAAW,CAAC55W,EAAQ0D,EAAM2D,EAAU8tN,KACxCn1N,EAAOtE,iBAAiBgI,EAAM2D,EAAU8tN,IAAW,EAAM,EAErD0kJ,GAAc,CAAC75W,EAAQ0D,EAAM2D,EAAU8tN,KAC3Cn1N,EAAOpE,oBAAoB8H,EAAM2D,EAAU8tN,IAAW,EAAM,EAGxD2kJ,GAAM,CAACd,EAAe5pW,KAC1B,MAAMjT,EAAQi9W,GAAYJ,EAAcnxW,KAAMmxW,EAAe34W,SAAU+O,GACvE,GAHmBjT,IAASowH,EAAcpwH,IAAUw9W,GAAah3W,KAAKxG,EAAM0L,MAGxEkyW,CAAaf,IAAkB1sP,EAAY0sP,EAAcpkC,SAAWtoN,EAAY0sP,EAAcvtT,SAAU,CAC1G,MAAMuuT,EAAW79W,EAAM6D,OAAOuqD,eAAiBlqD,SACzC42H,EAAM+iP,EAASxgW,gBACf3G,EAAOmnW,EAASnnW,KAChBg9Q,EAAa1zR,EACnB0zR,EAAW+kD,MAAQokC,EAAcvtT,SAAWwrE,GAAOA,EAAIwP,YAAc5zH,GAAQA,EAAK4zH,YAAc,IAAMxP,GAAOA,EAAI2P,YAAc/zH,GAAQA,EAAK+zH,YAAc,GAC1JipJ,EAAWglD,MAAQmkC,EAActtT,SAAWurE,GAAOA,EAAIsP,WAAa1zH,GAAQA,EAAK0zH,WAAa,IAAMtP,GAAOA,EAAI0P,WAAa9zH,GAAQA,EAAK8zH,WAAa,EACxJ,CACA,OAAOxqI,CAAK,EAER89W,GAAc,CAAC5zO,EAAKh/H,EAAU6yW,KAClC,MAAMjjP,EAAMoP,EAAIhmI,SAAUlE,EAAQ,CAAE0L,KAAM,SAC1C,GAAIqyW,EAAWC,UAEb,YADA9yW,EAASlL,GAGX,MAGMi+W,EAAe,KACnBP,GAAYxzO,EAAK,mBAAoB+zO,GACrCP,GAAYxzO,EAAK,OAAQ+zO,GACpBF,EAAWC,YACdD,EAAWC,WAAY,EACvB9yW,EAASlL,IAEXkqI,EAAM,IAAI,EATgB,aAAnBpP,EAAI56G,YAAgD,gBAAnB46G,EAAI56G,YAAgC46G,EAAIpkH,KAYhFunW,IAEAR,GAASvzO,EAAK,mBAAoB+zO,GAE/BF,EAAWC,WACdP,GAASvzO,EAAK,OAAQ+zO,EACxB,EAEF,MAAMC,GACJ,WAAAn/W,GACEI,KAAK6+W,WAAY,EACjB7+W,KAAKs9C,OAAS,CAAC,EACft9C,KAAK+3C,MAAQ,EACb/3C,KAAKg/W,QArDkB,cAqDe,IAAI14V,MAAQ9e,SAAS,IAC3DxH,KAAKi/W,WAAa,cAAel6W,SAASmZ,gBAC1Cle,KAAK+3C,MAAQ,CACf,CACA,IAAAoyB,CAAKzlE,EAAQgpC,EAAO3hC,EAAUf,GAC5B,MAAMxG,EAAOxE,KACb,IAAIk/W,EACJ,MAAMn0O,EAAMjmI,OACNq6W,EAAuBrsL,IAC3BtuL,EAAK46W,gBAAgBZ,GAAI1rL,GAAO/nD,EAAIlqI,OAAQk0B,EAAG,EAEjD,IAAKrwB,GAAUwkW,GAASxkW,IAAWqxH,GAAUrxH,GAC3C,OAAOqH,EAET,IAAIgpB,EACCrwB,EAAOF,EAAKw6W,SAKfjqV,EAAKrwB,EAAOF,EAAKw6W,UAJjBjqV,EAAKvwB,EAAKuzC,QACVrzC,EAAOF,EAAKw6W,SAAWjqV,EACvBvwB,EAAK84C,OAAOvoB,GAAM,CAAC,GAIrB/pB,EAAQA,GAAStG,EACjB,MAAM26W,EAAY3xU,EAAMvmC,MAAM,KAC9B,IAAI4f,EAAIs4V,EAAU/tW,OAClB,KAAOyV,KAAK,CACV,IAAI3e,EAAOi3W,EAAUt4V,GACjBu4V,EAAgBH,EAChBtlJ,GAAU,EACV0lJ,GAAW,EACF,qBAATn3W,IACFA,EAAO,SAEL5D,EAAKq6W,WAAsB,UAATz2W,GAA0C,aAAtB1D,EAAOqc,WAC/ChV,EAAS5K,KAAK6J,EAAOwzW,GAAI,CAAEjyW,KAAMnE,MAG9B5D,EAAKy6W,YAAwB,YAAT72W,GAA+B,aAATA,IAC7CyxN,GAAU,EACV0lJ,EAAoB,YAATn3W,EAAqB,QAAU,OAC1Ck3W,EAAgBxsL,IACd,MAAMjyL,EAAQ29W,GAAI1rL,GAAO/nD,EAAIlqI,OAC7BA,EAAM0L,KAAsB,UAAf1L,EAAM0L,KAAmB,UAAY,WAClD/H,EAAK46W,gBAAgBv+W,EAAOk0B,EAAG,GAGnCmqV,EAAe16W,EAAK84C,OAAOvoB,GAAI3sB,GAC1B82W,EAcU,UAAT92W,GAAoB5D,EAAKq6W,UAC3B9yW,EAASyyW,GAAI,CAAEjyW,KAAMnE,KAErB82W,EAAaj7W,KAAK,CAChBi2B,KAAMnuB,EACNf,WAlBJxG,EAAK84C,OAAOvoB,GAAI3sB,GAAQ82W,EAAe,CAAC,CACpChlV,KAAMnuB,EACNf,UAEJk0W,EAAaK,SAAWA,EACxBL,EAAarlJ,QAAUA,EACvBqlJ,EAAaI,cAAgBA,EAChB,UAATl3W,EACFu2W,GAAYj6W,EAAQ46W,EAAe96W,GAEnC85W,GAAS55W,EAAQ66W,GAAYn3W,EAAMk3W,EAAezlJ,IAYxD,CAEA,OADAn1N,EAASw6W,EAAe,KACjBnzW,CACT,CACA,MAAA8rK,CAAOnzK,EAAQgpC,EAAO3hC,GACpB,IAAKrH,GAAUwkW,GAASxkW,IAAWqxH,GAAUrxH,GAC3C,OAAO1E,KAET,MAAM+0B,EAAKrwB,EAAO1E,KAAKg/W,SACvB,GAAIjqV,EAAI,CACN,IAAIyqV,EAAWx/W,KAAKs9C,OAAOvoB,GAC3B,GAAI2Y,EAAO,CACT,MAAM2xU,EAAY3xU,EAAMvmC,MAAM,KAC9B,IAAI4f,EAAIs4V,EAAU/tW,OAClB,KAAOyV,KAAK,CACV,MAAM3e,EAAOi3W,EAAUt4V,GACjBm4V,EAAeM,EAASp3W,GAC9B,GAAI82W,EAAc,CAChB,GAAInzW,EAAU,CACZ,IAAI+2F,EAAKo8Q,EAAa5tW,OACtB,KAAOwxF,KACL,GAAIo8Q,EAAap8Q,GAAI5oE,OAASnuB,EAAU,CACtC,MAAMuzW,EAAgBJ,EAAaI,cAC7BC,EAAWL,EAAaK,SAAU1lJ,EAAUqlJ,EAAarlJ,QACzD4lJ,EAAkBP,EAAa15W,MAAM,EAAGs9F,GAAIhgG,OAAOo8W,EAAa15W,MAAMs9F,EAAK,IACjF28Q,EAAgBH,cAAgBA,EAChCG,EAAgBF,SAAWA,EAC3BE,EAAgB5lJ,QAAUA,EAC1B2lJ,EAASp3W,GAAQq3W,CACnB,CAEJ,CACK1zW,GAAoC,IAAxBmzW,EAAa5tW,gBACrBkuW,EAASp3W,GAChBm2W,GAAY75W,EAAQw6W,EAAaK,UAAYn3W,EAAM82W,EAAaI,cAAeJ,EAAarlJ,SAEhG,CACF,CACF,MACE8pI,GAAO6b,GAAU,CAACN,EAAc92W,KAC9Bm2W,GAAY75W,EAAQw6W,EAAaK,UAAYn3W,EAAM82W,EAAaI,cAAeJ,EAAarlJ,QAAQ,IAEtG2lJ,EAAW,CAAC,EAEd,IAAK,MAAMp3W,KAAQo3W,EACjB,GAAI71K,GAAM61K,EAAUp3W,GAClB,OAAOpI,YAGJA,KAAKs9C,OAAOvoB,GACnB,WACSrwB,EAAO1E,KAAKg/W,QACrB,CAAE,MAAO9wN,GACPxpJ,EAAO1E,KAAKg/W,SAAW,IACzB,CACF,CACA,OAAOh/W,IACT,CACA,IAAA0/W,CAAKh7W,EAAQ0D,EAAM6Q,GACjB,OAAOjZ,KAAKokB,SAAS1f,EAAQ0D,EAAM6Q,EACrC,CACA,QAAAmL,CAAS1f,EAAQ0D,EAAM6Q,GACrB,IAAKvU,GAAUwkW,GAASxkW,IAAWqxH,GAAUrxH,GAC3C,OAAO1E,KAET,MAAMa,EAAQ29W,GAAI,CAChBjyW,KAAMnE,EACN1D,UACCuU,GACH,EAAG,CACD,MAAM8b,EAAKrwB,EAAO1E,KAAKg/W,SACnBjqV,GACF/0B,KAAKo/W,gBAAgBv+W,EAAOk0B,GAE9BrwB,EAASA,EAAOi5B,YAAcj5B,EAAOuqD,eAAiBvqD,EAAOwqD,aAAexqD,EAAOi7W,YACrF,OAASj7W,IAAW7D,EAAM+jV,wBAC1B,OAAO5kV,IACT,CACA,KAAAszI,CAAM5uI,GACJ,IAAKA,GAAUwkW,GAASxkW,IAAWqxH,GAAUrxH,GAC3C,OAAO1E,KAQT,GANI0E,EAAO1E,KAAKg/W,UACdh/W,KAAK63K,OAAOnzK,GAETA,EAAOkuB,uBACVluB,EAASA,EAAOK,UAEdL,GAAUA,EAAOkuB,qBAAsB,CACzC5yB,KAAK63K,OAAOnzK,GACZ,MAAM01H,EAAW11H,EAAOkuB,qBAAqB,KAC7C,IAAI7L,EAAIqzG,EAAS9oH,OACjB,KAAOyV,MACLriB,EAAS01H,EAASrzG,IACP/mB,KAAKg/W,UACdh/W,KAAK63K,OAAOnzK,EAGlB,CACA,OAAO1E,IACT,CACA,OAAAuyB,GACEvyB,KAAKs9C,OAAS,CAAC,CACjB,CACA,MAAAoa,CAAOruD,GAKL,OAJIA,IACFA,EAAE9E,iBACF8E,EAAEtI,6BAEG,CACT,CACA,eAAAq+W,CAAgBtsL,EAAK/9J,GACnB,MAAM+7B,EAAY9wD,KAAKs9C,OAAOvoB,GACxBmqV,EAAepuT,GAAaA,EAAUgiI,EAAIvmL,MAChD,GAAI2yW,EACF,IAAK,IAAIn4V,EAAI,EAAG4Z,EAAIu+U,EAAa5tW,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CACnD,MAAMhb,EAAWmzW,EAAan4V,GAI9B,GAHIhb,IAAwD,IAA5CA,EAASmuB,KAAK/4B,KAAK4K,EAASf,MAAO8nL,IACjDA,EAAIvuL,iBAEFuuL,EAAIqrL,gCACN,MAEJ,CAEJ,EAEFY,GAAWt+U,MAAQ,IAAIs+U,GAEvB,MAAMa,GAASpvP,GAAMl/E,KACfi6I,GAAO/6D,GAAM+6D,KACbs0L,GAAoB,iBACpBC,GAAkBtvP,GAAMs2L,QAAQ,2EAA4E,KAC5Gi5D,GAAqB,CAACjhP,EAAK12H,EAAMhE,KACjC8sH,EAAW9sH,IAAoB,KAAVA,EACvB+hW,GAASrnO,EAAK12H,GAEd89V,GAAMpnO,EAAK12H,EAAMhE,EACnB,EAEI47W,GAAqB53W,GAAQA,EAAKnD,QAAQ,UAAUwb,GAAK,IAAMA,EAAE/a,gBACjEu6W,GAAgB,CAAChzW,EAAMymG,KAC3B,IAAInzB,EAAM,EACV,GAAItzE,EACF,IAAK,IAAIizW,EAAejzW,EAAKM,SAAU+3S,EAAWr4S,EAAKisH,gBAAiBosL,EAAUA,EAAWA,EAASpsL,gBAAiB,CACrH,MAAM3rH,EAAW+3S,EAAS/3S,WACtBmmG,IAAcw1P,GAAS5jD,IACrB/3S,IAAa2yW,GAAiB56D,EAASxxS,KAAKxC,UAIlDivE,IACA2/R,EAAe3yW,EACjB,CAEF,OAAOgzE,CAAG,EAEN4/R,GAA0B,CAAC9wT,EAAQyvE,KACvC,MAAM/qH,EAAW2xH,GAAM5G,EAAK,SACtB16H,EAAQirD,EAAO8xF,UAAU9xF,EAAO1lD,MAAMoK,GAAW3L,GAAK02H,IAC5DihP,GAAmBjhP,EAAK+gP,GAAmBz7W,EAAM,EAS7Cg8W,GAAe,CAACC,EAAMC,EAASC,KACnC,MAAMC,EAAiBR,GAAmBM,GACtCpvP,EAAWqvP,IAA0B,KAAbA,EAC1BviP,GAASqiP,EAAMG,GAEfjqP,GAAM8pP,EAAMG,EAZa,EAACD,EAAUD,IAClC32V,EAAS42V,GACJ52K,GAAMm2K,GAAiBQ,GAAWC,EAAW,GAAKA,EAAW,KAE7DA,EAQqBE,CAAqBF,EAAUC,GAC7D,EA2CIE,GAAW,CAAC/kP,EAAKsgD,EAAW,CAAC,KACjC,MAAM0kM,EAAc,CAAC,EACf51O,EAAMjmI,OACNu+R,EAAQ,CAAC,EACf,IAAIu9E,EAAU,EACd,MAEMriD,EAAmBmxC,GAASC,WAAW34O,GAAaS,QAAQkE,GAAM,CACtEqzO,eAAgB/yL,EAAS+yL,eACzBC,eAAgBhzL,EAASgzL,iBAErB4R,EAAc,GACdx6W,EAAS41K,EAAS51K,OAAS41K,EAAS51K,OAASivW,GAAO,CAAC,GACrDjmT,EAAS2rT,GAAO,CACpBS,cAAex/L,EAASw/L,cACxBE,oBAAqB1/L,EAAS0/L,qBAC7B1/L,EAAS51K,QACNi3C,EAAS2+H,EAAS6kM,UAAY,IAAI/B,GAAeA,GAAWt+U,MAC5D+2U,EAAmBnxW,EAAOsxL,mBAQ1Bh0L,EAAMm7H,GAAOA,GAAOnD,GAAO9K,EAASiO,GAAOnD,EAAI59F,eAAe+gG,GAAOA,EACrEz5C,EAAOy5C,IACX,MAAM16H,EAAQT,EAAIm7H,GAClB,OAAO7N,EAAc7sH,GAAS4yH,GAAaS,QAAQrzH,GAAS,IAAI,EAE5Dq0I,EAAY,CAAC3Z,EAAK12H,EAAM24W,EAAa,MACzC,IAAI38W,EACJ,MAAMi8W,EAAOh7R,EAAKy5C,GAClB,GAAI7N,EAAcovP,IAASva,GAAYua,GAAO,CAC5C,MAAM95R,EAAOy6R,EAAU54W,GAErBhE,EADEmiF,GAAQA,EAAK5iF,IACP4iF,EAAK5iF,IAAI08W,EAAKzqP,IAAKxtH,GAEnBs9H,GAAM26O,EAAMj4W,EAExB,CACA,OAAO6oH,EAAc7sH,GAASA,EAAQ28W,CAAU,EAE5CE,EAAaniP,IACjB,MAAM7xH,EAAOtJ,EAAIm7H,GACjB,OAAO5N,EAAWjkH,GAAQ,GAAKA,EAAK5E,UAAU,EAE1Cg/L,EAAY,CAACvoE,EAAK12H,EAAMhE,KAC5By5G,EAAIihB,GAAKz1H,IACP,GAAIs/V,GAAYt/V,GAAI,CAClB,MAAMg3W,EAAOrpP,GAAaS,QAAQpuH,GAC5B4mC,EAAgB,KAAV7rC,EAAe,KAAOA,EAC5B88W,EAAgBx7O,GAAM26O,EAAMj4W,GAC5Bm+E,EAAOy6R,EAAU54W,GACnBm+E,GAAQA,EAAK1iF,IACf0iF,EAAK1iF,IAAIw8W,EAAKzqP,IAAK3lF,EAAK7nC,GAExB23W,GAAmBM,EAAMj4W,EAAM6nC,GAE7BixU,IAAkBjxU,GAAOgsI,EAASklM,aACpCllM,EAASklM,YAAY,CACnBC,QAASf,EAAKzqP,IACduuI,SAAU/7P,EACVg8P,UAAWn0N,GAGjB,IACA,EAKEonJ,EAAU,IAAMpb,EAASolM,cAAgB1lP,EAAIpkH,KAU7C+pW,EAAW,CAACxiP,EAAK2tL,IAAY2sB,GAAOz9M,EAAIpkH,KAAM5T,EAAIm7H,GAAM2tL,GAqBxDv6P,EAAW,CAAC4sE,EAAK12H,EAAMo/K,KAC3B,MAAM64L,EAAO18W,EAAIm7H,GAt2EA7xH,MAu2EjB,IAAIikH,EAAWmvP,KAAUrqP,GAAcqqP,IAv2Ed1X,GAAR17V,EAu2E6CozW,IAv2EM,+BAAtBpzW,EAAK+1P,cA02EnD,OAAIx7E,EACK/4C,GAAMzX,GAAaS,QAAQ4oP,GAAOL,GAAmB53W,KAG/C,WADbA,EAAOA,EAAKnD,QAAQ,UAAU,CAAC+D,EAAG2R,IAAMA,EAAEvV,mBAExCgD,EAAO,YAEFi4W,EAAKttV,MAAQstV,EAAKttV,MAAM3qB,QAAQvC,EACzC,EAEI07W,EAAUziP,IACd,MAAMuhP,EAAO18W,EAAIm7H,GACjB,IAAKuhP,EACH,MAAO,CACLj+U,EAAG,EACHxB,EAAG,GAGP,IAAIwB,EAAI8vB,EAASmuT,EAAM,SACnBz/U,EAAIsxB,EAASmuT,EAAM,UAOvB,OANKj+U,IAA0B,IAArBA,EAAEvD,QAAQ,QAClBuD,EAAI,KAEDxB,IAA0B,IAArBA,EAAE/B,QAAQ,QAClB+B,EAAI,KAEC,CACLwB,EAAG3b,SAAS2b,EAAG,KAAOi+U,EAAKtvV,aAAesvV,EAAKnvT,YAC/CtwB,EAAGna,SAASma,EAAG,KAAOy/U,EAAK71O,cAAgB61O,EAAKlvT,aACjD,EAaGorE,EAAK,CAACuC,EAAK/wH,KACf,IAAK+wH,EACH,OAAO,EAET,MAAMm7D,EAAOgpK,EAAUnkO,GAAOA,EAAM,CAACA,GACrC,OAAOxM,EAAO2nE,GAAM5wL,GACXqvH,GAAK1B,GAAaS,QAAQpuH,GAAI0E,IACrC,EAEEg3K,EAAa,CAACjmD,EAAK/wH,EAAUgvC,EAAMykU,KACvC,MAAM18V,EAAS,GACf,IAAI7X,EAAOtJ,EAAIm7H,GACf0iP,OAAsB37W,IAAZ27W,EACV,MAAMC,EAAe1kU,IAAgC,SAAvBs6I,IAAUxhE,SAAsBwhE,IAAU15J,WAAa,MACrF,GAAIkzF,EAAS9iH,GACX,GAAiB,MAAbA,EACFA,EAAW46V,OACN,CACL,MAAM+Y,EAAc3zW,EACpBA,EAAWd,GAAQsvH,EAAGtvH,EAAMy0W,EAC9B,CAEF,KAAOz0W,KACDA,IAASw0W,GAAgBvwP,EAAWjkH,EAAKM,WAAa87V,GAAap8V,IAASmpH,GAAmBnpH,KADxF,CAIX,IAAKc,GAAYA,EAASd,GAAO,CAC/B,IAAIu0W,EAGF,MAAO,CAACv0W,GAFR6X,EAAO7gB,KAAKgJ,EAIhB,CACAA,EAAOA,EAAK0wB,UACd,CACA,OAAO6jV,EAAU18V,EAAS,IAAI,EAM1B68V,EAAW,CAAC10W,EAAMc,EAAU3F,KAChC,IAAI8xB,EAAOnsB,EACX,GAAId,EAAM,CACJ4jH,EAAS9iH,KACXmsB,EAAOjtB,GACEsvH,EAAGtvH,EAAMc,IAGpB,IAAK,IAAIu3S,EAAWr4S,EAAK7E,GAAOk9S,EAAUA,EAAWA,EAASl9S,GAC5D,GAAIqd,EAAWyU,IAASA,EAAKorR,GAC3B,OAAOA,CAGb,CACA,OAAO,IAAI,EAUPznM,EAAM,SAAUihB,EAAK5kG,EAAMlvB,GAC/B,MAAMlB,EAAoB,OAAVkB,QAA4B,IAAVA,EAAmBA,EAAQhL,KAC7D,GAAIijW,EAAUnkO,GAAM,CAClB,MAAMh6G,EAAS,GAOf,OANA86V,GAAO9gP,GAAK,CAACz1H,EAAG0d,KACd,MAAM9Z,EAAOtJ,EAAI0F,GACb4D,GACF6X,EAAO7gB,KAAKi2B,EAAK/4B,KAAK2I,EAASmD,EAAM8Z,GACvC,IAEKjC,CACT,CAAO,CACL,MAAM7X,EAAOtJ,EAAIm7H,GACjB,QAAQ7xH,GAAeitB,EAAK/4B,KAAK2I,EAASmD,EAC5C,CACF,EACMw/K,EAAa,CAAC3tD,EAAKrI,KACvB5Y,EAAIihB,GAAKuhP,IACP1c,GAAOltO,GAAO,CAACryH,EAAOgE,KACpBi/L,EAAUg5K,EAAMj4W,EAAMhE,EAAM,GAC5B,GACF,EAEEw9W,EAAU,CAAC9iP,EAAK5H,KACpBrZ,EAAIihB,GAAKz1H,IACP,MAAMg3W,EAAOrpP,GAAaS,QAAQpuH,GAClCq0H,GAAM2iP,EAAMnpP,EAAK,GACjB,EAEEz2H,EAAM,CAACssW,EAAW3kW,EAAMquH,EAAOS,EAAMz8G,IAAWojG,EAAIkvP,GAAWA,IACnE,MAAMhjF,EAASl5J,EAASzoH,GAAQuzH,EAAI7+F,cAAc10B,GAAQA,EAW1D,OAVI6oH,EAAcwF,IAChBg2D,EAAWs9F,EAAQtzJ,GAEjBS,KACGrG,EAASqG,IAASA,EAAK3pH,SAC1Bw8Q,EAAO3sP,YAAY85F,GACVrG,EAASqG,IAClB0qP,EAAQ73F,EAAQ7yJ,IAGZz8G,EAAyCsvQ,EAAhCgjF,EAAU3vU,YAAY2sP,EAAgB,IAEnDtvQ,EAAS,CAACrS,EAAMquH,EAAOS,IAASz2H,EAAIk7H,EAAI7+F,cAAc10B,GAAOA,EAAMquH,EAAOS,GAAM,GAEhFq1D,EAASmlL,GAASthF,aA4BlBz4N,EAAS,CAAC1qD,EAAM40W,IACbhkQ,EAAI5wG,GAAMoT,IACf,MAAMyhW,EAAQ9qP,GAAaS,QAAQp3G,GAWnC,OAVIwhW,GACFze,EAAOjnO,GAAW2lP,IAAQllP,IACpBmpO,GAASnpO,IAA+B,IAArBA,EAAMhH,IAAItkH,OAC/BusM,GAASjhF,GAETrD,GAASuoP,EAAOllP,EAClB,IAGJihF,GAASikK,GACFA,EAAMlsP,GAAG,IA6CdyuH,EAAc,CAACvlH,EAAK+tD,EAAKxF,KAC7BxpE,EAAIihB,GAAKz1H,IACP,GAAIs/V,GAAYt/V,GAAI,CAClB,MAAMg3W,EAAOrpP,GAAaS,QAAQpuH,GAC5BwU,EAAUgvK,EAAI1lL,MAAM,KAC1Bi8V,EAAOvlV,GAASuC,IACd,GAAI6wG,EAAco2D,GAAQ,EACbA,EAAQnR,GAAQh8C,IACxBmmP,EAAMjgW,EACX,MACE0hQ,GAASu+F,EAAMjgW,EACjB,GAEJ,IACA,EAsDEnb,EAAU,CAAC8kR,EAAQg4F,EAAQF,IAAiBhkQ,EAAIkkQ,GAAQjjP,IAC5D,IAAIlqH,EACJ,MAAM2tO,EAAW0gH,EAAU8e,GAAUh4F,EAAOxvJ,WAAU,GAAQwvJ,EAO9D,OANI83F,GACFjC,GAAOr0L,GAAKzsD,EAAIzH,aAAapqH,IAC3Bs1O,EAASnlN,YAAYnwB,EAAK,IAGJ,QAAzB2H,EAAKkqH,EAAInhG,kBAA+B,IAAP/oB,GAAyBA,EAAGotW,aAAaz/H,EAAUzjH,GAC9EA,CAAG,IA8CN+7B,EAAY,IAAMl/B,EAAIgrC,cA2BtBx8F,EAAO,CAACzlE,EAAQ0D,EAAM8xB,EAAMlvB,KAChC,GAAIi4V,EAAUv+V,GAAS,CACrB,IAAIqiB,EAAIriB,EAAO4M,OACf,MAAM2wW,EAAK,GACX,KAAOl7V,KACLk7V,EAAGl7V,GAAKojD,EAAKzlE,EAAOqiB,GAAI3e,EAAM8xB,EAAMlvB,GAEtC,OAAOi3W,CACT,CASE,OARIhmM,EAASulM,SAAY98W,IAAWi3H,GAAOj3H,IAAWqmI,GACpD81O,EAAY58W,KAAK,CACfS,EACA0D,EACA8xB,EACAlvB,IAGGsyC,EAAO6sB,KAAKzlE,EAAQ0D,EAAM8xB,EAAMlvB,GAASxG,EAClD,EAEIqzK,EAAS,CAACnzK,EAAQ0D,EAAM8xB,KAC5B,GAAI+oU,EAAUv+V,GAAS,CACrB,IAAIqiB,EAAIriB,EAAO4M,OACf,MAAM2wW,EAAK,GACX,KAAOl7V,KACLk7V,EAAGl7V,GAAK8wJ,EAAOnzK,EAAOqiB,GAAI3e,EAAM8xB,GAElC,OAAO+nV,CACT,CACE,GAAIpB,EAAYvvW,OAAS,IAAM5M,IAAWi3H,GAAOj3H,IAAWqmI,GAAM,CAChE,IAAIhkH,EAAI85V,EAAYvvW,OACpB,KAAOyV,KAAK,CACV,MAAOm7V,EAAaC,EAAWC,GAAavB,EAAY95V,GACpDriB,IAAWw9W,GAAiB95W,GAAQA,IAAS+5W,GAAgBjoV,GAAQA,IAASkoV,GAChF9kU,EAAOu6H,OAAOqqM,EAAaC,EAAWC,EAE1C,CACF,CACA,OAAO9kU,EAAOu6H,OAAOnzK,EAAQ0D,EAAM8xB,EACrC,EAIIsnK,EAAqBv0L,IACzB,GAAIA,GAAQ+oH,GAAc/oH,GAAO,CAC/B,MAAMgrI,EAAkBhrI,EAAK3D,aAAa,4BAC1C,OAAI2uI,GAAuC,YAApBA,EACdA,EAEuB,YAAzBhrI,EAAKgrI,gBAAgChrI,EAAKgrI,gBAAkB,IACrE,CACE,OAAO,IACT,EAsCIzzI,EAAO,CACXm3H,MACAsgD,WACAlxC,MACAs4J,QACAg/E,SA3kBc,EA4kBdC,UA3kBe,EA4kBf/jD,mBACAsiD,cACAxxT,SACAhpD,SACAi3C,SACAi5F,QApkBctpI,GACV4jH,EAAS5jH,GACJ08L,GAAM6tK,EAAkBvqW,GAExB07V,GAAY17V,KAAU08L,GAAM6tK,EAAkBvqW,EAAK4oH,WAAaw3O,GAAmBhnW,EAAQ4G,IAikBpG8vC,KAAM,KACNxO,MAnhBY,CAACthC,EAAMwtH,IACZxtH,EAAKstH,UAAUE,GAmhBtB48D,UACAkrL,YAjhBkBC,IAClB,MAAMxwK,EAAKgyB,GAAUw+I,GACrB,MAAO,CACLx2V,EAAGgmL,EAAGhmL,EACNJ,EAAGomL,EAAGpmL,EACNwW,EAAG4vK,EAAGlhL,MACN8P,EAAGoxK,EAAGz7K,OACP,EA2gBDy0I,QAhdclsC,IACd,MAAMuhP,EAAO18W,EAAIm7H,GACXxvE,EAAMgyT,EAASjB,GACf9+W,EAAOggX,EAAQlB,GACrB,MAAO,CACLr0V,EAAGsjC,EAAItjC,EACPJ,EAAG0jC,EAAI1jC,EACPwW,EAAG7gC,EAAK6gC,EACRxB,EAAGr/B,EAAKq/B,EACT,EAwcD2gV,UACAnrO,UAlagB,CAACnpI,EAAMc,EAAUgvC,KACjC,MAAM+7E,EAAUisD,EAAW93K,EAAMc,EAAUgvC,GAAM,GACjD,OAAO+7E,GAAWA,EAAQxnH,OAAS,EAAIwnH,EAAQ,GAAK,IAAI,EAiaxDisD,WAAYA,EACZphL,MACA4wO,QAjZc,CAACtnO,EAAMc,IAAa4zW,EAAS10W,EAAMc,EAAU,eAkZ3D00W,QAjZc,CAACx1W,EAAMc,IAAa4zW,EAAS10W,EAAMc,EAAU,mBAkZ3DxE,OAhZa,CAACwE,EAAU/C,KACxB,IAAI4J,EAAI+/I,EACR,MAAM71B,EAA0F,QAAnF61B,EAA2B,QAArB//I,EAAKjR,EAAIqH,UAA2B,IAAP4J,EAAgBA,EAAKqnK,EAASolM,oBAAiC,IAAP1sN,EAAgBA,EAAKh5B,EAC7H,OAJ2Bl2G,EAIPq5G,EAJuB7wH,kBAIhBxM,GAAKq9H,EAAI7wH,iBAAiBF,IAAa,EAAE,EA8YpEwuH,KACA97H,MACAga,SACA6xK,WAjWiB,CAAClkL,EAAMquH,EAAOS,EAAO,MACtC,IAAIwrP,EAAU,IAAMt6W,EACpB,IAAK,MAAMpE,KAAOyyH,EACZyR,GAAkBzR,EAAOzyH,KAC3B0+W,GAAW,IAAM1+W,EAAM,KAAOuoL,EAAO91D,EAAMzyH,IAAQ,KAGvD,OAAIsgW,GAAUptO,IAASyyE,GAAMtjM,EAAO6wL,kBAAmB9uL,GAC9Cs6W,EAAU,MAEVA,EAAU,IAAMxrP,EAAO,KAAO9uH,EAAO,GAC9C,EAuVAyvL,eArVqB3gE,IACrB,MAAMpmE,EAAY6qE,EAAI7+F,cAAc,OAC9B6lV,EAAOhnP,EAAI4/D,yBAKjB,IAAItuL,EACJ,IALA01W,EAAKvlV,YAAY0zB,GACbomE,IACFpmE,EAAUp+B,UAAYwkG,GAGjBjqH,EAAO6jD,EAAU+oE,YACtB8oP,EAAKvlV,YAAYnwB,GAGnB,OADA01W,EAAK/kV,YAAYkzB,GACV6xT,CAAI,EA0UXhrT,SACA+7B,SAthBe,CAACorC,EAAK12H,EAAMhE,KAC3By5G,EAAIihB,GAAKz1H,IACP,MAAMg3W,EAAOrpP,GAAaS,QAAQpuH,GAClC+2W,GAAaC,EAAMj4W,EAAMhE,GACrB63K,EAAS2mM,eACXzC,GAAwB9wT,EAAQgxT,EAClC,GACA,EAghBFnuT,SAAUA,EACVo2H,UA/gBgB,CAACxpD,EAAK+jP,KACtBhlQ,EAAIihB,GAAKz1H,IACP,MAAMg3W,EAAOrpP,GAAaS,QAAQpuH,GAClCs6V,GAAOkf,GAAW,CAACpiW,EAAGJ,KACpB+/V,GAAaC,EAAMhgW,EAAGI,EAAE,IAEtBw7J,EAAS2mM,eACXzC,GAAwB9wT,EAAQgxT,EAClC,GACA,EAugBFyC,iBA5TuBz5W,GAAKw0G,EAAIx0G,GAAGA,IACnC,MAAMotH,EAAQptH,EAAEhB,WAChB,IAAK,IAAI0e,EAAI0vG,EAAMnlH,OAAS,EAAGyV,GAAK,EAAGA,IACrC1d,EAAE05W,oBAAoBtsP,EAAMtjF,KAAKpsB,GACnC,IAyTAsgL,YACA5a,aACAh0C,YACA2gM,OAAQkoC,EACRv5D,WA3TiB5yK,GAAW9lF,EAAO1lD,MAAMwrI,GA4TzC6tO,eA3TqB,CAACH,EAAWz6W,IAASinD,EAAO8xF,UAAU0hO,EAAWz6W,GA4TtE8sD,SA3TeigF,IACf,GAAI3wI,IAASk8W,GAASvoL,KAAOx8D,IAAQ52H,SAAU,CAC7C,GAAI47W,EAAYxrO,GACd,OAEFwrO,EAAYxrO,IAAW,CACzB,CACA,IAAI8tO,EAAWtnP,EAAI59F,eAAe,oBAClC,IAAKklV,EAAU,CACbA,EAAWtnP,EAAI7+F,cAAc,SAC7BmmV,EAASluV,GAAK,mBACdkuV,EAAS12W,KAAO,WAChB,MAAM4U,EAAOw6G,EAAIx6G,KACbA,EAAK04G,WACP14G,EAAKq4G,aAAaypP,EAAU9hW,EAAK04G,YAEjC14G,EAAKic,YAAY6lV,EAErB,CACIA,EAASC,WACXD,EAASC,WAAW/tO,SAAWA,EAE/B8tO,EAAS7lV,YAAYu+F,EAAInE,eAAe2d,GAC1C,EAqSAguO,QAnSc/T,IACTA,IACHA,EAAO,IAEThM,EAAOgM,EAAKjoW,MAAM,MAAM8zB,IACtBooQ,EAAMpoQ,IAAO,EACbsjS,EAAiBt9S,KAAKga,GAAKmoV,MAAM1yU,EAAK,GACtC,EA6RF2yI,SA3Qe,CAACvkD,EAAK+tD,KACrBw3D,EAAYvlH,EAAK+tD,GAAK,EAAK,EA2Q3B0gJ,YAzQkB,CAACzuM,EAAK+tD,KACxBw3D,EAAYvlH,EAAK+tD,GAAK,EAAM,EAyQ5Bw2L,SAvQe,CAACvkP,EAAK+tD,KACrB,MAAMwzL,EAAOh7R,EAAKy5C,GACZjhH,EAAUgvK,EAAI1lL,MAAM,KAC1B,OAAO8pH,EAAcovP,IAAS9tP,GAAO10G,GAASuC,GAAKlU,GAAIm0W,EAAMjgW,IAAG,EAqQhEikO,cACA7kM,KApQWs/E,IACXjhB,EAAIihB,GAAKz1H,GAAK20H,GAAShH,GAAaS,QAAQpuH,GAAI,YAAW,EAoQ3Ds2C,KAlQWm/E,IACXjhB,EAAIihB,GAAKz1H,GAAKktH,GAAMS,GAAaS,QAAQpuH,GAAI,UAAW,SAAQ,EAkQhE2/U,SAhQelqN,IACf,MAAMuhP,EAAOh7R,EAAKy5C,GAClB,OAAO7N,EAAcovP,IAASxoP,GAAKmgB,GAAOqoO,EAAM,WAAY,OAAO,EA+PnEiD,SA7Pej/V,IAAYA,GAAS,QAAmBu8V,IA8PvDgB,UACA2B,aA9PmBzkP,IACnB,MAAMuhP,EAAOh7R,EAAKy5C,GAClB,OAAI7N,EAAcovP,GACT1X,GAAY0X,EAAKzqP,KAAOyqP,EAAKzqP,IAAIwvI,UAv5F7B3gQ,KACf,MAAMqsD,EAAYkmE,GAAaM,QAAQ,OACjC/oF,EAAQyoF,GAAaS,QAAQhzH,EAAQmxH,IAAI2E,WAAU,IAEzD,OADAb,GAAS5oE,EAAWviB,GACbolG,GAAM7iF,EAAU,EAm5FiCm0E,CAASo7O,GAEtD,EACT,EAyPAmD,aAvPmB,CAAC1kP,EAAK5H,KACzBrZ,EAAIihB,GAAKuhP,IACH1X,GAAY0X,KACdA,EAAKj7G,UAAYluI,EACnB,GACA,EAmPF+6O,OA7XaP,GAASO,OA8XtB1lL,SACAmM,YAnPkB,CAACzrL,EAAMywG,KACzB,MAAM+lQ,EAAgB9/W,EAAI+5G,GAC1B,OAAOG,EAAI5wG,GAAMA,IACf,MAAMk+C,EAA2B,OAAlBs4T,QAA4C,IAAlBA,OAA2B,EAASA,EAAc9lV,WACrFw7F,EAAgC,OAAlBsqP,QAA4C,IAAlBA,OAA2B,EAASA,EAActqP,YAQhG,OAPIhuE,IACEguE,EACFhuE,EAAOquE,aAAavsH,EAAMksH,GAE1BhuE,EAAO/tB,YAAYnwB,IAGhBA,CAAI,GACX,EAuOFhI,UACAq9L,OA3Na,CAACxjE,EAAK12H,KACnB,GAAI02H,EAAIjJ,WAAaztH,EAAKhD,cAAe,CACvC,MAAM2kR,EAAStvQ,EAAOrS,GAKtB,OAJAw3W,GAAOqB,EAAWniP,IAAM4kP,IACtBr8K,EAAU0iF,EAAQ25F,EAAS7tP,SAAU4iB,EAAU3Z,EAAK4kP,EAAS7tP,UAAU,IAEzE5wH,EAAQ8kR,EAAQjrJ,GAAK,GACdirJ,CACT,CACE,OAAOjrJ,CACT,EAkNA6kP,mBAhNyB,CAAC36W,EAAG2R,KAC7B,IAAImxN,EAAK9iO,EACT,KAAO8iO,GAAI,CACT,IAAI83I,EAAKjpW,EACT,KAAOipW,GAAM93I,IAAO83I,GAClBA,EAAKA,EAAGjmV,WAEV,GAAImuM,IAAO83I,EACT,MAEF93I,EAAKA,EAAGnuM,UACV,CACA,OAAKmuM,GAAM9iO,EAAEimD,cACJjmD,EAAEimD,cAAc/wC,gBAEhB4tN,CACT,EAiMAjuH,MACAojQ,aACAz8M,QAjMc,CAACv3J,EAAM1B,EAAUnE,KAC/B,GAAIue,EAAcpa,GAAW,CAC3B,MAAMq/V,EAAY39V,IAChB,MAAM7E,EAAO6E,EAAK4oH,SAASnwH,cAC3B,OAAO+d,QAAQlY,EAASnD,GAAM,EAEhC,OAAO4iW,GAAY3kW,EAAQ4G,EAAM,IAC5B7F,EACHwjW,aAEJ,CACE,OAAOI,GAAY3kW,EAAQ4G,EAAM7F,EACnC,EAsLAyzJ,YACA4lC,UAAWw/K,GACX94W,MArLY,CAAC4lW,EAAWC,EAAU6W,KAClC,IACI5W,EACAC,EAFAh5T,EAAQ2mH,IAGZ,GAAIkyM,GAAaC,GAAYD,EAAUpvU,YAAcqvU,EAASrvU,WAAY,CACxE,MAAMA,EAAaovU,EAAUpvU,WAgB7B,OAfAuW,EAAM+mH,SAASt9H,EAAYsiV,GAAclT,IACzC74T,EAAMgnH,OAAO8xM,EAASrvU,WAAYsiV,GAAcjT,IAChDC,EAAiB/4T,EAAMukJ,kBACvBvkJ,EAAQ2mH,IACR3mH,EAAM+mH,SAAS+xM,EAASrvU,WAAYsiV,GAAcjT,GAAY,GAC9D94T,EAAMgnH,OAAOv9H,EAAYsiV,GAAclT,GAAa,GACpDG,EAAgBh5T,EAAMukJ,kBACtB96J,EAAW67F,aAAa+2O,GAAS/rW,EAAMyoW,EAAgB5mW,GAAS0mW,GAC5D8W,EACFlmV,EAAW67F,aAAaqqP,EAAgB9W,GAExCpvU,EAAW67F,aAAawzO,EAAUD,GAEpCpvU,EAAW67F,aAAa+2O,GAAS/rW,EAAM0oW,EAAe7mW,GAAS0mW,GAC/Dp1S,EAAOo1S,GACA8W,GAAkB7W,CAC3B,CAEA,EA8JA7iS,KAAMA,EACN0tG,OAAQA,EACR6nM,KApHW,CAACh7W,EAAQ0D,EAAM0qL,IAAQx1I,EAAOl5B,SAAS1f,EAAQ0D,EAAM0qL,GAqHhE1uK,SAtHe,CAAC1f,EAAQ0D,EAAM0qL,IAAQx1I,EAAOl5B,SAAS1f,EAAQ0D,EAAM0qL,GAuHpE0O,qBACAsiL,yBA3G+B72W,IAC/B,MAAM8vC,EAAOs6I,IACb,IAAIhQ,EAAQ,KACZ,IAAK,IAAIi+H,EAAWr4S,EAAMq4S,GAAYA,IAAavoQ,IACjDsqI,EAAQma,EAAmB8jH,GACb,OAAVj+H,GAFmDi+H,EAAWA,EAAS3nR,YAM7E,OAAO0pJ,CAAK,EAmGZ7yB,WAjGiBvnJ,IACjB,GAAIgkH,EAAchkH,GAAO,CACvB,MAAMjC,EAAQ29V,GAAY17V,GAAQA,EAAOA,EAAK8L,cAC9C,OAAOk4G,EAAcjmH,IAAUgrH,GAAchrH,IAAUg8V,GAAahwO,GAAaS,QAAQzsH,GAC3F,CACE,OAAO,CACT,EA4FAunB,QA1Fc,KACd,GAAIsuV,EAAYvvW,OAAS,EAAG,CAC1B,IAAIyV,EAAI85V,EAAYvvW,OACpB,KAAOyV,KAAK,CACV,MAAOm7V,EAAaC,EAAWC,GAAavB,EAAY95V,GACxDu2B,EAAOu6H,OAAOqqM,EAAaC,EAAWC,EACxC,CACF,CACAze,GAAOtgE,GAAO,CAACn+R,EAAG+1B,KAChBsjS,EAAiBj9S,OAAO2Z,UACjBooQ,EAAMpoQ,EAAI,GACjB,EAgFFupJ,UA9EgB,CAACv3K,EAAMk+C,IAChBl+C,IAASk+C,GAAUA,EAAOpgD,SAASkC,GA8E1C82W,QA5Ecv1V,GAAK,mBAAqBA,EAAEq5I,eAAehyC,SAAW,kBAAoBrnG,EAAEs5I,YAAc,mBAAqBt5I,EAAEu5I,aAAalyC,SAAW,gBAAkBrnG,EAAEw5I,WA8EvKg5M,EAjsBe,EAAC3xT,EAAQ4sH,EAAU38I,KACxC,MAAM0kV,EAAa/nM,EAASgoM,YACtBC,EAAc,CAClBrgX,IAAK,CAACi7H,EAAK16H,EAAOgE,KAChB,MAAM+7W,EAAWntP,GAAaS,QAAQqH,GAClCr5G,EAAWw2J,EAASw/L,gBAAkBxqP,EAAc7sH,KACtDA,EAAQ63K,EAASw/L,cAAct6W,KAAK86K,EAAS0/L,qBAAuBr8U,IAAc3b,OAAOvf,GAAQgE,EAAM02H,IAGzGihP,GAAmBoE,EADE,YAAc/7W,EACQhE,GAC3C27W,GAAmBoE,EAAU/7W,EAAMhE,EAAM,EAE3CT,IAAK,CAACm7H,EAAK12H,KACT,MAAM+7W,EAAWntP,GAAaS,QAAQqH,GACtC,OAAO4G,GAAMy+O,EAAU,YAAc/7W,IAASs9H,GAAMy+O,EAAU/7W,EAAK,GAGjE44W,EAAY,CAChBjuV,MAAO,CACLlvB,IAAK,CAACi7H,EAAK16H,KACT,MAAM+/W,EAAWntP,GAAaS,QAAQqH,GAClCklP,GACFjE,GAAmBoE,EAAUtE,GAAmBz7W,GAElD+hW,GAASge,EAAU,SACftzP,EAASzsH,IACXu5H,GAAOwmP,EAAU90T,EAAO1lD,MAAMvF,GAChC,EAEFT,IAAKm7H,IACH,MAAMqlP,EAAWntP,GAAaS,QAAQqH,GAChC16H,EAAQshI,GAAMy+O,EAAUtE,KAAsBn6O,GAAMy+O,EAAU,SACpE,OAAO90T,EAAO8xF,UAAU9xF,EAAO1lD,MAAMvF,GAAQgE,GAAK+7W,GAAU,IAOlE,OAHIH,IACFhD,EAAUxjV,KAAOwjV,EAAU/jV,IAAMinV,GAE5BlD,CAAS,EA0pBEoD,CAAe/0T,EAAQ4sH,EAAUh5J,EAASze,IAC5D,OAAOA,CAAI,EAEbk8W,GAASvoL,IAAMuoL,GAAS37W,UACxB27W,GAASjgL,UAAYw/K,GAErB,MAAMoE,GAAQ3D,GAASvoL,IAKvB,MAAMmsL,GACJ,WAAA1kX,CAAYq8K,EAAW,CAAC,GACtBj8K,KAAKukX,OAAS,CAAC,EACfvkX,KAAKwkX,MAAQ,GACbxkX,KAAKykX,sBAAwB,CAAC,EAC9BzkX,KAAK0kX,qBAAuB,GAC5B1kX,KAAKs8B,SAAU,EACft8B,KAAKi8K,SAAWA,CAClB,CACA,kBAAAuzL,CAAmBP,GACjBjvW,KAAKi8K,SAASgzL,eAAiBA,CACjC,CACA,UAAA0V,CAAW1pV,GACT,OAAO,IAAIpa,SAAQ,CAACC,EAAS8vK,KAC3B,MAAMh7D,EAAMyuP,GACZ,IAAIvlP,EACJ,MAAM8lP,EAAU,KACdhvP,EAAIj+D,OAAO5iC,GACP+pG,IACFA,EAAIt9G,QAAUs9G,EAAIvjG,OAASujG,EAAM,KACnC,EAUI/pG,EAAK6gG,EAAI0tP,WACfxkP,EAAM/5H,SAAS+3B,cAAc,UAC7BgiG,EAAI/pG,GAAKA,EACT+pG,EAAIvyH,KAAO,kBACXuyH,EAAI7hG,IAAMuzF,GAAMo1O,gBAAgB3qU,GAC5Bj7B,KAAKi8K,SAASgzL,gBAChBr5O,EAAIyxE,UAAUvoE,EAAK,iBAAkB9+H,KAAKi8K,SAASgzL,gBAErDnwO,EAAIvjG,OAhBS,KACXqpV,IACA9jW,GAAS,EAeXg+G,EAAIt9G,QAbU,KACZojW,IACAh0L,EAAO,0BAA4B31J,EAAI,GAYxCl2B,SAAS6tB,qBAAqB,QAAQ,IAAM7tB,SAASwS,MAAM6lB,YAAY0hG,EAAI,GAEhF,CACA,MAAA+lP,CAAO5pV,GACL,OA9CW,IA8CJj7B,KAAKukX,OAAOtpV,EACrB,CACA,QAAA6pV,CAAS7pV,GACPj7B,KAAKukX,OAAOtpV,GAjDD,CAkDb,CACA,GAAAx6B,CAAIw6B,GACF,MAAMz2B,EAAOxE,KACbwE,EAAKggX,MAAMvgX,KAAKg3B,GAKhB,YAHcp1B,IADArB,EAAK+/W,OAAOtpV,KAExBz2B,EAAK+/W,OAAOtpV,GA1DH,GA4DJ,IAAIpa,SAAQ,CAACC,EAAS8vK,KACtBpsL,EAAKigX,sBAAsBxpV,KAC9Bz2B,EAAKigX,sBAAsBxpV,GAAO,IAEpCz2B,EAAKigX,sBAAsBxpV,GAAKh3B,KAAK,CACnC6c,UACA8vK,UACA,GAEN,CACA,IAAA3vK,CAAKga,GACH,OAAOj7B,KAAKS,IAAIw6B,EAClB,CACA,MAAA08B,CAAO18B,UACEj7B,KAAKukX,OAAOtpV,UACZj7B,KAAKykX,sBAAsBxpV,EACpC,CACA,SAAA8pV,GACE,MAAMP,EAAQxkX,KAAKwkX,MAEnB,OADAxkX,KAAKwkX,MAAQ,GACNxkX,KAAKglX,YAAYR,EAC1B,CACA,WAAAQ,CAAYC,GACV,MAAMzgX,EAAOxE,KACPklX,EAAgB,CAAC98W,EAAM6yB,KAC3B4iG,GAAMr5H,EAAKigX,sBAAuBxpV,GAAKqW,MAAKhmB,IAC1C83U,EAAO93U,GAAWvf,GAAYA,EAAS3D,GAAM6yB,IAAK,WAE7Cz2B,EAAKigX,sBAAsBxpV,EAAI,EAElCkqV,EAAiB7iO,IACrB,MAAM8iO,EAAW9hB,EAAShhN,GAASx9H,GAA4B,aAAlBA,EAAO0W,SACpD,OAAI4pV,EAAS9zW,OAAS,EACbuP,QAAQ+vK,OAAOyY,GAAO+7K,GAAU,EAAE9V,YAAYrM,EAAUqM,GAAUA,EAAS,CAACA,MAE5EzuV,QAAQC,SACjB,EAEIG,EAAOmuV,GAAQvuV,QAAQwuV,WAAWlM,EAAMiM,GAAMn0U,GAhGzC,IAiGLz2B,EAAK+/W,OAAOtpV,IACdiqV,EAAc,UAAWjqV,GAClBpa,QAAQC,WAlGR,IAmGEtc,EAAK+/W,OAAOtpV,IACrBiqV,EAAc,SAAUjqV,GACjBpa,QAAQ+vK,OAAO31J,KAEtBz2B,EAAK+/W,OAAOtpV,GAzGJ,EA0GDz2B,EAAKmgX,WAAW1pV,GAAK++B,MAAK,KAC/Bx1D,EAAK+/W,OAAOtpV,GA1GP,EA2GLiqV,EAAc,UAAWjqV,GACzB,MAAMupV,EAAQhgX,EAAKggX,MACnB,OAAIA,EAAMlzW,OAAS,GACjB9M,EAAKggX,MAAQ,GACNvjW,EAAKujW,GAAOxqT,KAAKmrT,IAEjBtkW,QAAQC,SACjB,IACC,KACDtc,EAAK+/W,OAAOtpV,GAnHP,EAoHLiqV,EAAc,SAAUjqV,GACjBpa,QAAQ+vK,OAAO31J,UAItBoqV,EAAejW,IACnB5qW,EAAK83B,SAAU,EACRrb,EAAKmuV,GAAMp1S,MAAKsoF,IACrB99I,EAAK83B,SAAU,EACf,MAAMgpV,EAAiB9gX,EAAKkgX,qBAAqBh8W,QAEjD,OADAipH,EAASlwH,KAAK6jX,GAAgBh0U,KAAKnwC,GAC5BgkX,EAAe7iO,EAAQ,KAG5BijO,EAAgB1hB,GAAYohB,GAClC,OAAIzgX,EAAK83B,QACA,IAAIzb,SAAQ,CAACC,EAAS8vK,KAC3BpsL,EAAKkgX,qBAAqBzgX,MAAK,KAC7BohX,EAAaE,GAAevrT,KAAKl5C,EAAS8vK,EAAO,GACjD,IAGGy0L,EAAaE,EAExB,EAEFjB,GAAaA,aAAe,IAAIA,GAEhC,MAMMxwW,GAAO,CAAC,EACR0xW,GAAc31M,GAAK,MACnB41M,GAAkB,IAAM5nP,GAAM/pH,GAAM0xW,GAAY7hX,OAuDhD+hX,GAAO,CACXvnV,QAvDgB,IAAM8qK,GAAMn1L,IAAM1P,IAAS,IAAMA,MAwDjDuhX,QAvDcC,IACVA,GACFJ,GAAY3hX,IAAI+hX,EAClB,EAqDAC,QAnDc,IAAML,GAAY7hX,MAoDhClD,IAnDY,CAACgyB,EAAM2kB,KACnB,IAAI0uU,EAAWhyW,GAAK2e,GACfqzV,IACHhyW,GAAK2e,GAAQqzV,EAAW,CAAC,GAE3B,MAAMC,EAAU5iB,EAAMp/V,GAAKqzC,IAAQhvC,GAAQA,EAAK1C,gBAChDi+V,GAAOvsT,GAAO,CAACiP,EAAaj+C,KAC1B,MAAM47P,EAAS57P,EAAK1C,cAChBs+P,IAAW57P,GAxBE,EAACgvC,EAAOjE,KAC3B,MAAM6yU,EAAa5uU,EAAMvY,QAAQsU,GACjC,OAAuB,IAAhB6yU,GAAqB5uU,EAAMvY,QAAQsU,EAAM6yU,EAAa,GAAKA,CAAU,EAsBnDhwL,CAAa+vL,EAAS/hH,IACtCr6D,GAAMvyJ,EAAO4sN,KAChB8hH,EAAS9hH,GAAU39M,GAErBy/T,EAAS19W,GAAQi+C,GAEjBy/T,EAAS9hH,GAAU39M,CACrB,GACA,EAoCF1C,UAlCgBn3B,IAChB,MAAMs5V,EAAWL,KAAkBjzP,MAAM,CAAC,GACpChrH,EAAW0e,GACXT,EAAWS,GACNllB,OAAOgF,UAAUwB,SAASrG,KAAK+kB,GAEhCs+I,EAAQt+I,GAAkB,GAAX,GAAKA,EAExBs+I,EAAUh4I,GAAiB,KAATA,GAAwB,OAATA,QAA0B3mB,IAAT2mB,EAClDy5V,EAAcz5V,IAClB,MAAM05V,EAAU1+W,EAASglB,GACzB,OAAOm9K,GAAMm8K,EAAUI,GAAW1+W,EAASs+W,EAASI,IAAYroP,GAAMioP,EAAUI,EAAQxgX,eAAe7C,IAAI2E,GAAUgrH,MAAM0zP,EAAQ,EAE/HC,EAAgBv/V,GAAOA,EAAI3hB,QAAQ,iBAAkB,IAC3D,GAAIu/J,EAAQh4I,GACV,MAAO,GAET,GA/CmBqkB,EAAPjqB,EA+CF4F,IA/C0Bm9K,GAAM/iL,EAAK,OAgD7C,OAAOpf,EAASglB,EAAKyB,KAhDXrH,MAkDZ,GAjDkBA,IAAOq8U,EAAUr8U,IAAQA,EAAItV,OAAS,EAiDpD80W,CAAY55V,GAAO,CACrB,MAAM9pB,EAAS8pB,EAAKhnB,MAAM,GAE1B,OAAO2gX,EADYF,EAAYz5V,EAAK,IAAIvnB,QAAQ,iBAAiB,CAACohX,EAAIC,IAAO38K,GAAMjnM,EAAQ4jX,GAAM9+W,EAAS9E,EAAO4jX,IAAOD,IAE1H,CACA,OAAOF,EAAcF,EAAYz5V,GAAM,EAUvC69G,MARc,IAAMo7O,KAAkBt7S,MAAK/yB,GAASymF,GAAMzmF,EAAO,UAASk7E,QAAOl9D,GAAe,QAARA,IASxFmxT,QARc9zV,GAAQk3K,GAAM71L,GAAM2e,IAW9B+zV,GAAe,KACnB,MAAMpvU,EAAQ,GACRg4T,EAAO,CAAC,EACRrwO,EAAS,CAAC,EACVtzC,EAAa,GACbg7R,EAAe,CAACr+W,EAAMi/K,KAC1B,MAAMq/L,EAAmBpjB,EAAS73Q,GAAYz0C,GAAYA,EAAS5uC,OAASA,GAAQ4uC,EAASqwI,QAAUA,IACvG+7K,EAAOsjB,GAAkB1vU,GAAYA,EAASl2B,WAAU,EAEpD6lW,EAAWv+W,GAAQuhM,GAAMylK,EAAMhnW,GAQ/Bw+W,EAAmB,CAACx+W,EAAMy+W,KAC9B,MAAM/uV,EAAW4tV,GAAKG,WAEjB/tV,GAAY+uV,IAAiE,KADzD,KAAOA,GAAa,IAAM,KACJhoV,QAAQ,IAAM/G,EAAW,MAGxEwsV,GAAaA,aAAa7jX,IAAI2uW,EAAKhnW,GAAQ,UAAY0vB,EAAW,MAAM,EAuDpEgvV,EAAU,CAAC1+W,EAAMi/K,EAAQ,UACf,UAAVA,GArEUj/K,IAAQuhM,GAAM5qE,EAAQ32H,GAqEX2+W,CAAQ3+W,IAEZ,WAAVi/K,GAAsBs/L,EAASv+W,GADjCyY,QAAQC,UAIR,IAAID,SAAQC,IACjB2qE,EAAWxnF,KAAK,CACdmE,OACAi/K,QACAvmK,WACA,IAIR,MAAO,CACLs2B,QACAg4T,OACArwO,SACAp7H,IAtFUyE,IACV,GAAI22H,EAAO32H,GACT,OAAO22H,EAAO32H,GAAMsnW,QAEN,EAmFhBsX,gBAzEsB,CAAC5+W,EAAMy+W,MACK,IAA9BL,GAAaS,eACXN,EAASv+W,GACXw+W,EAAiBx+W,EAAMy+W,GAEvBC,EAAQ1+W,EAAM,UAAU4xD,MAAK,IAAM4sT,EAAiBx+W,EAAMy+W,KAE9D,EAmEApmX,IAjEU,CAACs0B,EAAImyV,KACf9vU,EAAMnzC,KAAKijX,GACXnoP,EAAOhqG,GAAM,CAAE26U,SAAUwX,GACzBT,EAAa1xV,EAAI,SACVmyV,GA8DPvvT,OA5DavvD,WACNgnW,EAAKhnW,UACL22H,EAAO32H,EAAK,EA2DnB++W,UAzDgB,CAACC,EAASj2J,IACtBtgG,EAASsgG,GACJtgG,EAASu2P,GAAW,CACzB/iW,OAAQ,GACRgjW,SAAUl2J,EACVnnM,OAAQ,IACN,CACF3F,OAAQ+iW,EAAQ/iW,OAChBgjW,SAAUl2J,EACVnnM,OAAQo9V,EAAQp9V,QAGXmnM,EA8CTlwM,KA3CW,CAAC7Y,EAAMk/W,KAClB,GAAIlY,EAAKhnW,GACP,OAAOyY,QAAQC,UAEjB,IAAIymW,EAAY12P,EAASy2P,GAAYA,EAAWA,EAASjjW,OAASijW,EAASD,SAAWC,EAASt9V,OAChE,IAA3Bu9V,EAAU1oV,QAAQ,OAA4C,IAA9B0oV,EAAU1oV,QAAQ,SACpD0oV,EAAYf,GAAahyH,QAAU,IAAM+yH,GAE3CnY,EAAKhnW,GAAQm/W,EAAUx1V,UAAU,EAAGw1V,EAAUv7Q,YAAY,MAC1D,MAAMszN,EAAO,KACXmnD,EAAar+W,EAAM,UACZyY,QAAQC,WAEjB,OAAIi+G,EAAO32H,GACFk3T,IAEAglD,GAAaA,aAAa7jX,IAAI8mX,GAAWvtT,KAAKslQ,EACvD,EA2BAwnD,UACD,EAEHN,GAAaS,cAAe,EAC5BT,GAAahyH,QAAU,GACvBgyH,GAAagB,cAAgBhB,KAC7BA,GAAaiB,aAAejB,KAC5BA,GAAakB,aAAelB,KAE5B,MAAMmB,GAAU,CAAC9+V,EAAIwzJ,KACnB,IAAIC,EAAQ,KAeZ,MAAO,CACL5kH,OAfa,KACRo5D,EAAOwrD,KACVrwF,aAAaqwF,GACbA,EAAQ,KACV,EAYAC,SAVe,IAAItjK,KACf63G,EAAOwrD,KACTA,EAAQ97I,YAAW,KACjB87I,EAAQ,KACRzzJ,EAAGkX,MAAM,KAAM9mB,EAAK,GACnBojK,GACL,EAKD,EAEG1lI,GAAO,CAAC9tB,EAAIwzJ,KAChB,IAAIC,EAAQ,KACZ,MAAM5kH,EAAS,KACRo5D,EAAOwrD,KACVrwF,aAAaqwF,GACbA,EAAQ,KACV,EASF,MAAO,CACL5kH,SACA6kH,SATe,IAAItjK,KACnBy+C,IACA4kH,EAAQ97I,YAAW,KACjB87I,EAAQ,KACRzzJ,EAAGkX,MAAM,KAAM9mB,EAAK,GACnBojK,EAAK,EAKT,EAKGurM,GAAa3kW,EAAS,kBACtB4kW,GAAiB5kW,EAAS,uBAC1B6kW,GAAmB7kW,EAAS,2BAC5B8kW,GAAuB9kW,EAAS,8BAChC+kW,GAAwB/kW,EAAS,+BACjCglW,GAA2BhlW,EAAS,6BAEpCilW,GAAWnrU,GAAQ9vC,GAAQ00B,GAAG10B,EAAM8vC,GACpCqgG,GAAW,CAACnH,EAAQkyO,KACxB,MAAMvtN,EAAM3kB,EAAOI,UAAUwjC,SACvBx3K,EAAQ20H,GAAaS,QAAQmjC,EAAIiN,gBACjC9qH,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACnCt6F,EAAWo6W,EAAep2P,MAAK,IAAM,IAAM61P,OAAcQ,GAAM,IAAKP,SAAuBO,QAC3FC,EAAWxrP,GAAQx6H,EAAOu4J,EAAIkN,aAAat1C,MAAMnwH,GAEvD,OADgByuN,GAAUu3J,EAAUt6W,EAAUm6W,GAASnrU,IACxCotB,MAAK/pD,GAAKu2G,GAAOv2G,EAAG,GAAI0nW,QAAuB39S,MAAKx5B,GAAOgmF,GAAOv2G,EAAG,GAAIynW,QAAqBhlX,KAAIuF,IAC/G,MAAMmD,EAAW+8W,GAAYryO,EAAQtlG,GACrC,MAAO,CACLA,MACAvoC,OACAmD,WACD,OACC,EAGAg9W,GAAiB,CAACzwP,EAAM/6E,IAASu4E,GAAMwC,EAAM,mBA3BhC,EAAC9sH,EAAO+C,EAAUgrH,IAAWu9D,GAAWtrL,EAAO+C,EAAUgrH,GAAQ7G,SA2BZyK,CAAW7E,EAAM,yBAA0BowP,GAASnrU,IACtHurU,GAAc,CAACryO,EAAQtlG,KAC3B,MAAMp5B,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnC2zB,EAAgBI,GAAY7kH,EAAM,IAAKuwW,SAAyBn3U,OACtE,OAAO2yT,EAAStnO,GAAec,IAAeyrP,GAAezrP,EAAYvlH,IAAM,EAE3EgF,GAAU,CAAC05H,EAAQ7tI,KACvB,MAAMmP,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnCu/I,EAAUxrH,GAAY7kH,EAAM,IAAKswW,SAAuBz/W,OACxDmhP,EAAY,CAAC,EAQnB,OAPA65G,EAAOx7G,GAAShlN,IACd,IAAK2lV,GAAe3lV,EAAGrrB,GAAO,CAC5B,MAAMo5B,EAAM+0F,GAAM9iG,EAAGklV,MACfU,EAAe3qP,GAAM0rH,EAAW54M,GAAK6hF,MAAM,IACjD+2H,EAAU54M,GAAO63U,EAAa1lX,OAAO,CAAC8/B,GACxC,KAEK2mN,CAAS,EAGZk/H,GAAU,CAACxyO,EAAQjnE,KACvB,MAAM05S,EAAkB74M,GAAK,CAAC,GACxBtnF,EAAW,KAAM,CACrB3lF,UAAW,GACX8hD,SAAUyqJ,OAENw5K,EAAgB,CAACvgX,EAAMo5B,KAC3BonV,EAAgBxgX,GAAM0L,IACpB0tB,EAAE1tB,GACKA,IACP,EAEE80W,EAAkB,CAACxgX,EAAMo5B,KAC7B,MAAMqnV,EAAcH,EAAgB/kX,MAE9BmlX,EAAatnV,EADNq8F,GAAMgrP,EAAazgX,GAAMuqH,WAAWpqC,IAEjDsgS,EAAYzgX,GAAQ0gX,EACpBJ,EAAgB7kX,IAAIglX,EAAY,EAe5BE,EAAmB,CAACp4U,EAAK02I,KAC7B+7K,EAAOklB,GAAYryO,EAAQtlG,IAAMmnF,IAC3BuvD,EACF6+K,GAAMpuO,EAAMiwP,KAAwB,QAEpC5hB,GAASruO,EAAMiwP,KACjB,GACA,EAEEiB,EAAeryU,IAAK,KACxB,MAAM29H,EAAc5yK,GAAKstE,EAASi6S,YAClC7lB,EAAO9uL,GAAalsK,IAClBwgX,EAAgBxgX,GAAM0L,IACpB,MAAMq6C,EAAOr6C,EAAK4wC,SAAS/gD,MAe3B,OAdAy5I,GAASnH,EAAQtkB,EAAS/iH,KAAKxG,IAAO2pH,MAAK,KACzC5jE,EAAK7c,MAAKX,IApBOvoC,KACvBugX,EAAcvgX,GAAM0L,IAClBsvV,EAAOtvV,EAAKlR,WAAW4+B,GAAKA,GAAE,EAAOp5B,IAAM,GAC3C,EAkBM8gX,CAAiB9gX,GACjB0L,EAAK4wC,SAASvxC,QACd41W,EAAiBp4U,GAAK,EAAM,GAC5B,IACD,EAAEA,MAAKvoC,OAAMmD,eACTssH,GAAK1pE,EAAMxd,KACdwd,EAAK7c,MAAKX,GAAOo4U,EAAiBp4U,GAAK,KAnC3B,EAACvoC,EAAMuoC,EAAKplC,KAChCo9W,EAAcvgX,GAAM0L,IAClBsvV,EAAOtvV,EAAKlR,WAAW4+B,GAAKA,GAAE,EAAMp5B,EAAM,CACxCuoC,MACA3jC,MAAOm2V,EAAM53V,GAAUusH,GAAQA,EAAKlC,SACnC,GACH,EA8BMuzP,CAAc/gX,EAAMuoC,EAAKplC,GACzBuI,EAAK4wC,SAAS7gD,IAAI8sC,GAClBo4U,EAAiBp4U,GAAK,GACxB,IAEK,CACL+T,SAAU5wC,EAAK4wC,SACf9hD,UAAWkR,EAAKlR,UACjB,GACD,GACF,GACD,IACHqzI,EAAO8K,GAAG,UAAU,KAClBioO,EAAatxT,QAAQ,IAEvBu+E,EAAO8K,GAAG,cAAc,KACtBioO,EAAazsM,UAAU,IAQzB,MAAO,CAAE/kG,YANW,CAACpvE,EAAMo5B,KACzBonV,EAAgBxgX,GAAM0L,IAAQ,CAC5B4wC,SAAU5wC,EAAK4wC,SACf9hD,UAAWkR,EAAKlR,UAAUE,OAAO,CAAC0+B,OACjC,EAEiB,EAsDlB4nV,GAAS,IAAMtkX,OAAOiiN,OAAOC,gBAAgB,IAAIC,YAAY,IAAI,GAAK,WAE5E,IAAIlxB,GAAS,EACb,MAAMxuD,GAAaljH,IACjB,MACM6H,GADO,IAAI5F,MACCmC,UACZq+L,EAAWv1M,KAAK8iC,MAAiB,IAAX+0U,MAE5B,OADArzL,KACO1xK,EAAS,IAAMyiM,EAAW/wB,GAASpyK,OAAOuI,EAAK,EAclD2qG,GAAU,CAAC1jE,EAAUmnE,IAAWtD,GAAaS,QAAQtkE,EAASyiE,IAAI2E,UAAUD,IAC5E+uP,GAAYl2T,GAAY0jE,GAAQ1jE,GAAU,GAC1Cm2T,GAASn2T,GAAY0jE,GAAQ1jE,GAAU,GAOvC2hF,GAAS,CAAC3hF,EAAUy+D,KACxB,MAAM+I,EAPU,EAACxnE,EAAUy+D,KAC3B,MAAM+I,EAAK3D,GAAaM,QAAQ1F,GAC1BvpH,EAAa+9V,GAAQjzS,GAE3B,OADAqjE,GAASmE,EAAItyH,GACNsyH,CAAE,EAGED,CAAUvnE,EAAUy+D,GAC/BmI,GAAQ5mE,EAAUwnE,GAClB,MAAMP,EAAW+B,GAAWhpE,GAG5B,OAFA6mE,GAAOW,EAAIP,GACXyjF,GAAS1qJ,GACFwnE,CAAE,EAGL4uP,GAAa,CAAC5nL,EAAW+5J,EAAU3/M,EAAatqB,KACpD,MAAM24D,EAAS,IAAIg9K,GAAczlK,EAAW+5J,GACtCiK,EAAOzyS,IACX,IAAI7G,EACJ,GACEA,EAAO+9H,EAAOl3H,WACP7G,IAAS68S,GAAS78S,KAAU0vF,EAAW1vF,IAChD,OAAOslE,EAASlwH,KAAK4qD,GAAMvkD,OAAOohW,GAAS,EAE7C,MAAO,CACL52T,QAAS,IAAMq/E,EAASlwH,KAAK2oL,EAAO93I,WAAWxqC,OAAOohW,IACtD78S,KAAM,IAAMs5S,EAAK,QACjBx3S,KAAM,IAAMw3S,EAAK,QACjBxhK,MAAO,IAAMwhK,EAAK,SACnB,EAGG6jB,GAAa,CAAC5zP,EAAKmmB,KACvB,MAAM0tO,EAAkB1tO,GAA0B9uI,IAAQ2oH,EAAI2gB,QAAQtpI,IAASq8V,GAAOr8V,IAASw8V,GAAyBx8V,IAClH04V,EAAO,CAAC14V,EAAM8yC,EAAQqqI,EAAQxb,KAClC,GAAIs6L,GAASj8V,GAAO,CAClB,MAAMy8W,EAAY96M,EAAQ3hK,EAAM8yC,EAAQ9yC,EAAK6G,MAC7C,IAAmB,IAAf41W,EACF,OAAO/3P,EAAS/iH,KAAK,CACnBkiD,UAAW7jD,EACX8yC,OAAQ2pU,GAGd,CACA,OAAOt/L,IAASjgH,MAAK9d,GAAQs5S,EAAKt5S,EAAKyE,UAAWzE,EAAKtM,OAAQqqI,EAAQxb,IAAS,EAgBlF,MAAO,CACL+6M,UAfgB,CAAC18W,EAAM8yC,EAAQ6uH,EAAS7xH,KACxC,MAAMqtI,EAASm/L,GAAWt8W,EAAe,OAAT8vC,QAA0B,IAATA,EAAkBA,EAAO64E,EAAIyhE,UAAWoyL,GACzF,OAAO9jB,EAAK14V,EAAM8yC,GAAQ,IAAMqqI,EAAOj8H,OAAOtrD,KAAIsrD,IAAQ,CACxD2C,UAAW3C,EACXpO,OAAQoO,EAAK78C,YACVs9J,GAAS77C,WAAW,EAWzB62P,SATe,CAAC38W,EAAM8yC,EAAQ6uH,EAAS7xH,KACvC,MAAMqtI,EAASm/L,GAAWt8W,EAAe,OAAT8vC,QAA0B,IAATA,EAAkBA,EAAO64E,EAAIyhE,UAAWoyL,GACzF,OAAO9jB,EAAK14V,EAAM8yC,GAAQ,IAAMqqI,EAAO/9H,OAAOxpD,KAAIwpD,IAAQ,CACxDyE,UAAWzE,EACXtM,OAAQ,OACL6uH,GAAS77C,WAAW,EAK1B,EAwBGwX,GArBY,EAAChO,EAAIn0H,KACrB,MAMMorI,EAAY/uI,GAAW83H,EAAG93H,GAAWktH,EAASlwH,KAAKgD,EAAQmxH,IAAI6d,WAAa9hB,EAASE,OAO3F,MAAO,CACLluH,IAdUc,IACV,IAAK83H,EAAG93H,GACN,MAAM,IAAIgF,MAAM,gBAAkBrB,EAAO,eAAiBA,EAAO,SAEnE,OAAOorI,EAAU/uI,GAAS+tH,MAAM,GAAG,EAWnCghB,YACA3vI,IATU,CAACY,EAASL,KACpB,IAAKm4H,EAAG93H,GACN,MAAM,IAAIgF,MAAM,oBAAsBrB,EAAO,eAAiBA,EAAO,SAEvE3D,EAAQmxH,IAAI6d,UAAYrvI,CAAK,EAM9B,EAGWsvI,CAAUqyN,GAAU,QAC5B7xL,GAAQzvK,GAAW8lI,GAAM5mI,IAAIc,GAE7BZ,GAAM,CAACY,EAASL,IAAUmmI,GAAM1mI,IAAIY,EAASL,GAoD7CylX,GAAazyU,IACjB,IAAI2nF,EACJ,OAAO9xH,IACL8xH,EAASA,GAAkBtK,GAAYr9E,EAAOs6E,GACvCi4E,GAAM5qE,EAAQ32H,GAAK6E,IAC3B,EAGG68W,GAAS78W,GAAQ64V,GAAY74V,IAAwB,OAAf7E,GAAK6E,GAC3C88W,GAAgBF,GAlDH,CACjB,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,WA4BIh2N,GAASg2N,GArBD,CACZ,KACA,KACA,OAmBIG,GAAeH,GA3BD,CAClB,KACA,KACA,OAyBII,GAAiBJ,GA1DD,CACpB,QACA,QACA,UAwDIK,GAAgBL,GA/DH,CACjB,KACA,OA8DIM,GAAsBN,GApBT,CACjB,MACA,SACA,WACA,UA2BIO,GAAmBtrP,IACvB,MAAMurP,EAASjuP,GAAY0C,EAAK,MAC1BwrP,EAAMhnB,EAXYxkO,KACxB,MAAM1E,EAAW,GACjB,IAAImwP,EAAUzrP,EAAIlJ,IAClB,KAAO20P,GACLnwP,EAASn2H,KAAK+yH,GAAaS,QAAQ8yP,IACnCA,EAAUA,EAAQl0L,UAEpB,OAAOj8D,CAAQ,EAIMowP,CAAkB1rP,GAAKt5H,OAAO,GAAIskX,IACnDO,EAAO/4W,SAAWg5W,EAAIh5W,QACxB8xV,EAAOknB,EAAKzsK,GACd,EAEI4sK,GAAkB,KACtB,MAAM7+M,EAAK50C,GAAaM,QAAQ,MAEhC,OADA4uO,GAAMt6L,EAAI,iBAAkB,KACrBA,CAAE,EAEL8+M,GAAoB5rP,IACxBtiG,GAAMsiG,GACNpF,GAASoF,EAAK2rP,KAAkB,EAY5BE,GAASljB,GACTtnK,GAASwnK,GACTijB,GAttHarkW,GAAKA,EAAEthB,QAAQ,UAAW,IAytHvC4lX,GAAcliB,GACdmiB,GAAW5hB,GACX6hB,GAA0B99W,IAC1B69W,GAAS79W,KACXA,EAAOA,EAAK0wB,YAEPktV,GAAY59W,IAASA,EAAKe,aAAa,mBAE1Cg9W,GAAyB/9W,GAAQ69W,GAAS79W,IAASkzL,GAAOlzL,EAAK6G,MAC/Dm3W,GAAqBh+W,GAAQ89W,GAAwB99W,IAAS+9W,GAAuB/9W,GACrFi+W,GAAaj+W,GAAQA,EAAK4sH,aAAe5sH,EAAKopL,YAAcizK,GAAOr8V,EAAK4sH,YAoCxEsxP,GAAiB77T,IACrB,MAAMwB,EAAYxB,EAAIwB,YACtB,QAAKo4S,GAASp4S,KAGPA,EAAUh9C,KAAKvO,OAAO+pD,EAAIvP,YAAc4qU,IAAUr7T,EAAI87T,aAAeJ,GAAuBl6T,EAAUooE,iBAAgB,EAEzHmyP,GAAgB/7T,IACpB,MAAMwB,EAAYxB,EAAIwB,YACtB,QAAKo4S,GAASp4S,KAGPA,EAAUh9C,KAAKvO,OAAO+pD,EAAIvP,SAAW,KAAO4qU,IAAUr7T,EAAIg8T,WAAaN,GAAuBl6T,EAAUqoE,aAAY,EAqBvHoyP,GAA6Bt+W,GAAQ69W,GAAS79W,IAASA,EAAK6G,KAAK,KAAO62W,GACxEa,GAA2Bv+W,GAAQ69W,GAAS79W,IAASA,EAAK6G,KAAK7G,EAAK6G,KAAKxC,OAAS,KAAOq5W,GASzFc,GAA0BC,GAC1BA,GAAkBA,EAAe19W,aAAa,mBAThC8wH,KAClB,IAAIlqH,EACJ,MAAM01W,EAAMxrP,EAAIlsG,qBAAqB,MAC/B+4V,EAASrB,EAAIA,EAAIh5W,OAAS,GAC5By3V,GAAU4iB,KACiB,QAA5B/2W,EAAK+2W,EAAOhuV,kBAA+B,IAAP/oB,GAAyBA,EAAGgpB,YAAY+tV,GAC/E,EAIEC,CAAYF,GACZA,EAAe/vW,gBAAgB,kBAC/B+vW,EAAe/vW,gBAAgB,kBAC/B+vW,EAAe/vW,gBAAgB,SAC/B+vW,EAAe/vW,gBAAgB,kBAC/B+vW,EAAe/vW,gBAAgB,eACxB+vW,GAEF,KAEHG,GAA+B33U,GAAS62U,GAAwB72U,EAAM2zH,gBAEtEikN,GAAUv6W,KAAK2Y,MACfmwG,GAAUl2E,GACTA,EAUE,CACLxiD,KAAMmqX,GAAQ3nU,EAAKxiD,MACnB20B,IAAKw1V,GAAQ3nU,EAAK7tB,KAClBwpB,OAAQgsU,GAAQ3nU,EAAKrE,QACrBl+C,MAAOkqX,GAAQ3nU,EAAKviD,OACpBkvB,MAAOg7V,GAAQ3nU,EAAKrzB,OACpByF,OAAQu1V,GAAQ3nU,EAAK5tB,SAfd,CACL50B,KAAM,EACN20B,IAAK,EACLwpB,OAAQ,EACRl+C,MAAO,EACPkvB,MAAO,EACPyF,OAAQ,GAYR4pI,GAAW,CAACh8G,EAAMwvH,KACtBxvH,EAAOk2E,GAAQl2E,GACXwvH,IAGFxvH,EAAKxiD,KAAOwiD,EAAKxiD,KAAOwiD,EAAKrzB,OAF7BqzB,EAAKviD,MAAQuiD,EAAKxiD,KAKpBwiD,EAAKrzB,MAAQ,EACNqzB,GAGH4nU,GAAkB,CAACzkM,EAAW0kM,EAAOC,IAAU3kM,GAAa,GAAKA,GAAa/1K,KAAKyW,IAAIgkW,EAAMz1V,OAAQ01V,EAAM11V,QAAU,EACrH21V,GAAY,CAACF,EAAOC,KACxB,MAAME,EAAa56W,KAAKyW,IAAIikW,EAAM11V,OAAS,EAAGy1V,EAAMz1V,OAAS,GAC7D,OAAIy1V,EAAMlsU,OAASqsU,EAAaF,EAAM31V,OAGlC01V,EAAM11V,IAAM21V,EAAMnsU,SAGfisU,GAAgBE,EAAM31V,IAAM01V,EAAMlsU,OAAQksU,EAAOC,EAAM,EAE1DG,GAAY,CAACJ,EAAOC,IACpBD,EAAM11V,IAAM21V,EAAMnsU,UAGlBksU,EAAMlsU,OAASmsU,EAAM31V,MAGlBy1V,GAAgBE,EAAMnsU,OAASksU,EAAM11V,IAAK01V,EAAOC,GAqBpDI,GAA2B,CAACloU,EAAMn4B,EAAGJ,KACzC,MAAM0gW,EAAK/6W,KAAKC,IAAID,KAAKyW,IAAIgE,EAAGm4B,EAAKxiD,KAAOwiD,EAAKrzB,OAAQqzB,EAAKxiD,MACxD4qX,EAAKh7W,KAAKC,IAAID,KAAKyW,IAAI4D,EAAGu4B,EAAK7tB,IAAM6tB,EAAK5tB,QAAS4tB,EAAK7tB,KAC9D,OAAO/kB,KAAK4jC,MAAMnpB,EAAIsgW,IAAOtgW,EAAIsgW,IAAO1gW,EAAI2gW,IAAO3gW,EAAI2gW,GAAI,EAIvDC,GAAkBt4U,IACtB,MAAM2zH,EAAiB3zH,EAAM2zH,eAAgBC,EAAc5zH,EAAM4zH,YACjE,OAAID,IAAmB3zH,EAAM6zH,cAAgBF,EAAezwC,iBAAmBljF,EAAM8zH,YAAcF,EAAc,EACxGD,EAAexwC,WAAWywC,GAE5B,IAAI,EAEP2kN,GAAY,CAAC37T,EAAW/Q,KAC5B,GAAI4oT,GAAY73S,IAAcA,EAAUsmE,gBAAiB,CACvD,MAAMC,EAAavmE,EAAUumE,WACvBq1P,EAhaM,EAACtoX,EAAO4jB,EAAKxW,IAAQD,KAAKyW,IAAIzW,KAAKC,IAAIpN,EAAO4jB,GAAMxW,GAga7Cm7W,CAAQ5sU,EAAQ,EAAGs3E,EAAW/lH,OAAS,GAC1D,OAAO+lH,EAAWq1P,EACpB,CACE,OAAO57T,CACT,EAUI87T,GAAiB,IAAIzkX,OAAO,msEAC5B0kX,GAAkBh7K,GAAMhhF,EAASghF,IAAOA,EAAGrL,WAAW,IAAM,KAAOomL,GAAevlX,KAAKwqM,GAuBvFi7K,GAA0BtjB,GAC1BujB,GAA2BtjB,GAC3BujB,GAAS1jB,GACT2jB,GAAW/jB,GACXgkB,GAAuB/oM,GAAe,CAC1C,SACA,QACA,aAEIgpM,GAAiBhpM,GAAe,CACpC,MACA,QACA,WACA,KACA,SACA,QACA,QACA,SACA,UAEI5iC,GAAU4iC,GAAe,CAAC,UAC1BipM,GAAqBnC,GACrBoC,GAAqBpgX,IACrBmgX,GAAmBngX,KAGnBggX,GAAShgX,IACHigX,GAAqBjgX,EAAK0wB,YAE7BwvV,GAAelgX,IAAS+/W,GAAO//W,IAASs0I,GAAQt0I,IAASqgX,GAA4BrgX,IAGxFqgX,GAA8BrgX,IADbA,IAAQ07V,GAAY17V,IAA+C,SAAtCA,EAAK3D,aAAa,gBACzBikX,CAAetgX,IAAS8/W,GAAyB9/W,GAqBxFugX,GAA6B,CAACvgX,EAAM8vC,IAASswU,GAAmBpgX,IApBjD,EAACA,EAAM8vC,KAC1B,IAAK,IAAIuoQ,EAAWr4S,EAAK0wB,WAAY2nR,GAAYA,IAAavoQ,EAAMuoQ,EAAWA,EAAS3nR,WAAY,CAClG,GAAI2vV,GAA4BhoE,GAC9B,OAAO,EAET,GAAIwnE,GAAwBxnE,GAC1B,OAAO,CAEX,CACA,OAAO,CAAI,EAWkEmoE,CAAaxgX,EAAM8vC,GAE5F2wU,GAAc/kB,GACdglB,GAAqBN,GACrBO,GAAY9kB,GAAiB,UAAW,eACxC+kB,GAAY/kB,GAAiB,QAAS,cACtCglB,GAtEM,KAAI70W,IACP+S,IACL,IAAK,IAAIjF,EAAI,EAAGA,EAAI9N,EAAK3H,OAAQyV,IAC/B,IAAK9N,EAAK8N,GAAGiF,GACX,OAAO,EAGX,OAAO,CAAI,EA+DsBspN,CAAIo4I,GAAaC,GAAoBn8P,EAAIq8P,KACxEE,GAAWv8P,EAAIs3O,GAAiB,cAAe,0BAC/CklB,GAAW9kB,GACX+kB,GAAS3kB,GACT4kB,GAAcxN,GAASjgL,UACvB0tL,GAhGgB,CAACr9T,EAAW/Q,IAC5BA,EAAS,GAAK4oT,GAAY73S,IAAcA,EAAUsmE,qBACpD,EAEOq1P,GAAU37T,EAAW/Q,GA6F1BquU,GAAgBzyP,GAAOA,EAAMA,EAAIgrC,cAAgB+5M,GAASvoL,IAAIt9B,YAC9DwzN,GAAiBtoM,GAAOl1D,EAASk1D,IAAQ,YAAY1+K,KAAK0+K,GAC1DuoM,GAAU1zN,KAASA,EAAIK,YAAcL,EAAIM,OACzCqzN,GAA0Br6U,IAC9B,MAAM4c,EAAY5c,EAAM2zH,eAClB9nH,EAAS7L,EAAM4zH,YACrB,GAAIumN,GAAen6U,EAAM1sC,aAAeumX,GAASj9T,EAAUnzB,aAAeurU,GAASp4S,GAAY,CAC7F,MAAMtkC,EAAOskC,EAAUh9C,KACvB,GAAIu6W,GAAe7hW,EAAKuzB,EAAS,KAAOsuU,GAAe7hW,EAAKuzB,EAAS,IACnE,OAAO,CAEX,CACA,OAAO,CAAK,EA2BRyuU,GAAahgW,GAAgB,IAAXA,EAAE7sB,MAA0B,IAAZ6sB,EAAE5sB,OAAyB,IAAV4sB,EAAE8H,KAA0B,IAAb9H,EAAEsxB,OACpE2uU,GAA0Bt7U,IAC9B,IAAIv+B,EACJ,IAAI85W,EACJ,MAAMC,EAAcx7U,EAAKigI,iBAMzB,OAJEs7M,EADEC,EAAYr9W,OAAS,EACV+oH,GAAQs0P,EAAY,IAEpBt0P,GAAQlnF,EAAK+c,0BAEvBo+T,GAAQn7U,IAAS86U,GAAO96U,IAASq7U,GAAWE,GAnC3BE,KACtB,MAAMjzP,EAAMizP,EAAO3/T,cACb2rG,EAAMwzN,GAAczyP,GACpBkzP,EAASlzP,EAAInE,eAAekwO,IAC5B/pU,EAAaixV,EAAOjxV,WAC1BA,EAAW67F,aAAaq1P,EAAQD,GAChCh0N,EAAIK,SAAS4zN,EAAQ,GACrBj0N,EAAIM,OAAO2zN,EAAQ,GACnB,MAAMH,EAAar0P,GAAQugC,EAAI1qG,yBAE/B,OADAvyB,EAAWC,YAAYixV,GAChBH,CAAU,EA0BRI,CAAgB37U,GAErBq7U,GAAWE,IAAeJ,GAAQn7U,IACoB,QAAhDv+B,EA3B4BgmJ,KACtC,MAAMlhB,EAAKkhB,EAAIiN,eACTknN,EAAKn0N,EAAImN,aACTinN,EAAKp0N,EAAIkN,YACTmnN,EAAKr0N,EAAIoN,UACf,GAAItuB,IAAOq1O,GAAM7lB,GAAS6lB,IAAc,IAAPC,GAAmB,IAAPC,EAAU,CACrD,MAAMC,EAASt0N,EAAI8yB,aAEnB,OADAwhM,EAAO9nN,YAAY2nN,GACZN,GAAwBS,EACjC,CACE,OAAO,IACT,EAgBeC,CAAgCh8U,UAA0B,IAAPv+B,EAAgBA,EAE3E85W,CAAU,EAEbU,GAA0B,CAACV,EAAY/6M,KAC3C,MAAM07M,EAAgBlvN,GAASuuN,EAAY/6M,GAG3C,OAFA07M,EAAcv+V,MAAQ,EACtBu+V,EAAcztX,MAAQytX,EAAc1tX,KAAO,EACpC0tX,CAAa,EAEhBC,GAA8BrmR,IAClC,MAAM0lR,EAAc,GACdY,EAAwBb,IAjOhB,IAAC1C,EAAOC,EAkOM,IAAtByC,EAAWn4V,SAGXo4V,EAAYr9W,OAAS,IArOZ06W,EAsOC0C,EAtOMzC,EAsOM0C,EAAYA,EAAYr9W,OAAS,GAtO7B06W,EAAMrqX,OAASsqX,EAAMtqX,MAAQqqX,EAAM11V,MAAQ21V,EAAM31V,KAAO01V,EAAMlsU,SAAWmsU,EAAMnsU,QAAUksU,EAAMpqX,QAAUqqX,EAAMrqX,QA0O7I+sX,EAAY1qX,KAAKyqX,GAAW,EAExBc,EAAqB,CAAC1+T,EAAW/Q,KACrC,MAAM7L,EAAQk6U,GAAct9T,EAAU7B,eACtC,GAAIlP,EAAS+Q,EAAUh9C,KAAKxC,OAAQ,CAClC,GAAIu7W,GAAgB/7T,EAAUh9C,KAAKisC,IACjC,OAEF,GAAI8sU,GAAgB/7T,EAAUh9C,KAAKisC,EAAS,MAC1C7L,EAAM+mH,SAASnqG,EAAW/Q,GAC1B7L,EAAMgnH,OAAOpqG,EAAW/Q,EAAS,IAC5BwuU,GAAwBr6U,IAE3B,YADAq7U,EAAsBH,GAAwBX,GAAwBv6U,IAAQ,GAIpF,CACI6L,EAAS,IACX7L,EAAM+mH,SAASnqG,EAAW/Q,EAAS,GACnC7L,EAAMgnH,OAAOpqG,EAAW/Q,GACnBwuU,GAAwBr6U,IAC3Bq7U,EAAsBH,GAAwBX,GAAwBv6U,IAAQ,KAG9E6L,EAAS+Q,EAAUh9C,KAAKxC,SAC1B4iC,EAAM+mH,SAASnqG,EAAW/Q,GAC1B7L,EAAMgnH,OAAOpqG,EAAW/Q,EAAS,GAC5BwuU,GAAwBr6U,IAC3Bq7U,EAAsBH,GAAwBX,GAAwBv6U,IAAQ,IAElF,EAEI4c,EAAYm4C,EAAcn4C,YAC1B/Q,EAASkpD,EAAclpD,SAC7B,GAAIiuU,GAASl9T,GAEX,OADA0+T,EAAmB1+T,EAAW/Q,GACvB4uU,EAET,GAAIjB,GAAY58T,GACd,GAAIm4C,EAAcqiR,UAAW,CAC3B,MAAMr+W,EAAOkhX,GAAer9T,EAAW/Q,GACnCiuU,GAAS/gX,IACXuiX,EAAmBviX,EAAMA,EAAK6G,KAAKxC,QAEjCw8W,GAA6B7gX,KAAUghX,GAAOhhX,IAChDsiX,EAAsBH,GAAwBX,GAAwBxhX,IAAO,GAEjF,KAAO,CACL,MAAMA,EAAOkhX,GAAer9T,EAAW/Q,GAIvC,GAHIiuU,GAAS/gX,IACXuiX,EAAmBviX,EAAM,GAEvB6gX,GAA6B7gX,IAASg8F,EAAcqiR,UAEtD,OADAiE,EAAsBH,GAAwBX,GAAwBxhX,IAAO,IACtE0hX,EAET,MAAMc,EAAatB,GAAellR,EAAcn4C,YAAam4C,EAAclpD,SAAW,GAClF+tU,GAA6B2B,KAAgBxB,GAAOwB,KAClD7B,GAAU6B,IAAe7B,GAAU3gX,KAAU6gX,GAA6B7gX,KAC5EsiX,EAAsBH,GAAwBX,GAAwBgB,IAAa,IAGnF3B,GAA6B7gX,IAC/BsiX,EAAsBH,GAAwBX,GAAwBxhX,IAAO,GAEjF,CAEF,OAAO0hX,CAAW,EAEde,GAAgB,CAAC5+T,EAAW/Q,EAAQ4uU,KACxC,MAkBMv7M,EAAiB,KAChBu7M,IACHA,EAAcW,GAA4BI,GAAc5+T,EAAW/Q,KAE9D4uU,GAKT,MAAO,CACL79T,UAAW7tC,EAAS6tC,GACpB/Q,OAAQ98B,EAAS88B,GACjB4vU,QAlBc,KACd,MAAMz7U,EAAQk6U,GAAct9T,EAAU7B,eAGtC,OAFA/a,EAAM+mH,SAASnqG,EAAW/Q,GAC1B7L,EAAMgnH,OAAOpqG,EAAW/Q,GACjB7L,CAAK,EAeZk/H,iBACAkvC,UARgB,IAAMlvC,IAAiB9hK,OAAS,EAShD85W,UAjCgB,KACZ4C,GAASl9T,GACO,IAAX/Q,GAgCTurU,QA5Bc,IACV0C,GAASl9T,GACJ/Q,GAAU+Q,EAAUh9C,KAAKxC,OAE3ByuC,GAAU+Q,EAAUumE,WAAW/lH,OAyBtCs+W,QAVc3mR,GAAiBA,GAAiBn4C,IAAcm4C,EAAcn4C,aAAe/Q,IAAWkpD,EAAclpD,SAWpH+kI,QAVcjgF,GAAUspR,GAAer9T,EAAW+zC,EAAS9kD,EAAS,EAAIA,GAWzE,EAEH2vU,GAAcG,eAAiB37U,GAASw7U,GAAcx7U,EAAM2zH,eAAgB3zH,EAAM4zH,aAClF4nN,GAAcI,aAAe57U,GAASw7U,GAAcx7U,EAAM6zH,aAAc7zH,EAAM8zH,WAC9E0nN,GAAc5qR,MAAQ73F,GAAQyiX,GAAcziX,EAAK0wB,WAAYuwV,GAAYjhX,GAAQ,GACjFyiX,GAAc7qR,OAAS53F,GAAQyiX,GAAcziX,EAAK0wB,WAAYuwV,GAAYjhX,IAC1EyiX,GAAchsC,QAAU,CAACqsC,EAAMC,IAAS/5L,GAAM90K,GAAK6uW,EAAK58M,kBAAmBz+C,GAAOo7P,EAAK38M,kBAAmB84M,IAAW15P,OAAM,GAC3Hk9P,GAAc/rC,QAAU,CAACosC,EAAMC,IAAS/5L,GAAMthE,GAAOq7P,EAAK58M,kBAAmBjyJ,GAAK4uW,EAAK38M,kBAAmBg5M,IAAW55P,OAAM,GAC3Hk9P,GAActE,UAAY97T,KAAOA,GAAMA,EAAI87T,YAC3CsE,GAAcpE,QAAUh8T,KAAOA,GAAMA,EAAIg8T,UACzCoE,GAAcO,eAAiB3gU,KAAOA,GAAM45S,GAAS55S,EAAIwB,aACzD4+T,GAAcQ,kBAAoB5gU,IAAQogU,GAAcO,eAAe3gU,GAEvE,MAAM6gU,GAAsB,CAACv6P,EAAK3oH,KAC5Bi8V,GAASj8V,IAA8B,IAArBA,EAAK6G,KAAKxC,QAC9BskH,EAAIj+D,OAAO1qD,EACb,EAcImjX,GAAkB,CAACx6P,EAAKglC,EAAK3tJ,KAC7BmpH,GAAmBnpH,GARF,EAAC2oH,EAAKglC,EAAK+nN,KAChC,MAAM9oP,EAAalI,EAASlwH,KAAKkhX,EAAK9oP,YAChCw8D,EAAY1kE,EAASlwH,KAAKkhX,EAAKtsL,WACrCz7B,EAAIy1N,WAAW1N,GACf9oP,EAAWvoF,MAAKsrF,GAASuzP,GAAoBv6P,EAAKgH,EAAM1D,mBACxDm9D,EAAU/kJ,MAAKsrF,GAASuzP,GAAoBv6P,EAAKgH,EAAMzD,cAAa,EAIlEm3P,CAAe16P,EAAKglC,EAAK3tJ,GAdV,EAAC2oH,EAAKglC,EAAK3tJ,KAC5B2tJ,EAAIy1N,WAAWpjX,GACfkjX,GAAoBv6P,EAAK3oH,EAAKisH,iBAC9Bi3P,GAAoBv6P,EAAK3oH,EAAKksH,YAAY,EAaxCk3P,CAAWz6P,EAAKglC,EAAK3tJ,EACvB,EAGIsjX,GAAWrnB,GACXsnB,GAAUznB,GACVtoK,GAAYigL,GAASjgL,UACrBgwL,GAAmBxjX,IACvB,MAAM0wB,EAAa1wB,EAAK0wB,WACxB,OAAI6yV,GAAQ7yV,GACH8yV,GAAiB9yV,GAEnBA,CAAU,EAEb0/N,GAAgBpwP,GACfA,EAGEtK,GAAOsK,EAAKoqH,YAAY,CAACvyG,EAAQ7X,KAClCujX,GAAQvjX,IAA2B,OAAlBA,EAAK4oH,SACxB/wG,EAASA,EAAOhiB,OAAOu6P,GAAcpwP,IAErC6X,EAAO7gB,KAAKgJ,GAEP6X,IACN,IATM,GAqBL4rW,GAAQ1nX,GAAK2R,GAAK3R,IAAM2R,EAgBxBg2W,GAAiB1jX,IACRsjX,GAAStjX,GAAQ,SAAWA,EAAK4oH,SAASnwH,eACzC,IAjBYuH,KAC1B,IAAID,EAAOlL,EACXkL,EAAQqwP,GAAcozH,GAAiBxjX,IACvCnL,EAAQsnM,GAAYp8L,EAAO0jX,GAAMzjX,GAAOA,GACxCD,EAAQA,EAAMxH,MAAM,EAAG1D,EAAQ,GAC/B,MAAM8uX,EAAmBjuX,GAAOqK,GAAO,CAAC8X,EAAQ7X,EAAM8Z,KAChDwpW,GAAStjX,IAASsjX,GAASvjX,EAAM+Z,EAAI,KACvCjC,IAEKA,IACN,GAGH,OAFA9X,EAAQg3V,GAASh3V,EAAOm3K,GAAe,CAACl3K,EAAK4oH,YAC7C/zH,EAAQsnM,GAAYp8L,EAAO0jX,GAAMzjX,GAAOA,GACjCnL,EAAQ8uX,CAAgB,EAIXC,CAAoB5jX,GAAQ,IAY5C6jX,GAAW,CAAC/zU,EAAMksD,KACtB,IAGI8nR,EAHA97R,EAAO,GACPnkC,EAAYm4C,EAAcn4C,YAC1B/Q,EAASkpD,EAAclpD,SAE3B,GAAIwwU,GAASz/T,GACXigU,EA9CyB,EAAC9jX,EAAM8yC,KAClC,IAAIulQ,EAAWr4S,EACf,MAAOq4S,EAAWA,EAASpsL,kBACpBq3P,GAASjrE,IAGdvlQ,GAAUulQ,EAASxxS,KAAKxC,OAE1B,OAAOyuC,CAAM,EAsCIixU,CAAqBlgU,EAAW/Q,OAC1C,CACL,MAAMs3E,EAAavmE,EAAUumE,WACzBt3E,GAAUs3E,EAAW/lH,QACvBy/W,EAAe,QACfhxU,EAASs3E,EAAW/lH,OAAS,GAE7By/W,EAAe,SAEjBjgU,EAAYumE,EAAWt3E,EACzB,CACAk1C,EAAKhxF,KAAK0sX,GAAe7/T,IACzB,IAAIgoE,EA5BiB,EAAC/7E,EAAM9vC,EAAM2tG,KAClC,MAAMke,EAAU,GAChB,IAAK,IAAIwsL,EAAWr4S,EAAK0wB,WAAY2nR,GAAYA,IAAavoQ,KACxD69D,IAAaA,EAAU0qM,IADuCA,EAAWA,EAAS3nR,WAItFm7F,EAAQ70H,KAAKqhT,GAEf,OAAOxsL,CAAO,EAoBAm4P,CAAel0U,EAAM+T,GAKnC,OAJAgoE,EAAUkrO,GAASlrO,EAAStH,EAAIu3O,KAChC9zQ,EAAOA,EAAKnyF,OAAOm+B,GAAM63F,GAAS7rH,GACzB0jX,GAAe1jX,MAEjBgoF,EAAKv/E,UAAUxR,KAAK,KAAO,IAAM6sX,CAAY,EAiChDj0M,GAAY,CAAC//H,EAAMk4C,KACvB,IAAKA,EACH,OAAO,KAET,MAAMnxF,EAAQmxF,EAAK9tF,MAAM,KACnBolM,EAAQzoM,EAAM,GAAGqD,MAAM,KACvB44C,EAASj8C,EAAMwN,OAAS,EAAIxN,EAAM,GAAK,SACvCgtD,EAAYnuD,GAAO4pM,GAAO,CAACznL,EAAQ1gB,KACvC,MAAM6C,EAAQ,4BAA4BgmB,KAAK7oB,GAC/C,OAAK6C,GAGY,WAAbA,EAAM,KACRA,EAAM,GAAK,SA5CO,EAACgG,EAAM7E,EAAMtG,KACnC,IAAIkL,EAAQqwP,GAAcpwP,GAK1B,OAJAD,EAAQg3V,GAASh3V,GAAO,CAACC,EAAMnL,KACrByuX,GAAStjX,KAAUsjX,GAASvjX,EAAMlL,EAAQ,MAEpDkL,EAAQg3V,GAASh3V,EAAOm3K,GAAe,CAAC/7K,KACjC4E,EAAMlL,EAAM,EAwCVovX,CAAgBpsW,EAAQ7d,EAAM,GAAIwf,SAASxf,EAAM,GAAI,MALnD,IAKuD,GAC/D81C,GACH,IAAK+T,EACH,OAAO,KAET,IAAKy/T,GAASz/T,IAAcA,EAAUnzB,WAAY,CAChD,IAAIwzV,EAMJ,OAJEA,EADa,UAAXpxU,EACW0gJ,GAAU3vI,GAAa,EAEvB2vI,GAAU3vI,GAElB4+T,GAAc5+T,EAAUnzB,WAAYwzV,EAC7C,CACA,MApDuB,EAACrgU,EAAW/Q,KACnC,IAAI9yC,EAAO6jD,EACPsgU,EAAe,EACnB,KAAOb,GAAStjX,IAAO,CACrB,MAAMokX,EAAUpkX,EAAK6G,KAAKxC,OAC1B,GAAIyuC,GAAUqxU,GAAgBrxU,GAAUqxU,EAAeC,EAAS,CAC9DvgU,EAAY7jD,EACZ8yC,GAAkBqxU,EAClB,KACF,CACA,IAAKb,GAAStjX,EAAKksH,aAAc,CAC/BroE,EAAY7jD,EACZ8yC,EAASsxU,EACT,KACF,CACAD,GAAgBC,EAChBpkX,EAAOA,EAAKksH,WACd,CAIA,OAHIo3P,GAASz/T,IAAc/Q,EAAS+Q,EAAUh9C,KAAKxC,SACjDyuC,EAAS+Q,EAAUh9C,KAAKxC,QAEnBo+W,GAAc5+T,EAAW/Q,EAAO,EA+BhCuxU,CAAiBxgU,EAAWrqC,SAASs5B,EAAQ,IAAI,EAGpDwxU,GAA2B9nB,GAQ3B39S,GAAW,CAAC8pE,EAAK5uH,EAAM0sG,EAAYknD,EAAKv4J,KAC5C,MAAMyuD,EAAYzuD,EAAQu4J,EAAIiN,eAAiBjN,EAAImN,aACnD,IAAIhoH,EAAS19C,EAAQu4J,EAAIkN,YAAclN,EAAIoN,UAC3C,MAAMv2I,EAAQ,GACRsrB,EAAO64E,EAAIyhE,UACjB,GAAI6xK,GAASp4S,GACXr/B,EAAMxtB,KAAKyvG,EAbmB,EAAC1sG,EAAM8pD,EAAW/Q,KAClD,IAAIyxU,EAAgBxqX,EAAK8pD,EAAUh9C,KAAKtO,MAAM,EAAGu6C,IAASzuC,OAC1D,IAAK,IAAIrE,EAAO6jD,EAAUooE,gBAAiBjsH,GAAQi8V,GAASj8V,GAAOA,EAAOA,EAAKisH,gBAC7Es4P,GAAiBxqX,EAAKiG,EAAK6G,MAAMxC,OAEnC,OAAOkgX,CAAa,EAQMC,CAA0BzqX,EAAM8pD,EAAW/Q,GAAUA,OACxE,CACL,IAAI+kD,EAAQ,EACZ,MAAMuyB,EAAavmE,EAAUumE,WACzBt3E,GAAUs3E,EAAW/lH,QAAU+lH,EAAW/lH,SAC5CwzF,EAAQ,EACR/kD,EAASxuC,KAAKC,IAAI,EAAG6lH,EAAW/lH,OAAS,IAE3CmgB,EAAMxtB,KAAK2xH,EAAI6qE,UAAUppE,EAAWt3E,GAAS2zD,GAAc5O,EAC7D,CACA,IAAK,IAAI73F,EAAO6jD,EAAW7jD,GAAQA,IAAS8vC,EAAM9vC,EAAOA,EAAK0wB,WAC5DlM,EAAMxtB,KAAK2xH,EAAI6qE,UAAUxzL,EAAMymG,IAEjC,OAAOjiF,CAAK,EAuBR/f,GAAY,CAACkkH,EAAKxtH,EAAM3D,KAC5B,IAAIszC,EAAQ,EAWZ,OAVAy4E,GAAMl/E,KAAKskF,EAAIrsH,OAAOnB,IAAO6E,GACiB,QAAxCA,EAAK3D,aAAa,uBACpB,EACS2D,IAASxI,QAGlBszC,MAIGA,CAAK,EAER25U,GAAiB,CAAC92N,EAAKv4J,KAC3B,IAAIyuD,EAAYzuD,EAAQu4J,EAAIiN,eAAiBjN,EAAImN,aAC7ChoH,EAAS19C,EAAQu4J,EAAIkN,YAAclN,EAAIoN,UAC3C,GAAI2gM,GAAY73S,IAAqC,OAAvBA,EAAU+kE,SAAmB,CACzD,MAAMwB,EAAavmE,EAAUumE,WAC7BvmE,EAAYumE,EAAW9lH,KAAKyW,IAAI3lB,EAAQ09C,EAASA,EAAS,EAAGs3E,EAAW/lH,OAAS,IAC7Ew/C,IACF/Q,EAAS19C,EAAQ,EAAIyuD,EAAUumE,WAAW/lH,OACtCjP,EACFu4J,EAAIK,SAASnqG,EAAW/Q,GAExB66G,EAAIM,OAAOpqG,EAAW/Q,GAG5B,GAEI4xU,GAA8B/2N,IAClC82N,GAAe92N,GAAK,GACpB82N,GAAe92N,GAAK,GACbA,GAEHysM,GAAc,CAACp6V,EAAM8yC,KACzB,GAAI4oT,GAAY17V,KACdA,EAAOw/W,GAAUx/W,EAAM8yC,GACnBwxU,GAAyBtkX,IAC3B,OAAOA,EAGX,GAAIg+W,GAAmBh+W,GAAO,CACxBi8V,GAASj8V,IAAS89W,GAAwB99W,KAC5CA,EAAOA,EAAK0wB,YAEd,IAAI0rI,EAAUp8J,EAAKisH,gBACnB,GAAIq4P,GAAyBloN,GAC3B,OAAOA,EAGT,GADAA,EAAUp8J,EAAKksH,YACXo4P,GAAyBloN,GAC3B,OAAOA,CAEX,CACgB,EAKZuoN,GAAoB,CAAC5qX,EAAM0sG,EAAY2iC,KAC3C,MAAM5xI,EAAU4xI,EAAUyuC,UACpBlqB,EAAMvkB,EAAUwjC,SACtB,GAAyB,QAArBp1K,EAAQoxH,UAAsB07P,GAAyB9sX,GAAU,CACnE,MAAM2D,EAAO3D,EAAQoxH,SACrB,MAAO,CACLztH,OACAtG,MAAO4P,GAAU2kI,EAAUzgB,IAAKxtH,EAAM3D,GAE1C,CACA,MAAM4kK,EAboCzO,IACnCysM,GAAYzsM,EAAIiN,eAAgBjN,EAAIkN,cAAgBu/L,GAAYzsM,EAAImN,aAAcnN,EAAIoN,WAY7E6pN,CAAoCj3N,GACpD,GAAIyO,EAAS,CACX,MAAMjhK,EAAOihK,EAAQ/iK,QACrB,MAAO,CACL8B,OACAtG,MAAO4P,GAAU2kI,EAAUzgB,IAAKxtH,EAAMihK,GAE1C,CACA,MAnGkB,EAACriK,EAAMqvI,EAAW3iC,EAAYknD,KAChD,MAAMhlC,EAAMygB,EAAUzgB,IAChBvzH,EAAQypD,GAAS8pE,EAAK5uH,EAAM0sG,EAAYknD,GAAK,GAC7CqmC,EAAU5qD,EAAUo6B,YACpBqhN,EAAYjG,GAA6BjxN,GAAO,CAAEm3N,aAAa,GAAS,CAAC,EAC/E,OAAK17O,EAAU+8C,cASN,CACL/wL,QACA4+L,aACG6wL,GAVE,CACLzvX,QACA2d,IAHU8rC,GAAS8pE,EAAK5uH,EAAM0sG,EAAYknD,GAAK,GAI/CqmC,aACG6wL,EAQP,EAgFOE,CAAYhrX,EAAMqvI,EAAW3iC,EAAYknD,EAAI,EAgBhDq3N,GAAqB,CAACr8P,EAAK7gG,EAAIm9V,KACnC,MAAMj5W,EAAO,CACX,gBAAiB,WACjB8b,KACA,MAAS,mCAEX,OAAOm9V,EAASt8P,EAAIn7G,OAAO,OAAQxB,EAAM,YAAc28G,EAAIn7G,OAAO,OAAQxB,EAAK,EAE3Ek5W,GAAwB,CAAC97O,EAAW67O,KACxC,MAAMt8P,EAAMygB,EAAUzgB,IACtB,IAAIglC,EAAMvkB,EAAUwjC,SACpB,MAAM9kJ,EAAK6gG,EAAI0tP,WACTh7M,EAAYjyB,EAAU+8C,cACtB3uL,EAAU4xI,EAAUyuC,UACpB18K,EAAO3D,EAAQoxH,SACforE,EAAU5qD,EAAUo6B,YAC1B,GAAa,QAATroK,EACF,MAAO,CACLA,OACAtG,MAAO4P,GAAUkkH,EAAKxtH,EAAM3D,IAGhC,MAAM2tX,EAAOT,GAA4B/2N,EAAI8yB,cAC7C,IAAKplB,EAAW,CACd8pN,EAAKjyN,UAAS,GACd,MAAMkyN,EAAkBJ,GAAmBr8P,EAAK7gG,EAAK,OAAQm9V,GAC7D9B,GAAgBx6P,EAAKw8P,EAAMC,EAC7B,CACAz3N,EAAM+2N,GAA4B/2N,GAClCA,EAAIuF,UAAS,GACb,MAAMmyN,EAAoBL,GAAmBr8P,EAAK7gG,EAAK,SAAUm9V,GAOjE,OANA9B,GAAgBx6P,EAAKglC,EAAK03N,GAC1Bj8O,EAAUw3C,eAAe,CACvB94J,KACAw9V,MAAM,EACNtxL,YAEK,CACLlsK,KACAksK,UACD,EAEGuxL,GAAgB,CAACn8O,EAAW9pI,EAAMmnG,GAAa,IACtC,IAATnnG,EACKqlX,GAAkBhH,GAAQl3Q,EAAY2iC,GAC3B,IAAT9pI,EA3DY8pI,KACvB,MAAMukB,EAAMvkB,EAAUwjC,SACtB,MAAO,CACLx3K,MAAOyuX,GAASz6O,EAAUzgB,IAAIyhE,UAAWq4L,GAAcG,eAAej1N,IACtE56I,IAAK8wW,GAASz6O,EAAUzgB,IAAIyhE,UAAWq4L,GAAcI,aAAal1N,IAClEqmC,QAAS5qD,EAAUo6B,YACpB,EAsDQgiN,CAAiBp8O,GACf9pI,EArDY8pI,KAChB,CACLukB,IAAKvkB,EAAUwjC,SACfonB,QAAS5qD,EAAUo6B,cAmDZiiN,CAAiBr8O,GAEjB87O,GAAsB97O,GAAW,GAGtCs8O,GAAkBthQ,EAAMugQ,GAAmBzgQ,GAAU,GAErD83B,GAAU7kJ,IACd,MAAM8kJ,EAAcrgI,GAAMA,EAAGzkB,GACvB+kJ,EAAclmI,EAAS7e,GACvBglJ,EAAe,IAAMC,EACrBA,EAAS,CACbz3B,KAAK,EACLt+B,MAAOlvF,EACP2tH,KAAM,CAACu3B,EAAUC,IAAYA,EAAQnlJ,GACrColJ,QAAS93B,EACT+3B,QAASh4B,EACT5uH,IAAKuvH,GAAUs3B,GAAOtlJ,MAAMguH,EAAOhuH,IACnCulJ,SAAUP,EACVj/E,KAAM++E,EACN52B,OAAQ42B,EACR32B,OAAQ22B,EACR12B,MAAO22B,EACPz2B,GAAI02B,EACJz2B,WAAYw2B,EACZt2B,QAASu2B,EACTt2B,SAAUq2B,EACV73G,KAAMzoB,IACJA,EAAGzkB,EAAM,EAEXwlJ,WAAY,IAAMj4B,EAAS/iH,KAAKxK,IAElC,OAAOilJ,CAAM,EAETlmJ,GAAQA,IACZ,MAAMimJ,EAAe,IAAMC,EACrBA,EAAS,CACbz3B,KAAK,EACLt+B,MAAOnwF,EACP4uH,KAAM,CAAC83B,EAASC,IAAaD,EAAQ1mJ,GACrCqmJ,QAAS/3B,EACTg4B,QAAS/3B,EACT7uH,IAAKumJ,EACLO,SAAUv3B,GAAUs3B,GAAOvmJ,MAAMivH,EAAOjvH,IACxCgnE,KAAMi/E,EACN92B,OAAQb,EACRc,OAAQb,EACRc,MAAOrB,EACPuB,GAAIvB,EACJwB,WAAYm2E,EACZj2E,QAASi2E,EACTh2E,SAAU+1E,EAAIllL,OAAOxgB,IACrBmuC,KAAMZ,EACNk5G,WAAYj4B,EAASE,MAEvB,OAAOw3B,CAAM,EAGTK,GAAS,CACbtlJ,MAAO6kJ,GACP9lJ,SACA6mJ,WAJiB,CAACC,EAAU/tH,IAAQ+tH,EAASl4B,MAAK,IAAM5uH,GAAM+4B,IAAM+sH,KAsEhEuH,GA/DWC,IACf,IAAKwyM,EAAUxyM,GACb,MAAM,IAAIhnJ,MAAM,0BAElB,GAAqB,IAAjBgnJ,EAAMn/I,OACR,MAAM,IAAI7H,MAAM,mCAElB,MAAMinJ,EAAe,GACfC,EAAM,CAAC,EAqDb,OApDAyyM,EAAO3yM,GAAO,CAACG,EAAO74G,KACpB,MAAM84G,EAAS9sJ,GAAK6sJ,GACpB,GAAsB,IAAlBC,EAAOv/I,OACT,MAAM,IAAI7H,MAAM,kCAElB,MAAMzF,EAAM6sJ,EAAO,GACbzsJ,EAAQwsJ,EAAM5sJ,GACpB,QAAiB6B,IAAb8qJ,EAAI3sJ,GACN,MAAM,IAAIyF,MAAM,0BAA4BzF,GACvC,GAAY,SAARA,EACT,MAAM,IAAIyF,MAAM,yCACX,IAAKw5V,EAAU7+V,GACpB,MAAM,IAAIqF,MAAM,mCAElBinJ,EAAazsJ,KAAKD,GAClB2sJ,EAAI3sJ,GAAO,IAAIiV,KACb,MAAM63I,EAAY73I,EAAK3H,OACvB,GAAIw/I,IAAc1sJ,EAAMkN,OACtB,MAAM,IAAI7H,MAAM,qCAAuCzF,EAAM,cAAgBI,EAAMkN,OAAS,KAAOlN,EAAQ,UAAY0sJ,GAezH,MAAO,CACL/+B,KAAM,IAAIg/B,KACR,GAAIA,EAASz/I,SAAWm/I,EAAMn/I,OAC5B,MAAM,IAAI7H,MAAM,+CAAiDgnJ,EAAMn/I,OAAS,SAAWy/I,EAASz/I,QAGtG,OADey/I,EAASh5G,GACVhY,MAAM,KAAM9mB,EAAK,EAEjChS,MArBY+pJ,IACZ,MAAMC,EAAaltJ,GAAKitJ,GACxB,GAAIN,EAAap/I,SAAW2/I,EAAW3/I,OACrC,MAAM,IAAI7H,MAAM,iDAAmDinJ,EAAaxsJ,KAAK,KAAO,aAAe+sJ,EAAW/sJ,KAAK,MAK7H,IAHgBquH,GAAOm+B,GAAcQ,GAC5B59B,EAAW29B,EAAYC,KAG9B,MAAM,IAAIznJ,MAAM,gEAAkEwnJ,EAAW/sJ,KAAK,MAAQ,eAAiBwsJ,EAAaxsJ,KAAK,OAE/I,OAAO8sJ,EAAShtJ,GAAK+7B,MAAM,KAAM9mB,EAAK,EAWtCyI,IAAKmM,IACHtO,QAAQmC,IAAImM,EAAO,CACjB6iI,eACA9wJ,YAAaoE,EACbiE,OAAQgR,GACR,EAEL,CACF,IAEI03I,CAAG,EAIZH,GAAa,CACX,CACEwkD,WAAY,CACV,SACA,WAGJ,CACEC,WAAY,CACV,SACA,WAGJ,CACEC,YAAa,CACX,SACA,WAGJ,CACEC,WAAY,CACV,SACA,aAIN,MAgBMy9K,GAAkB1qX,GAA4B,mBAAjBA,EAAQqE,MAA8C,kBAAjBrE,EAAQqE,KAC1EsmX,GAAiB3qX,GAA4B,kBAAjBA,EAAQqE,MAA6C,iBAAjBrE,EAAQqE,KAExEumX,GAAmB5qX,IACvB,IAAI0M,EACJ,MAAMsnB,EAAM94B,GAAWsmJ,GAAOvmJ,MAAM,CAClCC,UACA8E,YAEI6qX,EAAc,CAAC3qX,EAAM4qX,EAAUC,KACnC,QAAuBptX,IAAnBqC,EAAQ2zC,OAAsB,CAChC,IAAIuzB,EACJ,GAAI6zR,EAAU/6V,EAAQ2zC,QAAS,CAC7B,IAAK02E,GAAOrqH,EAAQ2zC,OAAQg1E,GAC1B,OAAO30F,EAAI9zB,EAAO,uDAEpBgnE,EAAUlnE,EAAQ2zC,MACpB,KAAO,KAAIg1E,EAAS3oH,EAAQ2zC,QAG1B,OAAO3f,EAAI9zB,EAAO,8CAFlBgnE,EAAU,CAAClnE,EAAQ2zC,OAGrB,CACA,OAAO6tG,GAAOtlJ,MAAM4uX,EAAS5jT,GAC/B,CAAO,YAAoBvpE,IAAhBqC,EAAQ67K,IACZlzD,EAAS3oH,EAAQ67K,KAGfr6B,GAAOtlJ,MAAM6uX,EAAU/qX,EAAQ67K,IAAK77K,EAAQ9D,QAF1C83B,EAAI9zB,EAAO,2CAIb8zB,EAAI9zB,EAAO,yDACpB,EAEF,IAAKyoC,EAAS3oC,GACZ,OAAOg0B,EAAI,gCAEb,IAAK20F,EAAS3oH,EAAQ7F,OACpB,OAAO65B,EAAI,4CAEb,QAAoBr2B,IAAhBqC,EAAQ8X,IAAmB,CAC7B,IAAK6wG,EAAS3oH,EAAQ8X,KACpB,OAAOkc,EAAI,iDAEb,GAA6B,IAAzBh0B,EAAQ7F,MAAMiP,QAAuC,IAAvBpJ,EAAQ8X,IAAI1O,OAC5C,OAAO4qB,EAAI,yDAEb,IAAI75B,EAAQ6F,EAAQ7F,MAChB2d,EAAM9X,EAAQ8X,IAKlB,OAJmB,IAAfA,EAAI1O,SACN0O,EAAM3d,EACNA,EAAQ,IAEH0wX,EAAY,UAAUl3U,IAAU,CACrCtvC,KAAM,gBACNlK,QACA2d,MACA67B,aACE,CAACkoI,EAAK3/K,KAAU,CAClBmI,KAAM,iBACNlK,QACA2d,MACA+jK,MACA3/K,WAEJ,CAAO,QAA4ByB,IAAxBqC,EAAQuqH,YACjB,OAAK5B,EAAS3oH,EAAQuqH,aAGO,IAAzBvqH,EAAQ7F,MAAMiP,OACT4qB,EAAI,mDAENwtH,GAAOtlJ,MAAM,CAClBmI,KAAM,iBACNlK,MAAO,GACP2d,IAAK9X,EAAQ7F,MACb0hL,IAAK,mBACL3/K,MAAO8D,EAAQuqH,cAVRv2F,EAAI,8DAYR,CACL,MAAMu6C,EAAqC,QAA1B7hE,EAAK1M,EAAQuuE,eAA4B,IAAP7hE,EAAgBA,EAAK,QACxE,OAA6B,IAAzB1M,EAAQ7F,MAAMiP,OACT4qB,EAAI,6CAEN62V,EAAY,SAAS3jT,IAAW,CACrC7iE,KAAM,eACNlK,MAAO6F,EAAQ7F,MACfw5C,OAAQuzB,EAAQ,GAChBqH,cACE,CAAC2wH,EAAS8rL,KAAiB,CAC7B3mX,KAAM,gBACNlK,MAAO6F,EAAQ7F,MACf0hL,IAAKqjB,EACLhjM,MAAO8uX,EACPz8S,aAEJ,GAEI08S,GAAmBpvQ,GAAYu/O,EAASv/O,EAAU8uQ,IAClDO,GAAoBrvQ,GAAYu/O,EAASv/O,EAAU6uQ,IAMnDS,GAAkB,CAACtvQ,EAAUttC,KAC1B,IACFstC,EACHuvQ,cAAehwB,EAASv/O,EAASuvQ,eAAeprX,GAxG5B,EAACA,EAASuuE,KAA8B,kBAAjBvuE,EAAQqE,MAA6C,iBAAjBrE,EAAQqE,OAA4BrE,EAAQuuE,UAAYA,EAwG5E88S,CAAgBrrX,EAASuuE,OAGlF+8S,GAAkBzvQ,IACtB,MAAMrQ,EA9HY4uC,KAClB,MAAMurD,EAAS,GACTnrM,EAAS,GAQf,OAPA0gW,EAAO9gN,GAASx9H,IACdA,EAAOitG,MAAK71F,IACV2xK,EAAO5pM,KAAKi4B,EAAI,IACf93B,IACD1B,EAAOuB,KAAKG,EAAM,GAClB,IAEG,CACLypM,SACAnrM,SACD,EAiHkBozM,CAAYqtJ,EAAMp/O,EAAU+uQ,KAE/C,OADA1vB,EAAO1vP,EAAWm6F,QAAQ3xK,GAAO3c,QAAQpc,MAAM+4B,EAAI94B,QAAS84B,EAAIh0B,WACzDwrG,EAAWhxG,MAAM,EASpB+wX,GAAoBjnP,KAAWxI,WAC/BI,GAAUqvP,GAAkBrvP,UAC5BsvP,GAAQhT,GAASvoL,IAWjBw7L,GAAW3nW,GAAKg3U,EAAKh3U,EAAG7jB,QACxB4iB,GAAS3iB,GAAQ6tI,GAAUA,EAAO7uI,QAAQzD,IAAIyE,GAC9CwrX,GAA0BxvX,GAASysH,EAASzsH,IAAUysC,EAASzsC,GAC/DyvX,GAAsB,CAAC59O,EAAQtiI,EAAe,KAAOvP,IACzD,MAAM6qC,EAAQ4hF,EAASzsH,GACvB,GAAI6qC,EAAO,CACT,IAA4B,IAAxB7qC,EAAMy6B,QAAQ,KAAa,CAC7B,MAAMi1V,EAjBI1vX,KACd,MAAMgzC,EAAQhzC,EAAMy6B,QAAQ,KAAO,EAAIz6B,EAAM+C,MAAM,6BAA+B/C,EAAM+C,MAAM,KAC9F,OAAOgtH,EAAM/8E,GAAO,CAACiyG,EAAQl2G,KAC3B,MAAMrsB,EAAMqsB,EAAKhsC,MAAM,KACjBnD,EAAM8iB,EAAI,GACVmpB,EAAMnpB,EAAIxV,OAAS,EAAIwV,EAAI,GAAK9iB,EAEtC,OADAqlJ,EAAO86M,GAAOngW,IAAQmgW,GAAOl0T,GACtBo5G,CAAM,GACZ,CAAC,EAAE,EASc0qO,CAAQ3vX,GACxB,MAAO,CACLA,MAAOy5H,GAAMi2P,EAAS79O,EAAOlhH,IAAIy9F,MAAM7+G,GACvCs7B,QAEJ,CACE,MAAO,CACL7qC,QACA6qC,QAGN,CACE,MAAO,CACLA,OAAO,EACP7rC,QAAS,oBAEb,EAkwBI4wX,GAAiBjpW,GAAO,gBACxBkpW,GAAalpW,GAAO,WACpBmpW,GAAqBnpW,GAAO,qBAC5BopW,GAAYppW,GAAO,WACnBqpW,GAAerpW,GAAO,cACtBspW,GAA2BtpW,GAAO,2BAClCupW,GAAqBvpW,GAAO,aAC5BwsK,GAAqBxsK,GAAO,qBAC5BysK,GAA0BzsK,GAAO,2BACjCwpW,GAAqBxpW,GAAO,oBAC5BypW,GAAuBzpW,GAAO,uBAC9B0pW,GAAuB1pW,GAAO,uBAC9B2pW,GAAmB3pW,GAAO,eAC1B4pW,GAAiC5pW,GAAO,gCACxC6pW,GAA4B7pW,GAAO,qBACnC8pW,GAAsB9pW,GAAO,yBAC7B+pW,GAAwB/pW,GAAO,4BAC/BgqW,GAAkBhqW,GAAO,SACzBiqW,GAAcjqW,GAAO,aACrBkqW,GAAoBlqW,GAAO,qBAC3BmqW,GAAyBnqW,GAAO,2BAChCoqW,GAA6BpqW,GAAO,6BACpCqqW,GAAyBrqW,GAAO,yBAChCsqW,GAA0BtqW,GAAO,oBACjCuqW,GAAoBvqW,GAAO,mBAC3BwqW,GAAkBxqW,GAAO,YACzByqW,GAAiBzqW,GAAO,gBACxB0qW,GAAwB1qW,GAAO,qBAC/B2qW,GAAiB3qW,GAAO,eACxB4qW,GAAgB5qW,GAAO,eACvB6qW,GAAkB7qW,GAAO,iBACzB8qW,GAAa9qW,GAAO,YACpB+qW,GAAoB/qW,GAAO,kBAC3BgrW,GAA4BhrW,GAAO,8BACnCirW,GAAoBjrW,GAAO,mBAC3BkrW,GAA2BlrW,GAAO,2BAClCmrW,GAAiBnrW,GAAO,eACxBorW,GAAeprW,GAAO,cACtBqrW,GAAoBrrW,GAAO,mBAC3BsrW,GAAWtrW,GAAO,SAClBurW,GAAcvrW,GAAO,aACrBwrW,GAAWxrW,GAAO,SAClByrW,GAAczrW,GAAO,aACrB0rW,GAA4B1rW,GAAO,qBACnC2rW,GAAa3rW,GAAO,WACpB4rW,GAAmB5rW,GAAO,kBAC1B6rW,GAAsB7rW,GAAO,sBAC7B8rW,GAA+B9rW,GAAO,+BACtC+rW,GAAsB/rW,GAAO,sBAC7BgsW,GAAahsW,GAAO,UACpBisW,GAAiBjsW,GAAO,gBACxBksW,GAAoBlsW,GAAO,gBAC3BmsW,GAA6BnsW,GAAO,2BACpCosW,GAAyBpsW,GAAO,sBAChCqsW,GAA0BrsW,GAAO,2BACjCssW,GAA0BtsW,GAAO,sBACjCusW,GAAevsW,GAAO,YACtBwsW,GAAoBxsW,GAAO,iBAC3BysW,GAAoBzsW,GAAO,oBAC3B0sW,GAAa1sW,GAAO,WACpB2sW,GAAuB3sW,GAAO,oBAC9B4sW,GAA6B5sW,GAAO,0BACpC6sW,GAAsB7sW,GAAO,UAC7B8sW,GAA0B9sW,GAAO,sBACjC+sW,GAA2B/sW,GAAO,uBAClCgtW,GAAoBhtW,GAAO,oBAC3BitW,GAAmBjtW,GAAO,SAC1BktW,GAA0BltW,GAAO,0BACjCmtW,GAA0BntW,GAAO,yBACjCotW,GAAeptW,GAAO,cACtBqtW,GAA0BrtW,GAAO,sBACjCstW,GAAattW,GAAO,WACpButW,GAAuBvtW,GAAO,oBAC9BwtW,GAAwBxtW,GAAO,qBAC/BytW,GAAqBztW,GAAO,oBAC5B0tW,GAAsB1tW,GAAO,qBAC7B2tW,GAAwB3tW,GAAO,uBAC/B4tW,GAAuB5tW,GAAO,uBAC9B6tW,GAAgC7tW,GAAO,iCACvC8tW,GAA0B9tW,GAAO,uBACjC+tW,GAAsB/tW,GAAO,eAC7BguW,GAAuBhuW,GAAO,iBAC9BiuW,GAAoBjuW,GAAO,oBAC3BkuW,GAA0BluW,GAAO,wBACjCmuW,GAAkBnuW,GAAO,iBACzBouW,GAAwBpuW,GAAO,wBAC/BquW,GAAsBruW,GAAO,qBAC7BsuW,GAAmBtuW,GAAO,kBAC1BuuW,GAAwBvuW,GAAO,sBAC/BwuW,GAAsBxuW,GAAO,kBAC7ByuW,GAAyBzuW,GAAO,sBAChC0uW,GAAoB1uW,GAAO,oBAC3B2uW,GAAyB3uW,GAAO,qBAKhC4uW,GAA2B1jP,GAAUzlB,GAAM+yK,QAAQttJ,EAAO7uI,QAAQzD,IAAI,sBACtEi2X,GAAwB7uW,GAAO,wBAC/B8uW,GAAyB9uW,GAAO,yBAChC+uW,GAA4B/uW,GAAO,4BACnCgvW,GAAuBhvW,GAAO,mBAC9BivW,GAA8B/jP,GAAUA,EAAO7uI,QAAQzD,IAAI,8BAC3Ds2X,GAA4BlvW,GAAO,yBACnCmvW,GAAgBnvW,GAAO,eACvBovW,GAAYpvW,GAAO,WAEnBqvW,GAAczxB,GACd0xB,GAAWnxB,GACXoxB,GAAertX,IACnB,MAAM0wB,EAAa1wB,EAAK0wB,WACpBA,GACFA,EAAWC,YAAY3wB,EACzB,EAEIstX,GAAY/tW,IAChB,MAAMguW,EAAc5P,GAAOp+V,GAC3B,MAAO,CACLurB,MAAOvrB,EAAKlb,OAASkpX,EAAYlpX,OACjCkb,KAAMguW,EACP,EAEGC,GAAkB/O,IACtB,IAAInrS,EACJ,MAA4D,KAApDA,EAAMmrS,EAAe53W,KAAKk4F,YAAY2+Q,MAC5Ce,EAAegP,WAAWn6S,EAAK,EACjC,EAEIo6S,GAAkB,CAACjP,EAAgBp8T,KACvC4uJ,GAASwtK,GACFp8T,GAaHsrU,GAA6B,CAAClP,EAAgBp8T,KAClD,MAAM3xB,EAAa2xB,EAAIwB,YACjB+pU,EA/zOU,EAACtnQ,EAAIvnG,KACrB,MAAMwC,EAAIglG,EAAWD,EAAIvnG,GACzB,OAAc,IAAPwC,EAAWmjG,EAASE,OAASF,EAAS/iH,KAAK4f,EAAE,EA6zOhCssW,CAAUr5X,GAAKk8B,EAAW05F,YAAaq0P,GAAgB7oX,KAAIf,GACtEA,EAAQwtD,EAAIvP,SAAW2vU,GAAc/xV,EAAY2xB,EAAIvP,SAAW,GAAKuP,IAC3EkjE,MAAMljE,GAET,OADA4uJ,GAASwtK,GACFmP,CAAW,EAEdE,GAA2B,CAACrP,EAAgBp8T,IAAQ+qU,GAAS3O,IAAmBp8T,EAAIwB,cAAgB46T,EAnB1E,EAACA,EAAgBp8T,KAC/C,MAAMu1C,EAAS01R,GAAU7O,EAAe53W,KAAKqwG,OAAO,EAAG70D,EAAIvP,WACrD+kD,EAAQy1R,GAAU7O,EAAe53W,KAAKqwG,OAAO70D,EAAIvP,WAEvD,OADa8kD,EAAOr4E,KAAOs4E,EAAMt4E,MACxBlb,OAAS,GAChBmpX,GAAgB/O,GACTgE,GAAchE,EAAgBp8T,EAAIvP,SAAW8kD,EAAO9sD,QAEpDuX,CACT,EAUyH0rU,CAAwBtP,EAAgBp8T,GAAOqrU,GAAgBjP,EAAgBp8T,GAEpM2rU,GAAsB,CAACnqU,EAAWxB,IAAQogU,GAAcO,eAAe3gU,GAAOyrU,GAAyBjqU,EAAWxB,GADpF,EAACo8T,EAAgBp8T,IAAQA,EAAIwB,cAAgB46T,EAAe/tV,WAAai9V,GAA2BlP,EAAgBp8T,GAAOqrU,GAAgBjP,EAAgBp8T,GAChE4rU,CAA4BpqU,EAAWxB,GAChK4uJ,GAAWi9K,IACXf,GAAYe,IAAuBlQ,GAAmBkQ,KACpDjQ,GAAWiQ,GACbA,EAAmBx/W,gBAAgB,kBAEnC2+W,GAAaa,IAGbd,GAASc,KACXV,GAAgBU,GACuB,IAAnCA,EAAmBrnX,KAAKxC,QAC1BgpX,GAAaa,GAEjB,EAGIC,GAA2B3xB,GAC3B4xB,GAAYzxB,GACZ0xB,GAAgB5xB,GAEhB6xB,GAAwB,CAACx+U,EAAMt4C,EAASogG,KAC5C,MAAM6pR,EAAavuN,GAAS17J,EAAQyrD,wBAAyB20C,GAC7D,IAAI22R,EACAC,EACJ,GAAqB,SAAjB1+U,EAAKz2C,QAAoB,CAC3B,MAAMqxH,EAAS56E,EAAKkS,cAAc/wC,gBAClCs9W,EAAUz+U,EAAKouF,YAAcxT,EAAOwT,WACpCswP,EAAU1+U,EAAKkuF,WAAatT,EAAOsT,SACrC,KAAO,CACL,MAAMywP,EAAW3+U,EAAKmT,wBACtBsrU,EAAUz+U,EAAKouF,WAAauwP,EAAS/5X,KACrC85X,EAAU1+U,EAAKkuF,UAAYywP,EAASplW,GACtC,CACAo4V,EAAW/sX,MAAQ65X,EACnB9M,EAAW9sX,OAAS45X,EACpB9M,EAAWp4V,KAAOmlW,EAClB/M,EAAW5uU,QAAU27U,EACrB/M,EAAW59V,MAAQ,EACnB,IAAIwzB,EAAS7/C,EAAQssB,YAActsB,EAAQysD,YAQ3C,OAPI5M,EAAS,IACPugD,IACFvgD,IAAW,GAEboqU,EAAW/sX,MAAQ2iD,EACnBoqU,EAAW9sX,OAAS0iD,GAEfoqU,CAAU,EA2BbiN,GAAY,CAAC1lP,EAAQl5F,EAAMw5F,EAASmyC,KACxC,MAAMkzM,EAAkBzsL,KACxB,IAAI0sL,EACAV,EACJ,MAAMW,EAAavkM,GAAmBthD,GAChCrgB,EAAMqgB,EAAOrgB,IA6Cbj2E,EAAO,KA3EmB5C,KAChC,IAAInoC,EAAI+/I,EACR,MAAMonO,EAAuB3/P,GAAYpF,GAAaS,QAAQ16E,GA/BhC,qDAgC9B,IAAK,IAAIh2B,EAAI,EAAGA,EAAIg1W,EAAqBzqX,OAAQyV,IAAK,CACpD,MAAM9Z,EAAO8uX,EAAqBh1W,GAAG6uG,IACrC,IAAIyzC,EAAUp8J,EAAKisH,gBACnB,GAAIsyP,GAAyBniN,GAAU,CACrC,MAAMv1J,EAAOu1J,EAAQv1J,KACD,IAAhBA,EAAKxC,OACuB,QAA7BsD,EAAKy0J,EAAQ1rI,kBAA+B,IAAP/oB,GAAyBA,EAAGgpB,YAAYyrI,GAE9EA,EAAQqxN,WAAW5mX,EAAKxC,OAAS,EAAG,EAExC,CACA+3J,EAAUp8J,EAAKksH,YACXoyP,GAA2BliN,KAET,IADPA,EAAQv1J,KACZxC,OACuB,QAA7BqjJ,EAAK0U,EAAQ1rI,kBAA+B,IAAPg3H,GAAyBA,EAAG/2H,YAAYyrI,GAE9EA,EAAQqxN,WAAW,EAAG,GAG5B,GAqDEsB,CAA0Bj/U,GACtBo+U,IACFj9K,GAASi9K,GACTA,EAAqB,MAEvBS,EAAgB76O,IAAGk7O,IACjBrmQ,EAAIj+D,OAAOskU,EAAWr2R,OACtBg2R,EAAgBzoX,OAAO,IAErB0oX,IACF58V,cAAc48V,GACdA,OAAiBh2X,EACnB,EAEIq2X,EAAa,KACjBL,EAAiB98V,aAAY,KAC3B68V,EAAgB76O,IAAGk7O,IACbvzM,IACF9yD,EAAIyuH,YAAY43I,EAAWr2R,MAAO,2BAElCgwB,EAAIytD,SAAS44M,EAAWr2R,MAAO,0BACjC,GACA,GACD,IAAI,EAUT,MAAO,CACLpmD,KA/EW,CAACqlD,EAAQpgG,KACpB,IAAIm2J,EAEJ,GADAj7G,IACI27U,GAAc72X,GAChB,OAAO,KAET,IAAI8xI,EAAQ9xI,GAkCV,OATA02X,EAhqEiB,EAACluX,EAAM43F,KAC5B,IAAIjwF,EACJ,MACMunX,GADoC,QAA7BvnX,EAAK3H,EAAKgiD,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,UAClDyyH,eAAemzP,IAC9BhtV,EAAa1wB,EAAK0wB,WACxB,GAAKknE,EAgBE,CACL,MAAMwkE,EAAUp8J,EAAKisH,gBACrB,GAAI4xP,GAASzhN,GAAU,CACrB,GAAI4hN,GAAmB5hN,GACrB,OAAOA,EAET,GAAImiN,GAAyBniN,GAC3B,OAAOA,EAAQ+yN,UAAU/yN,EAAQv1J,KAAKxC,OAAS,EAEnD,CACe,OAAfqsB,QAAsC,IAAfA,GAAiCA,EAAW67F,aAAa2iQ,EAAUlvX,EAC5F,KA3Ba,CACX,MAAMo8J,EAAUp8J,EAAKksH,YACrB,GAAI2xP,GAASzhN,GAAU,CACrB,GAAI4hN,GAAmB5hN,GACrB,OAAOA,EAET,GAAIkiN,GAA2BliN,GAE7B,OADAA,EAAQ+yN,UAAU,GACX/yN,CAEX,CACIp8J,EAAKksH,YACQ,OAAfx7F,QAAsC,IAAfA,GAAiCA,EAAW67F,aAAa2iQ,EAAUlvX,EAAKksH,aAEhF,OAAfx7F,QAAsC,IAAfA,GAAiCA,EAAWP,YAAY++V,EAEnF,CAYA,OAAOA,CAAQ,EA+nEUE,CAAe53X,EAASogG,GAC7C+1D,EAAMn2J,EAAQwqD,cAAc03G,cACxB21N,GAAwBnB,EAAmBhiQ,cAC7CyhC,EAAIK,SAASkgO,EAAoB,GACjCvgO,EAAIM,OAAOigO,EAAoB,KAE/BvgO,EAAIK,SAASkgO,EAAoB,GACjCvgO,EAAIM,OAAOigO,EAAoB,IAE1BvgO,EAlCa,CACpB,MAAM8wN,EAvlEQ,EAAC5zL,EAAW7qL,EAAM43F,KACpC,IAAIjwF,EACJ,MACM2nX,GADoC,QAA7B3nX,EAAK3H,EAAKgiD,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,UACjD+3B,cAAcg7J,GACpCykM,EAAU7gX,aAAa,iBAAkBmpF,EAAS,SAAW,SAC7D03R,EAAU7gX,aAAa,iBAAkB,OACzC6gX,EAAUn/V,YAAYqtV,KAAkB70P,KACxC,MAAMj4F,EAAa1wB,EAAK0wB,WAUxB,OATKknE,EAOY,OAAflnE,QAAsC,IAAfA,GAAiCA,EAAW67F,aAAa+iQ,EAAWtvX,GANvFA,EAAKksH,YACQ,OAAfx7F,QAAsC,IAAfA,GAAiCA,EAAW67F,aAAa+iQ,EAAWtvX,EAAKksH,aAEjF,OAAfx7F,QAAsC,IAAfA,GAAiCA,EAAWP,YAAYm/V,GAK5EA,CAAS,EAskEWC,CAAYV,EAAYr3X,EAASogG,GAClD6pR,EAAa6M,GAAsBx+U,EAAMt4C,EAASogG,GACxD+wB,EAAIliC,SAASg4R,EAAgB,MAAOgD,EAAWp4V,KAC/Cs/F,EAAIliC,SAASg4R,EAAgB,cAAe,eAC5CyP,EAAqBzP,EACrB,MAAM9lR,EAAQgwB,EAAIn7G,OAAO,MAAO,CAC9B,MAAS,mBACT,iBAAkB,QAEpBm7G,EAAI0yD,UAAU1iF,EAAO,IAAK8oR,IAC1B94P,EAAIn1H,IAAIs8C,EAAM6oD,GACdg2R,EAAgB/3X,IAAI,CAClB+hG,QACAnhG,UACAogG,WAEEA,GACF+wB,EAAIytD,SAASz9E,EAAO,2BAEtBs2R,IACAthO,EAAMn2J,EAAQwqD,cAAc03G,cAC5B/L,EAAIK,SAASywN,EAAgB,GAC7B9wN,EAAIM,OAAOwwN,EAAgB,EAC7B,CAYA,OAAO9wN,CAAG,EAsCVj7G,OACA88U,OAJa,IAAM,uOAKnBhmK,WAZiB,KACjBmlK,EAAgB76O,IAAGk7O,IACjB,MAAMvN,EAAa6M,GAAsBx+U,EAAMk/U,EAAWx3X,QAASw3X,EAAWp3R,QAC9E+wB,EAAI0yD,UAAU2zM,EAAWr2R,MAAO,IAAK8oR,GAAa,GAClD,EASFn8V,QAPc,IAAM0M,cAAc48V,GAQnC,EAEGa,GAA0B,IAAM53B,GAAIvhO,QAAQzB,YAC5Cw6P,GAA0BrvX,GAAQmuX,GAAyBnuX,IAASouX,GAAUpuX,GAC9E0vX,GAAoB1vX,IACPqvX,GAAwBrvX,IAAS+7V,GAAU/7V,IAASyvX,OAClD3jX,GAAci+G,GAAaS,QAAQxqH,IAAOqlH,OAAO00O,IAGhE41B,GAA0BpzB,GAC1BqzB,GAA2BpzB,GAC3BqzB,GAAUlzB,GACVmzB,GAAcj0B,GAAiB,UAAW,4DAC1Ck0B,GAAmB/R,GACnBgS,GAAwBlS,GACxBmS,GAAcv0B,GACdw0B,GAAWj0B,GACXk0B,GAAqB/P,GACrBgQ,GAAanqU,GAAaA,EAAY,EACtCoqU,GAAcpqU,GAAaA,EAAY,EACvCqqU,GAAsB,CAAC53B,EAAMnrO,KACjC,IAAIvtH,EACJ,KAAOA,EAAO04V,EAAKnrO,IACjB,IAAKyiQ,GAAsBhwX,GACzB,OAAOA,EAGX,OAAO,IAAI,EAEPuwX,GAAW,CAACvwX,EAAMimD,EAAWuqU,EAAa/hC,EAAUlhO,KACxD,MAAM4vD,EAAS,IAAIg9K,GAAcn6V,EAAMyuV,GACjCgiC,EAAwBb,GAAyB5vX,IAASgwX,GAAsBhwX,GACtF,IAAIq4S,EACJ,GAAIg4E,GAAYpqU,GAAY,CAC1B,GAAIwqU,IACFp4E,EAAWi4E,GAAoBnzM,EAAOj8H,KAAKgc,KAAKigH,IAAS,GACrDqzM,EAAYn4E,IACd,OAAOA,EAGX,KAAOA,EAAWi4E,GAAoBnzM,EAAOj8H,KAAKgc,KAAKigH,GAAS5vD,IAC9D,GAAIijQ,EAAYn4E,GACd,OAAOA,CAGb,CACA,GAAI+3E,GAAWnqU,GAAY,CACzB,GAAIwqU,IACFp4E,EAAWi4E,GAAoBnzM,EAAO/9H,KAAK8d,KAAKigH,IAAS,GACrDqzM,EAAYn4E,IACd,OAAOA,EAGX,KAAOA,EAAWi4E,GAAoBnzM,EAAO/9H,KAAK8d,KAAKigH,GAAS5vD,IAC9D,GAAIijQ,EAAYn4E,GACd,OAAOA,CAGb,CACA,OAAO,IAAI,EAOPq4E,GAAmB,CAAC1wX,EAAMyuV,KAC9B,KAAOzuV,GAAQA,IAASyuV,GAAU,CAChC,GAAIqhC,GAAY9vX,GACd,OAAOA,EAETA,EAAOA,EAAK0wB,UACd,CACA,OAAO,IAAI,EAEPigW,GAAgB,CAACC,EAAgBC,EAAgBpiC,IAAaiiC,GAAiBE,EAAe/sU,YAAa4qS,KAAciiC,GAAiBG,EAAehtU,YAAa4qS,GACtKqiC,GAA+B,CAACC,EAAgB/0R,KACpD,IAAKA,EACH,OAAO0oB,EAASE,OAElB,MAAM/gE,EAAYm4C,EAAcn4C,YAC1B/Q,EAASkpD,EAAclpD,SAC7B,OAAKm9U,GAAYpsU,GAGV6gE,EAASlwH,KAAKqvD,EAAUumE,WAAWt3E,EAASi+U,IAF1CrsQ,EAASE,MAEiD,EAE/DosQ,GAAc,CAACp5R,EAAQ53F,KAC3B,IAAI2H,EACJ,MACMs/B,GADoC,QAA7Bt/B,EAAK3H,EAAKgiD,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,UACrD4hK,cAQlB,OAPI9hE,GACF3wD,EAAM+yH,eAAeh6J,GACrBinC,EAAMizH,aAAal6J,KAEnBinC,EAAMgzH,cAAcj6J,GACpBinC,EAAMkzH,YAAYn6J,IAEbinC,CAAK,EAERgqV,GAAqB,CAACnhV,EAAMohV,EAAOC,IAAUT,GAAiBQ,EAAOphV,KAAU4gV,GAAiBS,EAAOrhV,GACvGshV,GAAO,CAAC18X,EAAMo7C,EAAM9vC,KACxB,MAAMu6V,EAAc7lW,EAAO,kBAAoB,cAC/C,IAAI2jT,EAAWr4S,EACf,KAAOq4S,GAAYA,IAAavoQ,GAAM,CACpC,IAAIssH,EAAUi8I,EAASkiD,GAIvB,GAHIn+L,GAAW2zN,GAAiB3zN,KAC9BA,EAAUA,EAAQm+L,IAEhBq1B,GAAyBxzN,IAAYyzN,GAAQzzN,GAAU,CACzD,GAAI60N,GAAmBnhV,EAAMssH,EAASi8I,GACpC,OAAOj8I,EAET,KACF,CACA,GAAI+zN,GAAmB/zN,GACrB,MAEFi8I,EAAWA,EAAS3nR,UACtB,CACA,OAAO,IAAI,EAEP2gW,GAAWjtQ,EAAM4sQ,IAAa,GAC9B/zN,GAAU74C,EAAM4sQ,IAAa,GAC7B9kM,GAAiB,CAACjmI,EAAWnW,EAAM7I,KACvC,IAAIjnC,EACJ,MAAMsxX,EAAWltQ,EAAMgtQ,IAAM,EAAMthV,GAC7ByhV,EAAYntQ,EAAMgtQ,IAAM,EAAOthV,GAC/B+T,EAAY5c,EAAM2zH,eAClB9nH,EAAS7L,EAAM4zH,YACrB,GAAIijN,GAAwBj6T,GAAY,CACtC,MAAM+wI,EAAQs7L,GAASrsU,GAAaA,EAAUnzB,WAAamzB,EACrDw8D,EAAWu0E,EAAMv4L,aAAa,kBACpC,GAAiB,WAAbgkH,IACFrgH,EAAO40L,EAAM1oE,YACTwjQ,GAAkB1vX,IACpB,OAAOqxX,GAASrxX,GAGpB,GAAiB,UAAbqgH,IACFrgH,EAAO40L,EAAM3oE,gBACTyjQ,GAAkB1vX,IACpB,OAAOi9J,GAAQj9J,EAGrB,CACA,IAAKinC,EAAMo0H,UACT,OAAOp0H,EAET,GAAIg1T,GAASp4S,GAAY,CACvB,GAAIksU,GAAiBlsU,GAAY,CAC/B,GAAkB,IAAdoC,EAAiB,CAEnB,GADAjmD,EAAOuxX,EAAU1tU,GACb7jD,EACF,OAAOqxX,GAASrxX,GAGlB,GADAA,EAAOsxX,EAASztU,GACZ7jD,EACF,OAAOi9J,GAAQj9J,EAEnB,CACA,IAAmB,IAAfimD,EAAkB,CAEpB,GADAjmD,EAAOsxX,EAASztU,GACZ7jD,EACF,OAAOi9J,GAAQj9J,GAGjB,GADAA,EAAOuxX,EAAU1tU,GACb7jD,EACF,OAAOqxX,GAASrxX,EAEpB,CACA,OAAOinC,CACT,CACA,GAAIs3U,GAAyB16T,IAAc/Q,GAAU+Q,EAAUh9C,KAAKxC,OAAS,EAC3E,OAAkB,IAAd4hD,IACFjmD,EAAOuxX,EAAU1tU,GACb7jD,GACKqxX,GAASrxX,GAGbinC,EAET,GAAIq3U,GAA2Bz6T,IAAc/Q,GAAU,EACrD,OAAmB,IAAfmT,IACFjmD,EAAOsxX,EAASztU,GACZ7jD,GACKi9J,GAAQj9J,GAGZinC,EAET,GAAI6L,IAAW+Q,EAAUh9C,KAAKxC,OAE5B,OADArE,EAAOuxX,EAAU1tU,GACb7jD,EACKqxX,GAASrxX,GAEXinC,EAET,GAAe,IAAX6L,EAEF,OADA9yC,EAAOsxX,EAASztU,GACZ7jD,EACKi9J,GAAQj9J,GAEVinC,CAEX,CACA,OAAOA,CAAK,EAERuqV,GAAoB,CAACx9L,EAASh4F,IAAkB80R,GAA6B98L,EAAU,GAAK,EAAGh4F,GAAenhG,OAAO+0X,IACrH6B,GAA6B,CAACxrU,EAAWnW,EAAM7I,KACnD,MAAMyqV,EAAkBxlM,GAAejmI,EAAWnW,EAAM7I,GACxD,OAAsB,IAAfgf,EAAmBw8T,GAAcG,eAAe8O,GAAmBjP,GAAcI,aAAa6O,EAAgB,EAEjHC,GAAyBtvU,GAAOqiE,EAASlwH,KAAK6tD,EAAIw1H,WAAWjiL,IAAIm0H,GAAaS,SAE9EonQ,GAAyB,CAAC36L,EAAQj7F,KACtC,IAAI35C,EAAM25C,EACV,KAAO35C,EAAM40I,EAAO50I,IAClB,GAAIA,EAAIgzJ,YACN,OAAOhzJ,EAGX,OAAOA,CAAG,EAENwvU,GAAwB,CAACr9X,EAAM0sC,KACnC,MAAM4wV,EAAcnB,GAAcn8X,EAAM0sC,GACxC,QAAK4wV,IAAez1B,GAAO7nW,EAAKqjL,aAGzBi6M,CAAW,EAGpB,IAAIC,IACH,SAAUA,GACTA,EAAWA,EAAsB,WAAK,GAAK,YAC3CA,EAAWA,EAAqB,SAAI,GAAK,UAC3C,CAHA,CAGEA,KAAeA,GAAa,CAAC,IAC/B,MAAMC,GAA2Bx1B,GAC3By1B,GAAWh2B,GACX9yK,GAAcuyK,GACdw2B,GAAS71B,GACT81B,GAAmB/R,GACnBgS,GAxrEapyX,GAAQkgX,GAAelgX,IARLA,MAC9BqgX,GAA4BrgX,KAGzBknH,EAAM1yH,GAAKwL,EAAK2lB,qBAAqB,OAAO,CAAC9N,EAAQg6G,IACpDh6G,GAAUgoW,GAAwBhuP,KACxC,GAE8CwgQ,CAA6BryX,GAyrE1EsyX,GAA2B/R,GAU3BgS,GAAc,CAAC1uU,EAAW/Q,IAC1B+Q,EAAUsmE,iBAAmBr3E,EAAS+Q,EAAUumE,WAAW/lH,OACtDw/C,EAAUumE,WAAWt3E,GAEvB,KAEH0/U,GAA4B,CAACvsU,EAAWjmD,KAC5C,GAAIowX,GAAWnqU,GAAY,CACzB,GAAIksU,GAAiBnyX,EAAKisH,mBAAqBgmQ,GAASjyX,EAAKisH,iBAC3D,OAAOw2P,GAAc7qR,OAAO53F,GAE9B,GAAIiyX,GAASjyX,GACX,OAAOyiX,GAAcziX,EAAM,EAE/B,CACA,GAAIqwX,GAAYpqU,GAAY,CAC1B,GAAIksU,GAAiBnyX,EAAKksH,eAAiB+lQ,GAASjyX,EAAKksH,aACvD,OAAOu2P,GAAc5qR,MAAM73F,GAE7B,GAAIiyX,GAASjyX,GACX,OAAOyiX,GAAcziX,EAAMA,EAAK6G,KAAKxC,OAEzC,CACA,OAAIgsX,GAAYpqU,GACVisU,GAAOlyX,GACFyiX,GAAc7qR,OAAO53F,GAEvByiX,GAAc5qR,MAAM73F,GAEtByiX,GAAc7qR,OAAO53F,EAAK,EAc7ByyX,GAAsB,CAACxsU,EAAWysU,EAAU5iV,KAChD,IAAI9vC,EACA43P,EACA+6H,EACA32R,EACJ,IAAKmtF,GAAYr5I,KAAU4iV,EACzB,OAAO,KAET,GAAIA,EAAS/P,QAAQF,GAAc5qR,MAAM/nD,KAAUA,EAAKs5I,WAEtD,GADAptF,EAAgBymR,GAAc5qR,MAAM/nD,EAAKs5I,WACrCinM,GAAYpqU,IAAcksU,GAAiBriV,EAAKs5I,YAAcD,GAAYr5I,EAAKs5I,WACjF,OAAO8oM,GAAOpiV,EAAKs5I,WAAaq5L,GAAc7qR,OAAO9nD,EAAKs5I,WAAaptF,OAGzEA,EAAgB02R,EAElB,MAAM7uU,EAAYm4C,EAAcn4C,YAChC,IAAI/Q,EAASkpD,EAAclpD,SAC3B,GAAIm/U,GAASpuU,GAAY,CACvB,GAAIwsU,GAAYpqU,IAAcnT,EAAS,EACrC,OAAO2vU,GAAc5+T,IAAa/Q,GAEpC,GAAIs9U,GAAWnqU,IAAcnT,EAAS+Q,EAAUx/C,OAC9C,OAAOo+W,GAAc5+T,IAAa/Q,GAEpC9yC,EAAO6jD,CACT,KAAO,CACL,GAAIwsU,GAAYpqU,IAAcnT,EAAS,IACrC8kN,EAAW26H,GAAY1uU,EAAW/Q,EAAS,GACvCq/U,GAAiBv6H,IACnB,OAAKw6H,GAASx6H,KACZ+6H,EAAYpC,GAAS34H,EAAU3xM,EAAWqsU,GAA0B16H,GAChE+6H,GACEV,GAASU,GACJlQ,GAAckQ,EAAWA,EAAU9rX,KAAKxC,QAE1Co+W,GAAc5qR,MAAM86R,GAG3BV,GAASr6H,GACJ6qH,GAAc7qH,EAAUA,EAAS/wP,KAAKxC,QAExCo+W,GAAc7qR,OAAOggK,GAGhC,GAAIw4H,GAAWnqU,IAAcnT,EAAS+Q,EAAUumE,WAAW/lH,SACzDuzP,EAAW26H,GAAY1uU,EAAW/Q,GAC9Bq/U,GAAiBv6H,IACnB,OAAIs6H,GAAOt6H,GA5DO,EAAC9nN,EAAM8nN,KAC/B,MAAM1rI,EAAc0rI,EAAS1rI,YAC7B,OAAIA,GAAeimQ,GAAiBjmQ,GAC9B+lQ,GAAS/lQ,GACJu2P,GAAcv2P,EAAa,GAE3Bu2P,GAAc7qR,OAAOs0B,GAGvBumQ,GAAoBV,GAAWa,SAAUnQ,GAAc5qR,MAAM+/J,GAAW9nN,EACjF,EAmDe+iV,CAAkB/iV,EAAM8nN,IAE5Bw6H,GAASx6H,KACZ+6H,EAAYpC,GAAS34H,EAAU3xM,EAAWqsU,GAA0B16H,GAChE+6H,GACEV,GAASU,GACJlQ,GAAckQ,EAAW,GAE3BlQ,GAAc7qR,OAAO+6R,GAG5BV,GAASr6H,GACJ6qH,GAAc7qH,EAAU,GAE1B6qH,GAAc5qR,MAAM+/J,GAG/B53P,EAAO43P,GAAsB57J,EAAc67E,SAC7C,CACA,GAAI73K,IAASowX,GAAWnqU,IAAc+1C,EAAcqiR,WAAagS,GAAYpqU,IAAc+1C,EAAcmiR,eACvGn+W,EAAOuwX,GAASvwX,EAAMimD,EAAWw+D,EAAQ30E,GAAM,GAC3CwiV,GAAyBtyX,EAAM8vC,IACjC,OAAO0iV,GAA0BvsU,EAAWjmD,GAGhD43P,EAAW53P,EAAOuwX,GAASvwX,EAAMimD,EAAWqsU,GAA0BxiV,GAAQ9vC,EAC9E,MAAM8yX,EAA8B7rP,GAAOovN,EA/HxB,EAACr2V,EAAM8vC,KAC1B,MAAM+7E,EAAU,GAChB,IAAIwsL,EAAWr4S,EACf,KAAOq4S,GAAYA,IAAavoQ,GAC9B+7E,EAAQ70H,KAAKqhT,GACbA,EAAWA,EAAS3nR,WAEtB,OAAOm7F,CAAO,EAwHsCknQ,CAAalvU,EAAW/T,GAAOkiV,KACnF,OAAIc,GAAiCl7H,GAAak7H,EAA4Bh1X,SAAS85P,GAQnFA,EACK46H,GAA0BvsU,EAAW2xM,GAEvC,MATH57J,EADEo0R,GAAWnqU,GACGw8T,GAAc5qR,MAAMi7R,GAEpBrQ,GAAc7qR,OAAOk7R,GAEhC92R,EAKE,EAEPg3R,GAAcljV,IAAQ,CAC1BsP,KAAM48C,GACGy2R,GAAoBV,GAAWa,SAAU52R,EAAelsD,GAEjEoR,KAAM86C,GACGy2R,GAAoBV,GAAWkB,UAAWj3R,EAAelsD,KAS9DojV,GAAkB7zW,GAClBojW,GAAcO,eAAe3jW,GACF,IAAtBA,EAASyzB,SAETstU,GAAmB/gW,EAASw4J,WAGjCs7M,GAAe9zW,IACnB,GAAIojW,GAAcO,eAAe3jW,GAAW,CAC1C,MAAMwkC,EAAYxkC,EAASwkC,YAC3B,OAAOxkC,EAASyzB,WAAa+Q,EAAUh9C,KAAKxC,MAC9C,CACE,OAAO+7W,GAAmB/gW,EAASw4J,SAAQ,GAC7C,EAEIu7M,GAA2B,CAAC5+X,EAAM0sC,KAAQuhV,GAAcO,eAAexuX,KAAUiuX,GAAcO,eAAe9hV,IAAO1sC,EAAKqjL,YAAc32I,EAAG22I,SAAQ,GAEnJw7M,GAAqB,CAACr/L,EAASx/L,EAAM0sC,KACzC,OAAI8yJ,GACMo/L,GAAyB5+X,EAAM0sC,KAH5B7hB,EAG2C7qB,KAH9BiuX,GAAcO,eAAe3jW,IAAag9U,GAAOh9U,EAASw4J,cAGnBs7M,GAAa3+X,IAAS0+X,GAAgBhyV,IAE7FkyV,GAAyBlyV,EAAI1sC,IAAS0+X,GAAgB1+X,IAAS2+X,GAAajyV,GALzE7hB,KAMb,EAEIi0W,GAAe,CAACt/L,EAASlkJ,EAAMuS,KACnC,MAAM86H,EAAS61M,GAAYljV,GAC3B,OAAO40E,EAASlwH,KAAKw/L,EAAU7W,EAAO/9H,KAAKiD,GAAO86H,EAAOj8H,KAAKmB,GAAK,EAE/DggH,GAAW,CAAC2xB,EAASlkJ,EAAMt7C,IAAS8+X,GAAat/L,EAASlkJ,EAAMt7C,GAAM0oE,MAAKh8B,GAC3EyvV,GAAcn8X,EAAM0sC,EAAI4O,IAASujV,GAAmBr/L,EAASx/L,EAAM0sC,GAC9DoyV,GAAat/L,EAASlkJ,EAAM5O,GAE5BwjF,EAAS/iH,KAAKu/B,KAGnBqyV,GAAiB,CAACv/L,EAASlkJ,EAAMt7C,EAAMg/X,IAAiBnxN,GAAS2xB,EAASlkJ,EAAMt7C,GAAM0oE,MAAK7a,GAAOmxU,EAAanxU,GAAOkxU,GAAev/L,EAASlkJ,EAAMuS,EAAKmxU,GAAgB9uQ,EAAS/iH,KAAK0gD,KACvLoxU,GAAa,CAACz/L,EAASx8L,KAC3B,MAAMk9L,EAAYV,EAAUx8L,EAAQo1H,WAAap1H,EAAQ4xL,UACzD,OAAI6yK,GAASvnK,GACJhwE,EAAS/iH,KAAK8gX,GAAc/tL,EAAWV,EAAU,EAAIU,EAAU7tL,KAAKxC,SAClEqwL,EACL0rL,GAAmB1rL,GACdhwE,EAAS/iH,KAAKqyL,EAAUyuL,GAAc7qR,OAAO88F,GA3C7B2nK,GAARr8V,EA2C+D00L,GA3CxC+tL,GAAc7qR,OAAO53F,GAAQyiX,GAAc5qR,MAAM73F,IAJpE,EAACg0L,EAASlkJ,EAAM16C,KACvC,MAAMiqB,EAAW20K,EAAUyuL,GAAc7qR,OAAOxiG,GAASqtX,GAAc5qR,MAAMziG,GAC7E,OAAOk+X,GAAat/L,EAASlkJ,EAAMzwB,EAAS,EA+CjCq0W,CAAiB1/L,EAASx8L,EAASk9L,GAGrChwE,EAASE,OAhDC5kH,KAiDnB,EAEI2zX,GAAevvQ,EAAMkvQ,IAAc,GACnCM,GAAexvQ,EAAMkvQ,IAAc,GACnCO,GAAkBzvQ,EAAMqvQ,IAAY,GACpCK,GAAiB1vQ,EAAMqvQ,IAAY,GAEnCM,GAAW,aACXC,GAAch0X,GAAQ07V,GAAY17V,IAASA,EAAK8nB,KAAOisW,GACvDE,GAA0B,CAAC3pX,EAAMtK,KACrC,IAAIm2P,EAAcn2P,EAClB,KAAOm2P,GAAeA,IAAgB7rP,GAAM,CAC1C,GAAI0pX,GAAY79H,GACd,OAAOA,EAETA,EAAcA,EAAYzlO,UAC5B,CACA,OAAO,IAAI,EAMPwjW,GAAkB3zM,GAAYmc,GAAMnc,EAAU,QAC9C4zM,GAAiB5zM,GAAYh9D,GAAMp7G,QAAQo4K,EAASnrL,OAEpDg/X,GAAoB7zM,MAAa2zM,GAAgB3zM,IAAaz8D,EAAUy8D,EAASyT,WAAWzT,EAASyT,QACrGqgM,GAAW,CAAC1rQ,EAAK3oH,KACjB07V,GAAY17V,IAAS2oH,EAAI2gB,QAAQtpI,KAAUA,EAAKylB,YAClDzlB,EAAKylB,UAAY,6BAEZzlB,GAwBHs0X,GAAuB,CAACt0X,EAAM2tJ,IAAQmmO,GAAe9zX,GAAM8kH,KAAKN,GAAOniE,IAC3EsrG,EAAIK,SAAS3rG,EAAIwB,YAAaxB,EAAIvP,UAClC66G,EAAIM,OAAO5rG,EAAIwB,YAAaxB,EAAIvP,WACzB,KAEHyhV,GAAyB,CAACzkV,EAAM9vC,EAAM2tJ,OAN1B3tJ,KAASA,EAAKmqH,gBAO1BqqQ,CAAUx0X,KAASi0X,GAAwBnkV,EAAM9vC,MAfpC,EAACA,EAAM2tJ,KACxB,IAAIhmJ,EACJ,MACMunX,GADoC,QAA7BvnX,EAAK3H,EAAKgiD,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,UAClDyyH,eAAemzP,IACpC19W,EAAKmwB,YAAY++V,GACjBvhO,EAAIK,SAASkhO,EAAU,GACvBvhO,EAAIM,OAAOihO,EAAU,EAAE,EAUrBuF,CAAWz0X,EAAM2tJ,IACV,GAKL+mO,GAAc,CAAC/rQ,EAAKvzH,EAAOmrL,EAAU5yB,KACzC,MAAMnpI,EAAQ+7J,EAASnrL,EAAQ,QAAU,OACnC06C,EAAO64E,EAAIyhE,UACjB,GAAI5lK,EAAO,CACT,IAAIxkB,EAAO8vC,EACPgD,EAAStuB,EAAM,GACnB,IAAK,IAAI1K,EAAI0K,EAAMngB,OAAS,EAAGrE,GAAQ8Z,GAAK,EAAGA,IAAK,CAClD,MAAMqzG,EAAWntH,EAAKoqH,WACtB,GAAImqQ,GAAuBzkV,EAAM9vC,EAAM2tJ,GACrC,OAAO,EAET,GAAInpI,EAAM1K,GAAKqzG,EAAS9oH,OAAS,EAC/B,QAAIkwX,GAAuBzkV,EAAM9vC,EAAM2tJ,IAGhC2mO,GAAqBt0X,EAAM2tJ,GAEpC3tJ,EAAOmtH,EAAS3oG,EAAM1K,GACxB,CACImiV,GAASj8V,KACX8yC,EAASxuC,KAAKyW,IAAIyJ,EAAM,GAAIxkB,EAAK6G,KAAKxC,SAEpCq3V,GAAY17V,KACd8yC,EAASxuC,KAAKyW,IAAIyJ,EAAM,GAAIxkB,EAAKoqH,WAAW/lH,SAE1CjP,EACFu4J,EAAIK,SAAShuJ,EAAM8yC,GAEnB66G,EAAIM,OAAOjuJ,EAAM8yC,EAErB,CACA,OAAO,CAAI,EAEP6hV,GAAkB30X,GAAQi8V,GAASj8V,IAASA,EAAK6G,KAAKxC,OAAS,EAC/DkvL,GAAkB,CAAC5qE,EAAK5rG,EAAQwjK,KACpC,MAAMj6J,EAASqiG,EAAIjyH,IAAI6pL,EAASz4J,GAAK,IAAM/K,GACrC63W,EAA0B,OAAXtuW,QAA8B,IAAXA,OAAoB,EAASA,EAAOoK,WACtE40V,EAAO/kM,EAAS+kM,KACtB,GAAIh/V,GAAUsuW,EAAc,CAC1B,IAAI/wU,EACA/Q,EAqCJ,GApCe,UAAX/1B,EACGuoW,EAICh/V,EAAO6jG,iBACTtmE,EAAYv9B,EAAOsmG,WACnB95E,EAAS,GACA6hV,GAAgBruW,EAAO4lG,cAChCroE,EAAYv9B,EAAO4lG,YACnBp5E,EAAS,GACA6hV,GAAgBruW,EAAO2lG,kBAChCpoE,EAAYv9B,EAAO2lG,gBACnBn5E,EAASxsB,EAAO2lG,gBAAgBplH,KAAKxC,SAErCw/C,EAAY+wU,EACZ9hV,EAAS61E,EAAI6qE,UAAUltK,GAAU,IAdnCu9B,EAAY+wU,EACZ9hV,EAAS61E,EAAI6qE,UAAUltK,IAiBpBg/V,EAICh/V,EAAO6jG,iBACTtmE,EAAYv9B,EAAOsmG,WACnB95E,EAAS,GACA6hV,GAAgBruW,EAAO2lG,kBAChCpoE,EAAYv9B,EAAO2lG,gBACnBn5E,EAASxsB,EAAO2lG,gBAAgBplH,KAAKxC,SAErCw/C,EAAY+wU,EACZ9hV,EAAS61E,EAAI6qE,UAAUltK,KAXzBu9B,EAAY+wU,EACZ9hV,EAAS61E,EAAI6qE,UAAUltK,KActBg/V,EAAM,CACT,MAAMpkU,EAAO56B,EAAO2lG,gBACd7sE,EAAO94B,EAAO4lG,YAMpB,IAAI2oQ,EACJ,IANAtxQ,GAAMl/E,KAAKk/E,GAAM+6D,KAAKh4J,EAAO8jG,aAAapqH,IACpCi8V,GAASj8V,KACXA,EAAK6G,KAAO7G,EAAK6G,KAAK7O,QAAQ,UAAW,IAC3C,IAGK68X,EAAclsQ,EAAIjyH,IAAI6pL,EAASz4J,GAAK,IAAM/K,IAC/C4rG,EAAIj+D,OAAOmqU,GAAa,GAE1B,GAAI54B,GAAS78S,IAAS68S,GAAS/6S,KAAU22S,GAAIvhO,QAAQ1B,UAAW,CAC9D,MAAMthD,EAAMpyB,EAAKr6C,KAAKxC,OACtB68C,EAAK4zU,WAAW11U,EAAKv4C,MACrB8hH,EAAIj+D,OAAOtL,GACXyE,EAAY3C,EACZpO,EAASwgC,CACX,CACF,CACA,OAAOoxC,EAAS/iH,KAAK8gX,GAAc5+T,EAAW/Q,GAChD,CACE,OAAO4xE,EAASE,MAClB,EAkCI/wG,GAAU,CAACu1H,EAAWm3C,KAC1B,MAAM53D,EAAMygB,EAAUzgB,IACtB,GAAI43D,EAAU,CACZ,GAAI4zM,GAAe5zM,GACjB,MApCe,EAAC53D,EAAK43D,KACzB,MAAMt5I,EAAQ0hF,EAAIilC,YAClB,OAAI8mO,GAAY/rQ,GAAK,EAAM43D,EAAUt5I,IAAUytV,GAAY/rQ,GAAK,EAAO43D,EAAUt5I,GACxEy9E,EAAS/iH,KAAK,CACnBslC,QACA+sJ,QAASogM,GAAkB7zM,KAGtB77D,EAASE,MAClB,EA2BWmwQ,CAAapsQ,EAAK43D,GACpB,GA3LkBA,IAAY38D,EAAS28D,EAASnrL,OA2L5C4/X,CAAqBz0M,GAC9B,MA/K+B,EAAC53D,EAAK43D,KACzC,MAAMmyM,EAAWhuQ,EAASlwH,KAAKq7K,GAAUlnD,EAAIyhE,UAAW7J,EAASnrL,QAC3D6/X,EAASvwQ,EAASlwH,KAAKq7K,GAAUlnD,EAAIyhE,UAAW7J,EAASxtK,MAC/D,OAAOi2K,GAAM0pM,EAAUuC,GAAQ,CAAC7/X,EAAO2d,KACrC,MAAMk0B,EAAQ0hF,EAAIilC,YAGlB,OAFA3mH,EAAM+mH,SAAS54J,EAAMyuD,YAAazuD,EAAM09C,UACxC7L,EAAMgnH,OAAOl7I,EAAI8wC,YAAa9wC,EAAI+/B,UAC3B,CACL7L,QACA+sJ,QAASogM,GAAkB7zM,GAC5B,GACD,EAoKS20M,CAA6BvsQ,EAAK43D,GACpC,GA3LUA,IAAYmc,GAAMnc,EAAU,MA2LlC40M,CAAa50M,GACtB,MA7BY,EAAC53D,EAAK43D,KACtB,MAAMmyM,EAAWn/L,GAAgB5qE,EAAK,QAAS43D,GACzC00M,EAAS1hM,GAAgB5qE,EAAK,MAAO43D,GAC3C,OAAOyI,GAAM0pM,EAAUuC,EAAOxvQ,GAAGitQ,IAAW,CAAC0C,EAAMC,KACjD,MAAMpuV,EAAQ0hF,EAAIilC,YAGlB,OAFA3mH,EAAM+mH,SAASqmO,GAAS1rQ,EAAKysQ,EAAKvxU,aAAcuxU,EAAKtiV,UACrD7L,EAAMgnH,OAAOomO,GAAS1rQ,EAAK0sQ,EAAKxxU,aAAcwxU,EAAKviV,UAC5C,CACL7L,QACA+sJ,QAASogM,GAAkB7zM,GAC5B,GACD,EAkBS+0M,CAAU3sQ,EAAK43D,GACjB,GAAI2zM,GAAgB3zM,GACzB,MAlBe,EAAC53D,EAAK43D,IAAa77D,EAASlwH,KAAKm0H,EAAIrsH,OAAOikL,EAASplL,MAAMolL,EAAS1rL,QAAQe,KAAIi8H,IACnG,MAAM5qF,EAAQ0hF,EAAIilC,YAElB,OADA3mH,EAAM4mH,WAAWh8B,GACV,CACL5qF,QACA+sJ,SAAS,EACV,IAYUuhM,CAAa5sQ,EAAK43D,GACpB,GAhMaA,IAAYmc,GAAMnc,EAAU,OAgMrCi1M,CAAgBj1M,GACzB,OAAO77D,EAAS/iH,KAAK,CACnBslC,MAAOs5I,EAAS5yB,IAChBqmC,QAASogM,GAAkB7zM,IAGjC,CACA,OAAO77D,EAASE,MAAM,EAGlB6wQ,GAAgB,CAACrsP,EAAW9pI,EAAMmnG,IAC/B8+Q,GAAcn8O,EAAW9pI,EAAMmnG,GAElCm6E,GAAiB,CAACx3C,EAAWm3C,KACjC1sK,GAAQu1H,EAAWm3C,GAAUl8I,MAAK,EAAE4C,QAAO+sJ,cACzC5qD,EAAU0kB,OAAO7mH,EAAO+sJ,EAAQ,GAChC,EAEE0hM,GAAmB11X,GAChB07V,GAAY17V,IAA0B,SAAjBA,EAAK3G,SAA6D,aAAvC2G,EAAK3D,aAAa,iBAIrEs5X,IADKC,GACOn7B,GADKjyO,GAAUotQ,KAAaptQ,GAAnCotQ,OAEX,MAAMC,GAAe/8M,GAAe,KAARA,IAAgD,IAAlC,cAAgBlnJ,QAAQknJ,GAC5D6kL,GAAY7kL,IAAQ+8M,GAAa/8M,KAAS68M,GAAO78M,KAAS4hL,GAAS5hL,GAEnEg9M,GAAc1sP,IAClB,MAAM6xB,EAAS,GACf,GAAI7xB,EACF,IAAK,IAAItvH,EAAI,EAAGA,EAAIsvH,EAAUi8B,WAAYvrJ,IACxCmhJ,EAAOjkK,KAAKoyI,EAAUm8B,WAAWzrJ,IAGrC,OAAOmhJ,CAAM,EAYT86N,GAAqB96N,GAAUo7L,EAVZp7L,IAChBmhC,GAAOnhC,GAAQh0H,IACpB,MAAMjnC,EAAOu/W,GAAgBt4U,GAC7B,OAAOjnC,EAAO,CAAC+pH,GAAaS,QAAQxqH,IAAS,EAAE,IAOLg2X,CAAiB/6N,GAASgiN,IAElEgZ,GAA8B,CAACh7N,EAAQzjK,KAC3C,MAAM4tI,EAF2BjW,GAES33H,EAFQ,+CAGlD,OAAO4tI,EAAc/gI,OAAS,EAAI+gI,EAAgB2wP,GAAmB96N,EAAO,EAExEi7N,GAAqBltP,GAAUitP,GAA4BH,GAAY9sP,EAAOI,UAAU+sP,UAAWpsQ,GAAaS,QAAQwe,EAAO5tC,YAC/Hg7R,GAAkB,CAACjlQ,EAAMrF,IAAWu9D,GAAWl4D,EAAM,QAASrF,GAkB9DuqQ,GAAmBr2X,GAChB4sH,GAAW5sH,GAAM8kH,KAAK9uG,EAAS,CAAChW,KAAQ2vH,GACtC,CAAC3vH,GAAMnK,OAAOwgY,GAAiB1mQ,MAGpC2mQ,GAAkBt2X,GACfopL,GAAUppL,GAAM8kH,KAAK9uG,EAAS,CAAChW,KAAQ2vH,GACxB,OAAhBx0H,GAAKw0H,GACA3D,GAAY2D,GAAO/5H,KAAIwmK,GACrB,CAACp8J,GAAMnK,OAAOygY,GAAgBl6N,MACpC72C,MAAM,IAEF,CAACvlH,GAAMnK,OAAOygY,GAAgB3mQ,MAIrC4mQ,GAAyB,CAAC1kQ,EAAK87B,IAC5Bq7B,GAjCYr7B,KACnB,MAAMlhB,EAAKkhB,EAAIiN,eAAgBmnN,EAAKp0N,EAAIkN,YACxC,OAAIohM,GAASxvN,GACG,IAAPs1O,EAAWr9P,EAAS/iH,KAAKooH,GAAaS,QAAQiiB,IAAO/nB,EAASE,OAE9DF,EAASlwH,KAAKi4I,EAAGriB,WAAW23P,IAAKnsX,IAAIm0H,GAAaS,QAC3D,EA2BagsQ,CAAa7oO,GAzBTA,KACjB,MAAMm0N,EAAKn0N,EAAImN,aAAcknN,EAAKr0N,EAAIoN,UACtC,OAAIkhM,GAAS6lB,GACJE,IAAOF,EAAGj7W,KAAKxC,OAASqgH,EAAS/iH,KAAKooH,GAAaS,QAAQs3P,IAAOp9P,EAASE,OAE3EF,EAASlwH,KAAKstX,EAAG13P,WAAW43P,EAAK,IAAIpsX,IAAIm0H,GAAaS,QAC/D,EAmBgCisQ,CAAW9oO,IAAM,CAAC+mC,EAAWC,KAC3D,MAAMv/L,EAAQiqM,GAAOg3L,GAAiBxkQ,GAAMzN,EAAM1vF,GAAIggK,IAChD3hL,EAAMssL,GAAOi3L,GAAgBzkQ,GAAMzN,EAAM1vF,GAAIigK,IACnD,OAAOv/L,EAAM6vH,UAAYlyG,EAAIkyG,QAAQ,IACpCM,OAAM,GAELmxQ,GAAe,CAAC/tQ,EAAKglC,EAAK3tJ,EAAM5K,KACpC,MAAM06C,EAAO9vC,EACPm9K,EAAS,IAAIg9K,GAAcn6V,EAAM8vC,GACjCs6T,EAAoCzT,GAAShuO,EAAIvvH,OAAOwzW,qCAAqC,CAAC30W,EAAGkD,KAAUkrH,EAAW,CAC1H,KACA,KACA,SACClrH,EAAK1C,iBACR,IAAI09P,EAAcn2P,EAClB,EAAG,CACD,GAAIi8V,GAAS9lG,IAAwD,IAAxC5yI,GAAMxpH,KAAKo8P,EAAYtvP,MAAMxC,OAMxD,YALIjP,EACFu4J,EAAIK,SAASmoG,EAAa,GAE1BxoG,EAAIM,OAAOkoG,EAAaA,EAAYtvP,KAAKxC,SAI7C,GAAI+lW,EAAkCj0G,EAAYvtI,UAUhD,YATIxzH,EACFu4J,EAAIqM,eAAem8F,GAEU,OAAzBA,EAAYvtI,SACd+kC,EAAIuM,aAAai8F,GAEjBxoG,EAAIwM,YAAYg8F,GAKxB,OAASA,EAAc/gQ,EAAQ+nL,EAAO/9H,OAAS+9H,EAAOj8H,QAChC,SAAlBpR,EAAK84E,WACHxzH,EACFu4J,EAAIK,SAASl+G,EAAM,GAEnB69G,EAAIM,OAAOn+G,EAAMA,EAAKs6E,WAAW/lH,QAErC,EAEIsyX,GAAe3tP,IACnB,MAAMu4B,EAAMv4B,EAAOI,UAAU+sP,SAC7B,OAAOnyQ,EAAcu9C,IAAQA,EAAI8D,WAAa,CAAC,EAE3CuxN,GAAc,CAAC5tP,EAAQ6uG,KAC3B,MAAMg/I,EAAqBX,GAAmBltP,GAC1C6tP,EAAmBxyX,OAAS,EAC9B8xV,EAAO0gC,GAAoBhsQ,IACzB,MAAM7qH,EAAO6qH,EAAKlC,IACZmuQ,EAAc9tP,EAAOrgB,IAAIilC,YAC/BkpO,EAAY98N,eAAeh6J,GAC3B82X,EAAY38N,YAAYn6J,GACxB63O,EAASi/I,GAAa,EAAK,IAG7Bj/I,EAAS7uG,EAAOI,UAAUwjC,UAAU,EACtC,EAEI+nI,GAAW,CAACvrK,EAAW2tP,EAAcl/I,KACzC,MAAMt3D,EAAW2kM,GAAsB97O,EAAW2tP,GAClDl/I,EAASt3D,GACTn3C,EAAUw3C,eAAeL,EAAS,EAG9By2M,GAASh3X,GAAQ0c,EAAkB,OAAT1c,QAA0B,IAATA,OAAkB,EAASA,EAAKM,UAC3E22X,GAAkBj3X,GAAQ07V,GAAY17V,KAAU01X,GAAiB11X,KAAUg0X,GAAYh0X,KAAU87V,GAAU97V,GAU3Gk3X,GAAoB,CAACluP,EAAQlsI,EAAQq6X,KACzC,MAAM,UAAC/tP,EAAS,IAAEzgB,GAAOqgB,EACnBouP,EAA2BhuP,EAAUyuC,UACrCw/M,EAAkC76B,GAAyB46B,GACjEziF,GAASvrK,GAAW,GAAM,KACxBtsI,GAAQ,IAE2Bu6X,GAAmC76B,GAAyB46B,IAC7DzuQ,EAAI4uD,UAAU6/M,EAA0BpuP,EAAO5tC,WACjF4tC,EAAOI,UAAU9sI,OAAO86X,GACfD,EAAgB/tP,EAAUC,aACnCiuP,GAAuB3uQ,EAAKygB,EAC9B,EAEIkuP,GAAyB,CAAC3uQ,EAAKygB,KACnC,IAAIzhI,EAAI+/I,EACR,MAAMiG,EAAMvkB,EAAUwjC,UAChB,eAAChS,EAAc,YAAEC,GAAelN,EAEtC,IA5BgC,EAAChlC,EAAK3oH,KACtC,GAAIi3X,GAAgBj3X,KAAU,YAAY5F,KAAK4F,EAAK4oH,UAAW,CAC7D,MAAM2uQ,EAAe5uQ,EAAI6iB,UAAUxrI,EAAM,qBACnC7I,EAAQqiB,SAAS+9W,EAAc,IACrC,OAAQ96W,MAAMtlB,IAAUA,EAAQ,CAClC,CACE,OAAO,CACT,EAqBIqgY,CAA0B7uQ,EADTygB,EAAUyuC,YAI3B6jL,GAAY9gM,GAAiB,CAC/B,MAAM76J,EAAQ66J,EAAexwC,WACvBt6E,EAAO64E,EAAIyhE,UACjB,IAAIjN,EACJ,GAAItiB,EAAc96J,EAAMsE,OAAQ,CAC9B,MAAMqwL,EAAY30L,EAAM86J,GACxBsiB,EAAS,IAAIg9K,GAAczlK,EAA4D,QAAhD/sL,EAAKghH,EAAIwgB,UAAUurD,EAAW/rE,EAAI2gB,gBAA6B,IAAP3hI,EAAgBA,EAAKmoC,EACtH,KAAO,CACL,MAAM4kJ,EAAY30L,EAAMA,EAAMsE,OAAS,GACvC84K,EAAS,IAAIg9K,GAAczlK,EAA4D,QAAhDhtC,EAAK/+B,EAAIwgB,UAAUurD,EAAW/rE,EAAI2gB,gBAA6B,IAAPoe,EAAgBA,EAAK53G,GACpHqtI,EAAO/9H,MAAK,EACd,CACA,IAAK,IAAIp/C,EAAOm9K,EAAO93I,UAAWrlC,EAAMA,EAAOm9K,EAAO/9H,OAAQ,CAC5D,GAAqC,UAAjCupE,EAAI4rE,mBAAmBv0L,GACzB,OACK,GAAIi8V,GAASj8V,KAAUy3X,GAAmBz3X,GAG/C,OAFA2tJ,EAAIK,SAAShuJ,EAAM,QACnBopI,EAAU0kB,OAAOH,EAGrB,CACF,GAEI+pO,GAA0B,CAAC13X,EAAMo/C,EAAMu4U,KAC3C,GAAI33X,EAAM,CACR,MAAM43X,EAAWx4U,EAAO,cAAgB,kBACxC,IAAKp/C,EAAO23X,EAAM33X,EAAOA,EAAK43X,GAAW53X,EAAMA,EAAOA,EAAK43X,GACzD,GAAIl8B,GAAY17V,KAAUy3X,GAAmBz3X,GAC3C,OAAOA,CAGb,CACgB,EAEZ63X,GAAgB,CAACz+X,EAAQ4G,MAAW5G,EAAO0wL,uBAAuB9pL,EAAK4oH,SAASnwH,gBAAkB2nW,GAAmBhnW,EAAQ4G,GAC7H45G,GAAU,CAACm5L,EAAI70P,EAAQyxE,IACpBojL,EAAG35S,OAAOm0L,aAAarvI,EAAQyxE,GAElC8nQ,GAAqB,CAACz3X,EAAM83X,GAAc,KAC9C,GAAI9zQ,EAAchkH,IAASi8V,GAASj8V,GAAO,CACzC,MAAM6G,EAAOixX,EAAc93X,EAAK6G,KAAK7O,QAAQ,KAAM,QAAUgI,EAAK6G,KAClE,OAAO+zV,GAAiB/zV,EAC1B,CACE,OAAO,CACT,EAWIkxX,GAAyB,CAAC/uP,EAAQhpI,KACtC,MAAM2oH,EAAMqgB,EAAOrgB,IACnB,OAAOsuQ,GAAgBj3X,IAA0C,UAAjC2oH,EAAI4rE,mBAAmBv0L,IARzB,EAACgpI,EAAQhpI,KACvC,MAAMg4X,EAAmB,2BACnBC,EAA4BrO,GAA6B5gP,GACzDloI,EAAWu2V,GAAU4gC,GAA6BD,EAAmB,GAAIA,KAAsBC,IACrG,OAAOxsQ,GAAK1B,GAAaS,QAAQxqH,GAAOc,EAAS,EAI2Bo3X,CAAwBlvP,EAAQhpI,IAAiE,IAAxD2oH,EAAIrsH,OAAO,2BAA4B0D,GAAMqE,MAAY,EAE1K8zX,GAAc,CAAChhY,EAAOihY,IACtB5/W,EAAWrhB,GACNA,EAAMihY,IACJp0Q,EAAco0Q,KACvBjhY,EAAQA,EAAMa,QAAQ,WAAW,CAAC2hB,EAAKxe,IAC9Bi9X,EAAKj9X,IAASwe,KAGlBxiB,GAEHkhY,GAAS,CAACC,EAAMjpB,KAEpBA,EAAOA,GAAQ,GACfipB,EAAO,KAFPA,EAAOA,GAAQ,IAEG1vQ,UAAY0vQ,GAC9BjpB,EAAO,IAAMA,EAAKzmP,UAAYymP,GACvBipB,EAAK7/X,gBAAkB42W,EAAK52W,eAE/Bg/K,GAAsB,CAACtgL,EAAOgE,KAClC,GAAI8oH,EAAW9sH,GACb,OAAO,KACF,CACL,IAAIohY,EAAW7hX,OAAOvf,GAUtB,MATa,UAATgE,GAA6B,oBAATA,IACtBo9X,EAAWzqB,GAAgByqB,IAEhB,eAATp9X,GAAmC,MAAVhE,IAC3BohY,EAAW,QAEA,eAATp9X,IACFo9X,EAAWA,EAASvgY,QAAQ,UAAW,IAAIA,QAAQ,QAAS,MAEvDugY,CACT,GAEItzU,GAAW,CAAC0jE,EAAK3oH,EAAM7E,KAC3B,MAAM2qB,EAAQ6iG,EAAI1jE,SAASjlD,EAAM7E,GACjC,OAAOs8K,GAAoB3xJ,EAAO3qB,EAAK,EAEnCq9X,GAAoB,CAAC7vQ,EAAK3oH,KAC9B,IAAIy4X,EASJ,OARA9vQ,EAAIwgB,UAAUnpI,GAAMoT,KACdsoV,GAAYtoV,KACdqlX,EAAa9vQ,EAAI1jE,SAAS7xC,EAAG,qBACpBqlX,GAA6B,SAAfA,KAKpBA,CAAU,EAEbC,GAAe,CAAC/vQ,EAAK3oH,EAAMc,IACxB6nH,EAAImvD,WAAW93K,EAAMc,EAAU6nH,EAAIyhE,WAEtCuuM,GAAoB,CAAC3vP,EAAQgwB,EAAYrrD,KAC7C,MAAMxrC,EAAU6mE,EAAO/hH,UAAUvwB,IAAIsiK,GACrC,OAAOh1C,EAAc7hD,IAAYkjD,EAAOljD,EAASwrC,EAAU,EAevDirR,GAAoB,CAAC5vP,EAAQgwB,EAAY6/N,KAC7C,MAAM50L,EAAY,CAChB,SACA,QACA,WACA,aACA,SACA,WAEI60L,EAAYlqV,GAAU+nT,GAAS/nT,GAAQ,CAAC32C,EAAGlB,IAAQsuH,EAAO4+E,GAAW80L,GAAYA,IAAahiY,MACpG,OAAO4hY,GAAkB3vP,EAAQgwB,GAAYggO,IAC3C,MAAMC,EAAeH,EAAUE,GAC/B,OAAOL,GAAkB3vP,EAAQ6vP,GAAiBK,IAChD,MAAMC,EAAeL,EAAUI,GAC/B,MAlvQU,EAACz0V,EAAI43J,EAAI3nK,EAAKkhU,IAAUH,EAAS/gU,GAAIA,GAAG+P,EAAI43J,GAkvQ/C+8L,CAAQH,EAAcE,EAAa,GAC1C,GACF,EAEE1iF,GAAgB7nQ,GAAUqsF,GAAkBrsF,EAAQ,SAGpD8nQ,GAAmB9nQ,GAAUqsF,GAAkBrsF,EAAQ,YACvD4nQ,GAAiB5nQ,GAAUqsF,GAAkBrsF,EAAQ,UAErDyqV,GAAyBzqV,GAAU8nQ,GAAiB9nQ,KAA6B,IAAlBA,EAAO8uM,SAAqB84D,GAAe5nQ,GAe1G0qV,GAAwBt5X,GAdEA,KAC9B,MAAMD,EAAQ,GACd,IAAIs4S,EAAWr4S,EACf,KAAOq4S,GAAU,CACf,GAAI4jD,GAAS5jD,IAAaA,EAASxxS,OAAS62W,IAAUrlE,EAASjuL,WAAW/lH,OAAS,EACjF,MAAO,GAELq3V,GAAYrjD,IACdt4S,EAAM/I,KAAKqhT,GAEbA,EAAWA,EAASzrL,UACtB,CACA,OAAO7sH,CAAK,EAGLw5X,CAAwBv5X,GAAMqE,OAAS,EAE1Cm1X,GAA4BhiY,GACzBw8X,GAAYx8X,EAAQmxH,MAAQ2wQ,GAAsB9hY,EAAQmxH,KAG7DmsE,GAAiB4gM,GACjB+D,GAAef,GACfgB,GAAmBjC,GACnB5tM,GAAcguM,GAId8B,GAA4B,CAAChxQ,EAAK3oH,KACtC,IAAIk+C,EAASl+C,EACb,KAAOk+C,GAAQ,CACb,GAAIw9S,GAAYx9S,IAAWyqE,EAAI4rE,mBAAmBr2I,GAChD,MAA0C,UAAnCyqE,EAAI4rE,mBAAmBr2I,GAAsBA,EAASl+C,EAE/Dk+C,EAASA,EAAOxtB,UAClB,CACA,OAAO1wB,CAAI,EAEP45X,GAAW,CAACxkY,EAAO4K,EAAM8yC,EAAQ66D,KACrC,MAAMh0F,EAAM3Z,EAAK6G,KACjB,GAAIzR,GACF,IAAK,IAAI0kB,EAAIg5B,EAAQh5B,EAAI,EAAGA,IAC1B,GAAI6zF,EAAUh0F,EAAIrhB,OAAOwhB,EAAI,IAC3B,OAAOA,OAIX,IAAK,IAAIA,EAAIg5B,EAAQh5B,EAAIH,EAAItV,OAAQyV,IACnC,GAAI6zF,EAAUh0F,EAAIrhB,OAAOwhB,IACvB,OAAOA,EAIb,OAAQ,CAAC,EAEL+/W,GAAY,CAACzkY,EAAO4K,EAAM8yC,IAAW8mV,GAASxkY,EAAO4K,EAAM8yC,GAAQ3/B,GAAKwiX,GAAOxiX,IAAM0iX,GAAa1iX,KAClG2mX,GAAc,CAAC1kY,EAAO4K,EAAM8yC,IAAW8mV,GAASxkY,EAAO4K,EAAM8yC,EAAQ6qT,IACrEo8B,GAAmB,CAACpxQ,EAAKr+G,EAAMu5C,EAAW/Q,EAAQ19C,EAAO4kY,KAC7D,IAAIC,EACJ,MAAMxrC,EAAW9lO,EAAIwgB,UAAUtlF,EAAW8kE,EAAI2gB,UAAYh/H,EACpDouV,EAAO,CAAC70S,EAAW/Q,EAAQ2zE,KAC/B,MAAMyzQ,EAAa3d,GAAW5zP,GACxBw0D,EAAS/nL,EAAQ8kY,EAAWxd,UAAYwd,EAAWvd,SACzD,OAAOj4P,EAASlwH,KAAK2oL,EAAOt5H,EAAW/Q,GAAQ,CAACvzB,EAAM+1D,IAChDw/G,GAAev1K,EAAKmR,aACd,GAERupW,EAAe16W,EACRknG,EAAKrxH,EAAOmqB,EAAM+1D,KAE1Bm5Q,GAAU,EAGf,OADoBiK,EAAK70S,EAAW/Q,EAAQ+mV,IACzB38T,MAAKrlD,GAAUmiX,EAAwBthC,EAAK7gV,EAAOgsC,UAAWhsC,EAAOi7B,QAAU19C,GAAS,EAAI,GAAI0kY,IAAep1Q,EAAS/iH,KAAKkW,KAAS+tG,SAAQ,IAAMq0Q,EAAev1Q,EAAS/iH,KAAK,CAClMkiD,UAAWo2U,EACXnnV,OAAQ19C,EAAQ,EAAI6kY,EAAa51X,SAC9BqgH,EAASE,QAAO,EAEjBu1Q,GAAuB,CAACxxQ,EAAKyxQ,EAAYzsO,EAAK9pG,EAAW02S,KAC7D,MAAMn+L,EAAUv4G,EAAU02S,GACtB0B,GAASp4S,IAAcwzS,GAAUxzS,EAAUh9C,OAASu1J,IACtDv4G,EAAYu4G,GAEd,MAAMvwC,EAAU4tQ,GAAa9wQ,EAAK9kE,GAClC,IAAK,IAAI/pC,EAAI,EAAGA,EAAI+xG,EAAQxnH,OAAQyV,IAClC,IAAK,IAAI6E,EAAI,EAAGA,EAAIy7W,EAAW/1X,OAAQsa,IAAK,CAC1C,MAAM07W,EAAYD,EAAWz7W,GAC7B,KAAIqlG,EAAcq2Q,EAAUh/N,YAAcg/N,EAAUh/N,YAAc1N,EAAI0N,aAGlEq7I,GAAiB2jF,IAAc1xQ,EAAI2G,GAAGzD,EAAQ/xG,GAAIugX,EAAUv5X,WAC9D,OAAO+qH,EAAQ/xG,EAEnB,CAEF,OAAO+pC,CAAS,EAEZy2U,GAAoB,CAAC3xQ,EAAKyxQ,EAAYv2U,EAAW02S,KACrD,IAAI5yV,EACJ,IAAI3H,EAAO6jD,EACX,MAAM/T,EAAO64E,EAAIyhE,UACXx7I,EAASwrV,EAAW,GAI1B,GAHI3jF,GAAc7nQ,KAChB5uC,EAAO4uC,EAAOi+E,QAAU,KAAOlE,EAAIwgB,UAAUtlF,EAAWjV,EAAOgmJ,MAAO9kJ,KAEnE9vC,EAAM,CACT,MAAMu6X,EAAoE,QAAvD5yX,EAAKghH,EAAIwgB,UAAUtlF,EAAW,2BAAwC,IAAPl8C,EAAgBA,EAAKmoC,EACvG9vC,EAAO2oH,EAAIwgB,UAAU8yN,GAASp4S,GAAaA,EAAUnzB,WAAamzB,GAAW7jD,GAAQA,IAAS8vC,GAAQ+5I,GAAYlhE,EAAIvvH,OAAQ4G,IAAOu6X,EACvI,CAIA,GAHIv6X,GAAQy2S,GAAc7nQ,IAAWA,EAAOi+E,UAC1C7sH,EAAOy5X,GAAa9wQ,EAAK3oH,EAAM,SAASyI,UAAU,IAAMzI,IAErDA,EAEH,IADAA,EAAO6jD,EACA7jD,GAAQA,EAAKu6V,KAAiB5xO,EAAI2gB,QAAQtpI,EAAKu6V,MACpDv6V,EAAOA,EAAKu6V,IACR89B,GAAOr4X,EAAM,SAKrB,OAAOA,GAAQ6jD,CAAS,EAEpB22U,GAAsB,CAAC7xQ,EAAK74E,EAAM+T,EAAW02S,KACjD,MAAMr8S,EAAS2F,EAAUnzB,WACzB,OAAIszF,EAAcngE,EAAU02S,QAEjBr8S,IAAWpO,IAAQm0E,EAAW/lE,KAAWyqE,EAAI2gB,QAAQprF,KAGvDs8U,GAAoB7xQ,EAAK74E,EAAMoO,EAAQq8S,GAChD,EAEIkgC,GAAsB,CAAC9xQ,EAAKyxQ,EAAYv2U,EAAW/Q,EAAQ19C,KAC/D,IAAI8oD,EAAS2F,EACb,MAAM02S,EAAcnlW,EAAQ,kBAAoB,cAC1C06C,EAAO64E,EAAIyhE,UACjB,GAAI6xK,GAASp4S,KAAe61U,GAAiB71U,KACvCzuD,EAAQ09C,EAAS,EAAIA,EAAS+Q,EAAUh9C,KAAKxC,QAC/C,OAAOw/C,EAGX,KAAO3F,GAAQ,CACb,IAAKk8U,EAAW,GAAGM,cAAgB/xQ,EAAI2gB,QAAQprF,GAC7C,OAAOA,EAET,IAAK,IAAIk+G,EAAUl+G,EAAOq8S,GAAcn+L,EAASA,EAAUA,EAAQm+L,GAAc,CAC/E,MAAMu9B,EAAc77B,GAAS7/L,KAAao+N,GAAoB7xQ,EAAK74E,EAAMssH,EAASm+L,GAClF,IAAKzlK,GAAe14B,MA1HjBigM,GADSr8V,EA2H+Bo8J,KA1HxBp8J,EAAK3D,aAAa,mBAAsB2D,EAAKksH,eA0HRwtQ,GAAiBt9N,EAAS07N,GAChF,OAAO55U,CAEX,CACA,GAAIA,IAAWpO,GAAQoO,EAAOxtB,aAAeof,EAAM,CACjD+T,EAAY3F,EACZ,KACF,CACAA,EAASA,EAAOxtB,UAClB,CApIgB1wB,MAqIhB,OAAO6jD,CAAS,EAEZ82U,GAAyB92U,GAAaixI,GAAejxI,EAAUnzB,aAAeokK,GAAejxI,GAC7F+2U,GAAY,CAACjyQ,EAAKglC,EAAKysO,EAAYS,GAAuB,KAC9D,IAAI,eAACjgO,EAAc,YAAEC,EAAW,aAAEC,EAAY,UAAEC,GAAapN,EAC7D,MAAM/+G,EAASwrV,EAAW,GAqC1B,GApCI1+B,GAAY9gM,IAAmBA,EAAezwC,kBAChDywC,EAAiB4kN,GAAU5kN,EAAgBC,GACvCohM,GAASrhM,KACXC,EAAc,IAGd6gM,GAAY5gM,IAAiBA,EAAa3wC,kBAC5C2wC,EAAe0kN,GAAU1kN,EAAcnN,EAAI0N,UAAYN,EAAYA,EAAY,GAC3EkhM,GAASnhM,KACXC,EAAYD,EAAaj0J,KAAKxC,SAGlCu2J,EAAiB++N,GAA0BhxQ,EAAKiyC,GAChDE,EAAe6+N,GAA0BhxQ,EAAKmyC,GAC1C6/N,GAAuB//N,KACzBA,EAAiBk6B,GAAel6B,GAAkBA,EAAiBA,EAAelqI,WAEhFkqI,EADEjN,EAAI0N,UACWT,EAAe3uC,iBAAmB2uC,EAElCA,EAAe1uC,aAAe0uC,EAE7CqhM,GAASrhM,KACXC,EAAclN,EAAI0N,UAAYT,EAAev2J,OAAS,IAGtDs2X,GAAuB7/N,KACzBA,EAAeg6B,GAAeh6B,GAAgBA,EAAeA,EAAapqI,WAExEoqI,EADEnN,EAAI0N,UACSP,EAAa5uC,aAAe4uC,EAE5BA,EAAa7uC,iBAAmB6uC,EAE7CmhM,GAASnhM,KACXC,EAAYpN,EAAI0N,UAAY,EAAIP,EAAaz2J,SAG7CspJ,EAAI0N,UAAW,CACE0+N,GAAiBpxQ,EAAKA,EAAIyhE,UAAWxvB,EAAgBC,GAAa,EAAMggO,GAChFx2V,MAAK,EAAEwf,YAAW/Q,aAC3B8nH,EAAiB/2G,EACjBg3G,EAAc/nH,CAAM,IAELinV,GAAiBpxQ,EAAKA,EAAIyhE,UAAWtvB,EAAcC,GAAW,EAAO8/N,GAC7Ex2V,MAAK,EAAEwf,YAAW/Q,aACzBgoH,EAAej3G,EACfk3G,EAAYjoH,CAAM,GAEtB,CAuCA,OAtCI0jQ,GAAe5nQ,IAAWA,EAAO8rV,gBAC9BlkF,GAAe5nQ,IAAaqtT,GAASrhM,IAAmC,IAAhBC,IAC3DD,EAAiB6/N,GAAoB9xQ,EAAKyxQ,EAAYx/N,EAAgBC,GAAa,IAEhF27I,GAAe5nQ,IAAaqtT,GAASnhM,IAAiBC,IAAcD,EAAaj0J,KAAKxC,SACzFy2J,EAAe2/N,GAAoB9xQ,EAAKyxQ,EAAYt/N,EAAcC,GAAW,KAG7Es+N,GAAuBzqV,KACzBgsH,EAAiBu/N,GAAqBxxQ,EAAKyxQ,EAAYzsO,EAAKiN,EAAgB,mBAC5EE,EAAeq/N,GAAqBxxQ,EAAKyxQ,EAAYzsO,EAAKmN,EAAc,iBAEtE27I,GAAc7nQ,IAAW8nQ,GAAiB9nQ,MAC5CgsH,EAAiB0/N,GAAkB3xQ,EAAKyxQ,EAAYx/N,EAAgB,mBACpEE,EAAew/N,GAAkB3xQ,EAAKyxQ,EAAYt/N,EAAc,eAC5D27I,GAAc7nQ,KACX+5E,EAAI2gB,QAAQsxB,KACfA,EAAiB6/N,GAAoB9xQ,EAAKyxQ,EAAYx/N,EAAgBC,GAAa,GAC/EohM,GAASrhM,KACXC,EAAc,IAGblyC,EAAI2gB,QAAQwxB,KACfA,EAAe2/N,GAAoB9xQ,EAAKyxQ,EAAYt/N,EAAcC,GAAW,GACzEkhM,GAASnhM,KACXC,EAAYD,EAAaj0J,KAAKxC,WAKlCq3V,GAAY9gM,IAAmBA,EAAelqI,aAChDmqI,EAAclyC,EAAI6qE,UAAU54B,GAC5BA,EAAiBA,EAAelqI,YAE9BgrU,GAAY5gM,IAAiBA,EAAapqI,aAC5CqqI,EAAYpyC,EAAI6qE,UAAU14B,GAAgB,EAC1CA,EAAeA,EAAapqI,YAEvB,CACLkqI,iBACAC,cACAC,eACAC,YACD,EAGG+/N,GAAS,CAACnyQ,EAAKglC,EAAK7uJ,KACxB,IAAI6I,EACJ,MAAMkzJ,EAAclN,EAAIkN,YAClBD,EAAiB4kN,GAAU7xN,EAAIiN,eAAgBC,GAC/CE,EAAYpN,EAAIoN,UAChBD,EAAe0kN,GAAU7xN,EAAImN,aAAcC,EAAY,GACvDotC,EAAUpoM,IACd,MAAMg7X,EAAYh7X,EAAM,GACpBk8V,GAAS8+B,IAAcA,IAAcngO,GAAkBC,GAAekgO,EAAUl0X,KAAKxC,QACvFtE,EAAMqrB,OAAO,EAAG,GAElB,MAAMg9G,EAAWroI,EAAMA,EAAMsE,OAAS,GAItC,OAHkB,IAAd02J,GAAmBh7J,EAAMsE,OAAS,GAAK+jI,IAAa0yB,GAAgBmhM,GAAS7zN,IAC/EroI,EAAMqrB,OAAOrrB,EAAMsE,OAAS,EAAG,GAE1BtE,CAAK,EAERi7X,EAAkB,CAACh7X,EAAM7E,EAAMw5L,KACnC,MAAME,EAAW,GACjB,KAAO70L,GAAQA,IAAS20L,EAAS30L,EAAOA,EAAK7E,GAC3C05L,EAAS79L,KAAKgJ,GAEhB,OAAO60L,CAAQ,EAEXomM,EAAe,CAACj7X,EAAM8vC,IAAS64E,EAAIwgB,UAAUnpI,GAAMA,GAAQA,EAAK0wB,aAAeof,GAAMA,GACrForV,EAAe,CAACxmM,EAAWC,EAASv1I,KACxC,MAAMm7S,EAAcn7S,EAAO,cAAgB,kBAC3C,IAAK,IAAIp/C,EAAO00L,EAAWx2I,EAASl+C,EAAK0wB,WAAY1wB,GAAQA,IAAS20L,EAAS30L,EAAOk+C,EAAQ,CAC5FA,EAASl+C,EAAK0wB,WACd,MAAMmkK,EAAWmmM,EAAgBh7X,IAAS00L,EAAY10L,EAAOA,EAAKu6V,GAAcA,GAC5E1lK,EAASxwL,SACN+6C,GACHy1I,EAASpsL,UAEX3J,EAASqpM,EAAQtT,IAErB,GAEF,GAAIj6B,IAAmBE,EACrB,OAAOh8J,EAASqpM,EAAQ,CAACvtC,KAE3B,MAAMrrC,EAA2E,QAA/D5nH,EAAKghH,EAAI+tP,mBAAmB97M,EAAgBE,UAAkC,IAAPnzJ,EAAgBA,EAAKghH,EAAIyhE,UAClH,GAAIzhE,EAAI4uD,UAAU3c,EAAgBE,GAChC,OAAOogO,EAAatgO,EAAgBrrC,GAAU,GAEhD,GAAI5G,EAAI4uD,UAAUzc,EAAcF,GAC9B,OAAOsgO,EAAapgO,EAAcvrC,GAEpC,MAAM6kE,EAAa6mM,EAAargO,EAAgBrrC,IAAaqrC,EACvDugO,EAAWF,EAAangO,EAAcvrC,IAAaurC,EACzDogO,EAAatgO,EAAgBw5B,GAAY,GACzC,MAAMS,EAAWmmM,EAAgB5mM,IAAex5B,EAAiBw5B,EAAaA,EAAWloE,YAAa,cAAeivQ,IAAargO,EAAeqgO,EAASjvQ,YAAcivQ,GACpKtmM,EAASxwL,QACXvF,EAASqpM,EAAQtT,IAEnBqmM,EAAapgO,EAAcqgO,EAAS,EAGhCC,GAAc,CAClB,iDACA,eACA,4BACA,qBACA,cACA,qBAGIv+X,GAAU,CAACmsI,EAAQne,EAAMwwQ,EAAUzyQ,IAAa1qE,GAAO2sE,GAAM/F,MAAK,IAAM,aAAY5mE,GACvE,OAAb0qE,GAFciC,IAAQiuO,GAASjuO,IAASo8C,GAAMp8C,KAAU6yP,GAEnC4d,CAAYzwQ,GAC5B,QA54HUA,IAAQguO,GAAYhuO,IAAS5rH,GAAI4rH,EAAM8vP,MA64H/C4gB,CAAa1wQ,GACf,WACEmpQ,GAAYnpQ,EAAKlC,KACnB,QACEtD,EAAO+1Q,IAAat6X,GAAY2qH,GAAKZ,EAAM/pH,KAC7C,cACG84G,GAAQovB,EAAQqyP,EAAUzyQ,IAAchP,GAAQovB,EAAQ7tI,GAAK+iD,GAASm9U,GAGzE,QAFA,kBAYLG,GAAkB,CAAC3wQ,EAAM4wQ,EAAW50X,EAAMq0W,EAAgBwgB,EAAUC,KACxE,MAAM,IAACj4V,EAAM+3V,KAAcG,GAAa/0X,EACxCoiK,GAAMp+C,EAAM8vP,MACZ1hB,GAAMpuO,EAAM,GAAIgwP,OAAuBn3U,GACvCu1T,GAAMpuO,EAAM,GAAI+vP,OAAqBM,GACrC,MAAM,WAAC9/W,EAAa,CAAC,EAAC,QAAEwV,EAAU,IAAM8qX,EAASh4V,EAAKk4V,GAGtD,GAFAryQ,GAASsB,EAAMzvH,GAjwHL,EAAC5D,EAASoZ,KACpBulV,EAAOvlV,GAASmO,IACdkqJ,GAAMzxK,EAASunB,EAAE,GACjB,EA+vHFvrB,CAAIq3H,EAAMj6G,GACN+qX,EAAkB,CAChB/qX,EAAQvM,OAAS,GACnB40V,GAAMpuO,EAAM,GAAIkwP,OAA4BnqW,EAAQ3Z,KAAK,MAE3D,MAAM4kY,EAAiB/kY,GAAKsE,GACxBygY,EAAex3X,OAAS,GAC1B40V,GAAMpuO,EAAM,GAAImwP,OAA+B6gB,EAAe5kY,KAAK,KAEvE,GAEI6kY,GAAyBjxQ,IAC7BoC,GAASpC,EAAM8vP,MACfzhB,GAASruO,EAAM,GAAIgwP,QACnB3hB,GAASruO,EAAM,GAAI+vP,QACnB1hB,GAASruO,EAAM,GAAIiwP,QACnB,MAAMihB,EAAkBryQ,GAAOmB,EAAM,GAAImwP,QAA+BplX,KAAI6qC,GAASA,EAAMvmC,MAAM,OAAMqrH,MAAM,IACvGy2Q,EAAgBtyQ,GAAOmB,EAAM,GAAIkwP,QAA4BnlX,KAAI6qC,GAASA,EAAMvmC,MAAM,OAAMqrH,MAAM,IA9wHzF,IAAC/tH,EA+wHhB2+V,EAAO4lC,GAAiB5gY,GAAQ+9V,GAASruO,EAAM1vH,KA/wH/B3D,EAgxHPqzH,EA/wHTsrO,EA+wHe6lC,GA/wHCj9W,IACdkuG,GAASz1H,EAASunB,EAAE,IA+wHtBm6U,GAASruO,EAAM,GAAIkwP,QACnB7hB,GAASruO,EAAM,GAAImwP,OAA8B,EAE7CihB,GAAiB,CAACC,EAAMx4V,EAAK78B,EAAMq0W,EAAgBwgB,KACvD,MAAMS,EAASpyQ,GAAaM,QAAQ,OAAQ6xQ,GAE5C,OADAV,GAAgBW,EAAQz4V,EAAK78B,EAAMq0W,EAAgBwgB,GAAU,GACtDS,CAAM,EAETC,GAAW,CAACpzP,EAAQ2kB,EAAKjqH,EAAKw3U,EAAgBwgB,EAAU70X,KAC5D,MAAMw1X,EAAc,GACdF,EAASF,GAAejzP,EAAOwK,SAAU9vG,EAAK78B,EAAMq0W,EAAgBwgB,GACpE7uQ,EAAUq1E,KACVo6L,EAAgB,KACpBzvQ,EAAQ3mH,OAAO,EAQXq2X,EAAkBlqQ,IACtB8jO,EAAO9jO,EAAOmqQ,EAAe,EAEzBA,EAAiB3xQ,IAErB,OADYhuH,GAAQmsI,EAAQne,EAAM,OAAQ1vH,GAAK0vH,KAE/C,IAAK,gBAAiB,CAClByxQ,IACA,MAAMnvQ,EAAW+B,GAAWrE,GAC5B0xQ,EAAgBpvQ,GAChBmvQ,IACA,KACF,CACF,IAAK,cACDA,IACAd,GAAgB3wQ,EAAMnnF,EAAK78B,EAAMq0W,EAAgBwgB,GAAU,GAC3D,MAEJ,IAAK,QAAS,CACV,MAAMvmW,EAzBmB03F,EAAQn2H,MAAMgvH,YAAW,KACtD,MAAMgI,EAAK0uP,GAAU+f,GAGrB,OAFAE,EAAYrlY,KAAK02H,GACjBb,EAAQj2H,IAAI82H,GACLA,CAAE,IAsBL46E,GAAOz9E,EAAM11F,GACb,KACF,EACF,EAUF,OAJA2lW,GAAO9xP,EAAOrgB,IAAKglC,GAAK5tJ,IACtBu8X,IALmBv8X,KACnB,MAAMsyH,EAAQ6jO,EAAMn2V,EAAOgqH,GAAaS,SACxC+xQ,EAAgBlqQ,EAAM,EAItBoqQ,CAAa18X,EAAM,IAEds8X,CAAW,EAEdK,GAAuB,CAAC1zP,EAAQ7tI,EAAM6zK,EAAUnoK,KACpDmiI,EAAOoqB,YAAY+rB,UAAS,KAC1B,MAAM/1C,EAAYJ,EAAOI,UACnBuzP,EAAavzP,EAAUwjC,SACvBgwN,EAAmB1G,GAAmBltP,GAAQ3kI,OAAS,EACvDw4X,EAAYviQ,GAAW,kBAI7B,GAHIqiQ,EAAWthO,YAAcuhO,GA/FX,EAAC5zP,EAAQ2kB,KAC7B,MAAMpsI,EAAIq5W,GAAU5xP,EAAOrgB,IAAKglC,EAAK,CAAC,CAAEgoB,OAAQ,UAChDhoB,EAAIK,SAASzsI,EAAEq5I,eAAgBr5I,EAAEs5I,aACjClN,EAAIM,OAAO1sI,EAAEu5I,aAAcv5I,EAAEw5I,WAC7B/xB,EAAOI,UAAU0kB,OAAOH,EAAI,EA4FxBmvO,CAAc9zP,EAAQ2zP,GAEpBvzP,EAAUwjC,SAASvR,YAAcuhO,EAAkB,CACrD,MAAM/vQ,EAAUovQ,GAAejzP,EAAOwK,SAAUqpP,EAAWh2X,EAAM1L,EAAM6zK,EAAS0sN,UAChFjrQ,GAAM5D,EAAS4tO,IACfrxN,EAAUwjC,SAASw2M,WAAWv2P,EAAQlE,KACtCygB,EAAU9sI,OAAOuwH,EAAQlE,IAC3B,MACEgsL,GAASvrK,GAAW,GAAO,KACzBwtP,GAAY5tP,GAAQwrC,IAClB4nN,GAASpzP,EAAQwrC,EAAcqoN,EAAW1hY,EAAM6zK,EAAS0sN,SAAU70X,EAAK,GACxE,GAEN,GACA,EAGEk2X,GAAY/zP,IAChB,MAAMjnE,EAp4HS,MACf,MAAMslG,EAAc,CAAC,EASrB,MAAO,CACLtzJ,SATe,CAAC5Y,EAAM6zK,KACtB3H,EAAYlsK,GAAQ,CAClBA,OACA6zK,WACD,EAMDl9C,OAJa32H,GAAQy1H,GAAMy2C,EAAalsK,GAAMvF,KAAImG,GAAKA,EAAEizK,WAKzDgtM,SAJe,IAAMllX,GAAKuwK,GAK3B,EAs3HgB21N,GAr6HH,EAACh0P,EAAQjnE,KACvB,MAAMk7T,EAAmBriB,KACnBsiB,EAAqBl9X,GAAQ0kH,EAASlwH,KAAKwL,EAAK6pH,KAAKozQ,IAAmB//T,KAAK6E,EAAS+vD,QACtFgqQ,EAAyB97X,IAC7B,IAAI2H,EAAI+/I,EACR1nJ,EAAK6pH,KAAKgxP,KAAoB,MAC9B76W,EAAK6pH,KAAK+wP,KAAkB,MAC5B56W,EAAK6pH,KAAKixP,KAAwB,MAClC,MAAMihB,EAAkBr3Q,EAASlwH,KAAKwL,EAAK6pH,KAAKmxP,OAA6BplX,KAAI6qC,GAASA,EAAMvmC,MAAM,OAAMqrH,MAAM,IAC5Gy2Q,EAAgBt3Q,EAASlwH,KAAKwL,EAAK6pH,KAAKkxP,OAA0BnlX,KAAI6qC,GAASA,EAAMvmC,MAAM,OAAMqrH,MAAM,IAC7G4wO,EAAO4lC,GAAiB5gY,GAAQ6E,EAAK6pH,KAAK1uH,EAAM,QAChD,MAAM4tK,EAAoG,QAAvFrhB,EAAmC,QAA7B//I,EAAK3H,EAAK6pH,KAAK,gBAA6B,IAAPliH,OAAgB,EAASA,EAAGzN,MAAM,YAAyB,IAAPwtJ,EAAgBA,EAAK,GACjIy1O,EAAex/Q,GAAWorD,EAAW,CAAC4xM,MAAc9kX,OAAOmmY,IACjEh8X,EAAK6pH,KAAK,QAASszQ,EAAa94X,OAAS,EAAI84X,EAAalmY,KAAK,KAAO,MACtE+I,EAAK6pH,KAAKkxP,KAAyB,MACnC/6W,EAAK6pH,KAAKmxP,KAA4B,KAAK,EAE7ChyO,EAAOiL,WAAW44B,YAAYiuM,MAC9B9xO,EAAOiL,WAAWmpP,mBAAmBH,GAAkBl9X,IACrD,IAAK,MAAMC,KAAQD,EACjBm9X,EAAmBl9X,GAAMqkC,MAAK2qI,KACA,IAAxBA,EAASqlL,aACO,SAAdr0V,EAAK7E,KACP6E,EAAKktH,SAEL4uQ,EAAuB97X,GAE3B,GAEJ,GACA,EAw4HFq9X,CAAQr0P,EAAQjnE,GAChB,MAAM0f,EAAU+5R,GAAQxyO,EAAQjnE,GAC1BkhS,EAAS75O,GAAM,QACfk0Q,EAAoBh/X,IACxB63V,EAAO73V,GAAU9G,IACXyrW,EAAOzrW,GACT01H,GAAO11H,GAEPskY,GAAuBtkY,EACzB,GACA,EAEJ,MAAO,CACLuc,SAAU,CAAC5Y,EAAM6zK,KACfjtG,EAAShuD,SAAS5Y,EAAM6zK,EAAS,EAEnCotN,SAAU,CAACjhY,EAAM0L,KACfk7D,EAAS+vD,OAAO32H,GAAMkpC,MAAK2qI,IACzB0tN,GAAqB1zP,EAAQ7tI,EAAM6zK,EAAUnoK,EAAK,GAClD,EAEJ02X,kBAAmB,CAACpiY,EAAM2D,KACxB2iF,EAAQlX,YAAYpvE,EAAM2D,EAAS,EAErC4rD,OAAQvvD,IACNg1I,GAASnH,EAAQtkB,EAAS/iH,KAAKxG,IAAOkpC,MAAK,EAAE/lC,eAC3C,MAAMiiL,EAAWv3C,EAAOI,UAAUo3C,cAClC88M,EAAkBh/X,GAClB0qI,EAAOI,UAAUw3C,eAAeL,EAAS,GACzC,EAEJi9M,UAAWriY,IACT,MAAMolL,EAAWv3C,EAAOI,UAAUo3C,cAClCk2K,GAAOpnV,GAAQ05H,EAAQ7tI,IAAO,CAACmD,EAAUrG,KACvCqlY,EAAkBh/X,EAAS,IAE7B0qI,EAAOI,UAAUw3C,eAAeL,EAAS,EAE3ClyK,OAAQlT,IACN,MAAMmhP,EAAYhtO,GAAQ05H,EAAQ7tI,GAClC,OAAO6gM,GAAMsgD,GAAWjqH,GAAS6jO,EAAM7jO,GAAOxH,GAAQA,EAAKlC,OAAK,EAEnE,EAGG80Q,GAAkBr0P,IACf,CACLo3C,YAAap8D,EAAMqxQ,GAAersP,GAClCw3C,eAAgBx8D,EAAMw8D,GAAgBx3C,KAG1Cq0P,GAAgB3oM,eAAiB4gM,GAEjC,MAAMgI,GAAkB,CAACx6U,EAASC,EAASlc,KACrCA,EAAMo0H,WAGDh2C,EAAOp+E,EAAMk/H,kBAAkBjvH,GAjjHvB,EAACA,EAAMgM,EAASC,IAAYD,GAAWhM,EAAKxiD,MAAQwuD,GAAWhM,EAAKviD,OAASwuD,GAAWjM,EAAK7tB,KAAO85B,GAAWjM,EAAKrE,OAijHrF8qV,CAAWzmV,EAAMgM,EAASC,KA2CtEy6U,GAAY,CAAC50P,EAAQ60P,EAAW3nY,KACpC8yI,EAAO7xH,SAAS0mX,EAAW3nY,EAAM,EAE7B4nY,GAAkB,CAAC90P,EAAQp6F,EAAQ5uC,EAAMo4X,KAC7CpvP,EAAO7xH,SAAS,cAAe,CAC7By3B,SACA5uC,OACAo4X,QACA,EAEE2F,GAAmB,CAAC/0P,EAAQp6F,EAAQ5uC,EAAMo4X,KAC9CpvP,EAAO7xH,SAAS,eAAgB,CAC9By3B,SACA5uC,OACAo4X,QACA,EAGE4F,GAAiB,CAACh1P,EAAQh9H,IAASg9H,EAAO7xH,SAAS,aAAcnL,GAEjEiyX,GAAiB,CAACj1P,EAAQh9H,IAASg9H,EAAO7xH,SAAS,aAAcnL,GAOjEkyX,GAAqC,CAACl1P,EAAQh9H,KAClDg9H,EAAO7xH,SAAS,iCAAkCnL,EAAK,EAanDmyX,GAA2B,CAACn1P,EAAQoxC,IAAUpxC,EAAO7xH,SAAS,uBAAwB,CAAEijK,UAGxFgkN,GAAK,CACTpjM,UAAW,EACXC,OAAQ,GACR8sC,KAAM,GACNN,MAAO,GACP42J,IAAK,GACLz2J,KAAM,GACNE,MAAO,GACPw2J,SAAU,GACVxjM,IAAK,EACL+sC,GAAI,GACJ02J,QAAS,GACTC,UAAW,GACXC,IAAK,GACLC,KAAM,GACNC,gBAAiBviY,GACRA,EAAEN,UAAYM,EAAER,SAAWQ,EAAEP,QAAUuiY,GAAGt2M,eAAe1rL,GAElE0rL,eAAgB1rL,GACPy7V,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,QAAUt5H,EAAET,QAAUS,EAAER,UAAYQ,EAAEP,QAItE+iY,GAAuB,oBAEvBx+W,GAAM9b,KAAK8b,IACX8rP,GAAU5nQ,KAAK2Y,MACf4hX,GAAgB,CACpBC,GAAI,CACF,EACA,GACC,GACA,GAEHC,GAAI,CACF,EACA,EACA,GACC,GAEHt9I,GAAI,CACF,EACA,EACA,EACA,GAEFu9I,GAAI,CACF,EACA,GACC,EACD,IAIEC,GAAmB,CAAC71P,EAAWJ,KACnC,MAAMrgB,EAAMqgB,EAAOrgB,IACbu2Q,EAAcl2P,EAAOwK,SACrB2rP,EAAernY,SACfslW,EAAcp0N,EAAO5tC,UAC3B,IAAIyiF,EAAauhN,EAAkBC,EAAcC,EAAgBC,EAC7DpkU,EAAQC,EAAoCu5G,EAAQE,EAAQzzI,EAAOo+V,EACnE37W,EACAyF,EACAm2W,EACAC,EACJ,MAAMC,EAAU9tQ,GAAO7N,EAAc6N,KAASyqO,GAAMzqO,IAAQlJ,EAAI2G,GAAGuC,EAAK,iBAClEg+P,EAAUh+P,GAAO8qO,GAAU9qO,IAAQlJ,EAAIytP,SAASvkP,EAAK,sBASrD+tQ,EAAyB/5M,IAC7B,MAAMpuL,EAASouL,EAAIpuL,OATc,EAACouL,EAAK5+I,KACvC,GAfiB4+I,IAAoB,cAAbA,EAAIvmL,MAAsD,IAA9BumL,EAAIvmL,KAAKsyB,QAAQ,SAejEy8S,CAAaxoJ,GAAM,CACrB,MAAM03F,EAAQ13F,EAAIjjI,QAAQ,GAC1B,OAAO+8U,EAAQ95M,EAAIpuL,UAAYimY,GAAgBngH,EAAMr6N,QAASq6N,EAAMp6N,QAASlc,EAC/E,CACE,OAAO04V,EAAQ95M,EAAIpuL,UAAYimY,GAAgB73M,EAAI3iI,QAAS2iI,EAAI1iI,QAASlc,EAC3E,EAII44V,CAA2Bh6M,EAAK78C,EAAOI,UAAUwjC,YAAciZ,EAAIkC,sBACrE/+C,EAAOI,UAAU9sI,OAAO7E,EAC1B,EAEIqoY,EAAmBjuQ,GACnBlJ,EAAIytP,SAASvkP,EAAK,uBAAyB7N,EAAc6N,EAAIykI,mBACxD,CACLzkI,EACAA,EAAIykI,mBAEG3tI,EAAI2G,GAAGuC,EAAK,gBACd,CAACA,EAAI1G,cAAc,QAEnB,CAAC0G,GAGN8/C,EAAc9/C,IAClB,MAAM/wH,EAAWioX,GAAkB//O,GACnC,SAAKloI,GAAYkoI,EAAOhkH,KAAK+wJ,gBAGe,UAAxClkD,EAAIx1H,aAAa,qBAGjBw1H,IAAQmX,EAAO5tC,YAGfutB,EAAIytP,SAASvkP,EAAK,uBAAyB7N,EAAc6N,EAAIykI,mBACxD7qI,GAAK1B,GAAaS,QAAQqH,EAAIykI,mBAAoBx1P,GAElD2qH,GAAK1B,GAAaS,QAAQqH,GAAM/wH,KACzC,EAmBIi/X,EAAc,CAACvoY,EAAS2D,EAAMhE,KAClC,GAAI6sH,EAAc7sH,GAAQ,CACxB,MAAMoY,EAAUuwX,EAAiBtoY,GACjC2+V,EAAO5mV,GAAS9X,IACVA,EAAOquB,MAAM3qB,KAAU6tI,EAAO5vI,OAAOwgH,QAAQniH,EAAOmxH,SAASnwH,cAAe0C,GAC9EwtH,EAAIliC,SAAShvF,EAAQ0D,EAAMhE,GAE3BwxH,EAAIyxE,UAAU3iM,EAAQ0D,EAAM,GAAKhE,EACnC,GAEJ,GAEI6oY,EAAkB,CAACC,EAAUp8W,EAAOyF,KACxCy2W,EAAYE,EAAU,QAASp8W,GAC/Bk8W,EAAYE,EAAU,SAAU32W,EAAO,EAEnC42W,EAAqB9jY,IACzB,IAAIonE,EAAQC,EAAQ08T,EAChBC,EAAeC,EACnB78T,EAASpnE,EAAEkkY,QAAUnlU,EACrBsI,EAASrnE,EAAEmkY,QAAUnlU,EACrBv3C,EAAQ2/C,EAAS87T,EAAe,GAAK3qN,EACrCrrJ,EAASm6C,EAAS67T,EAAe,GAAKzqN,EACtChxJ,EAAQA,EAAQ,EAAI,EAAIA,EACxByF,EAASA,EAAS,EAAI,EAAIA,EAExB62W,GADGR,EAAQ9hN,IAAgBgyM,EAAQhyM,MAAsD,IAArCmrM,GAAyBhgP,IAC7Do1P,GAAGO,gBAAgBviY,GAEpBgiY,GAAGO,gBAAgBviY,GAEhC+jY,IACE//W,GAAIojD,GAAUpjD,GAAIqjD,IACpBn6C,EAAS4iP,GAAQroP,EAAQud,GACzBvd,EAAQqoP,GAAQ5iP,EAAS8X,KAEzBvd,EAAQqoP,GAAQ5iP,EAAS8X,GACzB9X,EAAS4iP,GAAQroP,EAAQud,KAG7B4+V,EAAgBZ,EAAkBv7W,EAAOyF,GACzC82W,EAAgBd,EAAe5M,SAAS3zW,EAAIykD,EAC5C68T,EAAgBf,EAAe5M,SAAS/zW,EAAI8kD,EAC5C28T,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDC,EAAgBA,EAAgB,EAAIA,EAAgB,EACpD13Q,EAAI0yD,UAAUgkN,EAAc,CAC1B3qY,KAAM0rY,EACN/2W,IAAKg3W,EACLjhX,QAAS,UAEXigX,EAAa55W,UAAY5B,EAAQ,YAAcyF,EAC3Cg2W,EAAe,GAAK,GAAKF,EAAiBn7U,aAAepgC,GAC3D8kG,EAAIliC,SAAS24S,EAAkB,OAtHfoB,WAsHuC7rN,EAAS9wJ,IAE9Dy7W,EAAe,GAAK,GAAKF,EAAiBl7U,cAAgB56B,GAC5Dq/F,EAAIliC,SAAS24S,EAAkB,MAzHDqB,WAyHwB5rN,EAASvrJ,IAEjEk6C,EAAS45R,EAAYsjC,YAAcjB,EACnCh8T,EAAS25R,EAAYtlE,aAAe4nG,EAChCl8T,EAASC,IAAW,GACtBklD,EAAI0yD,UAAUgkN,EAAc,CAC1B3qY,KAAM0rY,EAAgB58T,EACtBn6C,IAAKg3W,EAAgB58T,IAGpB+7T,IAvQqB,EAACx2P,EAAQvxI,EAAQosB,EAAOyF,EAAQ82F,KAC5D4oB,EAAO7xH,SAAS,oBAAqB,CACnC1f,SACAosB,QACAyF,SACA82F,UACA,EAkQE61D,CAAsBjtC,EAAQ60C,EAAalJ,EAAQE,EAAQ,UAAYyqN,EAAenkY,MACtFqkY,GAAgB,EAClB,EAEImB,EAAiB,KACrB,MAAMC,EAAmBpB,EACzBA,GAAgB,EACZoB,IACFb,EAAYliN,EAAa,QAASh6J,GAClCk8W,EAAYliN,EAAa,SAAUv0J,IAErCq/F,EAAIiiD,OAAOs0N,EAAa,YAAagB,GACrCv3Q,EAAIiiD,OAAOs0N,EAAa,UAAWyB,GAC/BxB,IAAiBD,IACnBv2Q,EAAIiiD,OAAOu0N,EAAc,YAAae,GACtCv3Q,EAAIiiD,OAAOu0N,EAAc,UAAWwB,IAEtCh4Q,EAAIj+D,OAAO00U,GACXz2Q,EAAIj+D,OAAO20U,GACX12Q,EAAIj+D,OAAO60U,GACXsB,EAAehjN,GACX+iN,IArRkB,EAAC53P,EAAQvxI,EAAQosB,EAAOyF,EAAQ82F,KACxD4oB,EAAO7xH,SAAS,gBAAiB,CAC/B1f,SACAosB,QACAyF,SACA82F,UACA,EAgRE81D,CAAkBltC,EAAQ60C,EAAah6J,EAAOyF,EAAQ,UAAYg2W,EAAenkY,MACjFwtH,EAAIyxE,UAAUvc,EAAa,QAASl1D,EAAI6iB,UAAUqyC,EAAa,WAEjE70C,EAAO0uB,aAAa,EAEhBmpO,EAAiB1qN,IACrB2qN,IACA,MAAMzhX,EAAWspG,EAAIwjN,OAAOh2J,EAAWinL,GACjCojC,EAAenhX,EAASN,EACxB0hX,EAAephX,EAASV,EACxBu4B,EAAOi/H,EAAUlzH,wBACjB89U,EAAc7pV,EAAKrzB,OAASqzB,EAAKviD,MAAQuiD,EAAKxiD,KAC9CssY,EAAe9pV,EAAK5tB,QAAU4tB,EAAKrE,OAASqE,EAAK7tB,IACnDw0J,IAAgB1H,IAClB8qN,IACApjN,EAAc1H,EACdtyJ,EAAQyF,EAAS,GAEnB,MAAMltB,EAAI4sI,EAAO7xH,SAAS,iBAAkB,CAAE1f,OAAQ0+K,IAClDxE,EAAYwE,KAAe/5K,EAAE2rL,qBAC/B2uK,GAAOmoC,IAAe,CAACl0N,EAAQxvK,KAC7B,MAAMy4K,EAAYx3K,IAChB,MAAM3E,EAASqoY,EAAiBjiN,GAAa,GAC7C1iH,EAAS/+D,EAAEkkY,QACXllU,EAASh/D,EAAEmkY,QACX5rN,EAASl9K,EAAOwsD,YAChB4wH,EAASp9K,EAAOysD,aAChB9iB,EAAQyzI,EAASF,EACjB2qN,EAAiB30N,EACjB20N,EAAenkY,KAAOA,EACtBmkY,EAAe5M,SAAW,CACxB3zW,EAAGgiX,EAAcp2N,EAAO,GAAK61N,EAC7B7hX,EAAGqiX,EAAer2N,EAAO,GAAK81N,GAEhChB,EAAmBriC,EAAYsjC,YAC/BhB,EAAoBtiC,EAAYtlE,aAChCynG,EAAiB52Q,EAAIn1H,IAAI4pW,EAAa,MAAO,CAC3C,MAAS,sBACT,iBAAkB,QAEpBz0O,EAAI0yD,UAAUkkN,EAAgB,CAC5BlgX,SAAU,QACV3qB,KAAM,IACN20B,IAAK,IACLxF,MAAO,OACPyF,OAAQ,SAEV81W,EAvJmB,EAACz2Q,EAAKkJ,KAC/B,GAAIg+P,EAAQh+P,GACV,OAAOlJ,EAAIn7G,OAAO,MAAO,CAAEwiB,IAAK6nU,GAAIC,iBAC/B,GAAIiE,GAAUlqO,GAAM,CACzB,MACMqvQ,EADUnvV,GAAWutV,EAAenkY,KAAM,KACpB+Y,GAAOwzG,GAC7BwsC,EAAWriC,EAAIvE,WAAU,GAM/B,OALA4zQ,EAAUv4Q,EAAIrsH,OAAO,KAAM43J,IAAW7vH,MAAKo0G,IACzC,MAAM1qB,EAAQpF,EAAIrsH,OAAO,QAASm8I,GAClC9vB,EAAIliC,SAASgyD,EAAI,SAAU,MAC3B09M,EAAOpoO,GAAOoD,GAAQxI,EAAIliC,SAAS0qC,EAAM,SAAU,OAAM,IAEpD+iC,CACT,CACE,OAAOriC,EAAIvE,WAAU,EACvB,EAwIyB6zQ,CAAmBx4Q,EAAKk1D,GAC3Cl1D,EAAIytD,SAASgpN,EAAkB,uBAC/Bz2Q,EAAIyxE,UAAUglM,EAAkB,iBAAkB,OAClDA,EAAiBp0P,gBAAkB,QACnCriB,EAAI0yD,UAAU+jN,EAAkB,CAC9B1qY,KAAM8rY,EACNn3W,IAAKo3W,EACLppV,OAAQ,IAEV2oV,EAAgBZ,EAAkB2B,EAAaC,GAC/C5B,EAAiB1wX,gBAAgBkwX,IACjCxhC,EAAYjtU,YAAYivW,GACxBz2Q,EAAIzrD,KAAKgiU,EAAa,YAAagB,GACnCv3Q,EAAIzrD,KAAKgiU,EAAa,UAAWyB,GAC7BxB,IAAiBD,IACnBv2Q,EAAIzrD,KAAKiiU,EAAc,YAAae,GACpCv3Q,EAAIzrD,KAAKiiU,EAAc,UAAWwB,IAEpCtB,EAAe12Q,EAAIn1H,IAAI4pW,EAAa,MAAO,CACzC,MAAS,oBACT,iBAAkB,OACjBzoL,EAAS,YAAcE,EAAO,EAEnC,IAAIusN,EAAYz4Q,EAAIjyH,IAAI,kBAAoByE,GACxCimY,GACFz4Q,EAAIj+D,OAAO02U,GAEbA,EAAYz4Q,EAAIn1H,IAAI4pW,EAAa,MAAO,CACtC,GAAM,kBAAoBjiW,EAC1B,iBAAkB,MAClB,MAAS,mBACT,cAAgB,EAChB,MAAS,UAAYA,EAAO,iCAE9BwtH,EAAIzrD,KAAKkkU,EAAW,aAAahlY,IAC/BA,EAAEtI,2BACFsI,EAAE9E,iBACFs8K,EAAUx3K,EAAE,IAEduuK,EAAO94C,IAAMuvQ,EACbz4Q,EAAI0yD,UAAU+lN,EAAW,CACvB1sY,KAAMqsY,EAAcp2N,EAAO,GAAK61N,EAAeY,EAAUt9W,YAAc,EACvEuF,IAAK23W,EAAer2N,EAAO,GAAK81N,EAAeW,EAAU7jQ,aAAe,GACxE,IAGJ0jQ,GAAe,EACjB,EAEII,EAA0B3mB,GAAQmmB,EAAgB,GAClDI,EAAiB,CAACK,GAAiB,KACvCD,EAAwB52U,SACxBq2U,IACIjjN,GAAeyjN,GACjBzjN,EAAYnvK,gBAAgBkwX,IAE9BloC,GAAOmoC,IAAe,CAAC1nY,EAAOgE,KAC5B,MAAMimY,EAAYz4Q,EAAIjyH,IAAI,kBAAoByE,GAC1CimY,IACFz4Q,EAAIiiD,OAAOw2N,GACXz4Q,EAAIj+D,OAAO02U,GACb,GACA,EAEEG,EAAiB,CAACvhY,EAAMk+C,IAAWyqE,EAAI4uD,UAAUv3K,EAAMk+C,GACvDsjV,EAAmBplY,IACvB,GAAIojY,GAAiBx2P,EAAOlyE,SAAWkyE,EAAOy4P,UAC5C,OAEF,MAAMtrN,EAAuB,cAAX/5K,EAAEkD,KAAuBlD,EAAE3E,OAAS2xI,EAAUyuC,UAC1D6pN,EAAa79K,GAAU95F,GAAaS,QAAQ2rD,GAnT3B,mEAmT2DvgL,KAAIwG,GAAKA,EAAEusH,MAAK9tH,QAAOuB,GAAKusH,EAAI4+B,WAAWnrJ,EAAE0P,gBAAiC,QAAf1P,EAAEwsH,UAAsBD,EAAI4+B,WAAWnrJ,KAAI2pH,iBACtLk4K,EAAgBj6K,EAAc09Q,GAAc/4Q,EAAI6iB,UAAUk2P,EAAY9C,GAAsB,KAAO,IAIzG,GAHAzoC,EAAOxtO,EAAIrsH,OAAO,OAAQsiY,UAA8BA,QAA2B59M,IACjFA,EAAItyK,gBAAgBkwX,GAAqB,IAEvC56Q,EAAc09Q,IAAeH,EAAeG,EAAYtkC,IAAgBp0N,EAAOyyC,WAAY,CAC7FkmN,IACA,MAAMC,EAAWx4P,EAAUC,UAAS,GACpC,GAAIk4P,EAAeK,EAAUF,IAAeH,EAAen4P,EAAUzC,QAAO,GAAO+6P,GAGjF,OAFA/4Q,EAAIyxE,UAAUsnM,EAAY9C,GAAsB3gG,QAChDojG,EAAwB/xN,SAASoyN,EAGrC,CACAT,GAAgB,EAEZH,EAA2B,KAC/BpqC,GAAOmoC,IAAel0N,IAChBA,EAAO94C,MACTlJ,EAAIiiD,OAAOD,EAAO94C,YACX84C,EAAO94C,IAChB,GACA,EAEE8vQ,EAAqB,KACzB,IACE34P,EAAOwK,SAASujC,YAAY,wBAAwB,EAAO,QAC7D,CAAE,MAAO91B,GACT,GAEFjY,EAAO8K,GAAG,QAAQ,KAChB6tP,IACA34P,EAAO8K,GAAG,0DAA2D0tP,GACrEx4P,EAAO8K,GAAG,wBAAwB13I,IAC5ByhL,GAAwC,UAAzBA,EAAYj1D,UAC7B44Q,EAAiBplY,EACnB,IAEF4sI,EAAO8K,GAAG,YAAamtP,GACvBj4P,EAAO8K,GAAG,wBAAyB8rP,GAAwB,EAAK,IAElE52P,EAAO8K,GAAG,SAAUgtP,GAKpB,MAAO,CACLnvN,cACAkvN,iBACAI,iBACAO,mBACAl8W,QATc,KACd+7W,EAAwB52U,SACxBozH,EAAcuhN,EAAmBG,EAAiB,IAAI,EAQvD,EAqBG1lO,GAAmB,CAAC/7B,EAAKg8B,EAAWC,KACxC,MAAM9yH,EAAQ62F,EAAIhmI,SAAS4hK,cAnBZ,IAAC/L,EAsBhB,OAtBgBA,EAoBP1mH,EAAO6yH,EAnBXh1C,MAAK1oH,IACRuxJ,EAAIqM,eAAe59J,EAAEusH,IAAI,IACxB,CAACvsH,EAAGqpC,KACLkoH,EAAIK,SAAS5xJ,EAAEusH,IAAKljF,EAAE,IACrBrpC,IACDuxJ,EAAIsM,cAAc79J,EAAEusH,IAAI,IAGV,EAACglC,EAAK4L,KACtBA,EAAKz0C,MAAK1oH,IACRuxJ,EAAIuM,aAAa99J,EAAEusH,IAAI,IACtB,CAACvsH,EAAGqpC,KACLkoH,EAAIM,OAAO7xJ,EAAEusH,IAAKljF,EAAE,IACnBrpC,IACDuxJ,EAAIwM,YAAY/9J,EAAEusH,IAAI,GACtB,EAKFyxC,CAAUnzH,EAAO8yH,GACV9yH,CAAK,EAERozH,GAAgB,CAACv8B,EAAK1oI,EAAOklK,EAASptB,EAAQqtB,KAClD,MAAM5M,EAAM7vB,EAAIhmI,SAAS4hK,cAGzB,OAFA/L,EAAIK,SAAS54J,EAAMuzH,IAAK2xC,GACxB3M,EAAIM,OAAO/gB,EAAOvkB,IAAK4xC,GAChB5M,CAAG,EAGN8M,GAAQlX,GAAa,CACzB,CACEmX,IAAK,CACH,QACA,UACA,SACA,YAGJ,CACEl1G,IAAK,CACH,QACA,UACA,SACA,cAIAm1G,GAAY,CAAC78B,EAAKx+H,EAAM2nC,IAAU3nC,EAAKyqH,GAAaS,QAAQvjF,EAAM2zH,gBAAiB3zH,EAAM4zH,YAAa9wC,GAAaS,QAAQvjF,EAAM6zH,cAAe7zH,EAAM8zH,WA8BtJC,GAAW,CAACl9B,EAAKsL,KACrB,MAAM6xB,EA9BU,EAACn9B,EAAKsL,IAAcA,EAAUpvI,MAAM,CACpDkhK,SAAUvN,IACD,CACL+M,IAAK1kJ,EAAS23I,GACdnoG,IAAKk/D,EAASE,OAGlB+a,SAAU,CAACm6B,EAAWC,KACb,CACLW,IAAKzrG,IAAO,IAAM4qG,GAAiB/7B,EAAKg8B,EAAWC,KACnDv0G,IAAKyJ,IAAO,IAAMy1D,EAAS/iH,KAAKk4J,GAAiB/7B,EAAKi8B,EAAYD,QAGtEqB,MAAO,CAAC/lK,EAAOklK,EAASptB,EAAQqtB,KACvB,CACLG,IAAKzrG,IAAO,IAAMorG,GAAcv8B,EAAK1oI,EAAOklK,EAASptB,EAAQqtB,KAC7D/0G,IAAKyJ,IAAO,IAAMy1D,EAAS/iH,KAAK04J,GAAcv8B,EAAKoP,EAAQqtB,EAASnlK,EAAOklK,UAchEc,CAAUt9B,EAAKsL,GAC9B,MAXiB,EAACtL,EAAKm9B,KACvB,MAAMtN,EAAMsN,EAAOP,MACnB,GAAI/M,EAAI0N,UAEN,OADiBJ,EAAOz1G,MAAM3qD,QAAOygK,IAAyB,IAAlBA,EAAID,YAChCzlK,KAAI0lK,GAAOb,GAAMj1G,IAAIukE,GAAaS,QAAQ8wC,EAAIR,cAAeQ,EAAIP,UAAWhxC,GAAaS,QAAQ8wC,EAAIV,gBAAiBU,EAAIT,eAAcn1C,YAAW,IAAMi1C,GAAU78B,EAAK28B,GAAMC,IAAK/M,KAEnM,OAAOgN,GAAU78B,EAAK28B,GAAMC,IAAK/M,EACnC,EAIO4N,CAAWz9B,EAAKm9B,EAAO,EAEhCR,GAAMC,IACND,GAAMj1G,IAEN,MAMMi2G,GANW,CAACrmK,EAAOklK,EAASptB,EAAQqtB,KAAY,CACpDnlK,QACAklK,UACAptB,SACAqtB,YAoBI0J,GAAkB,CAACv1C,EAAK3vG,EAAGJ,IAC3B+vG,EAAIw1C,uBAjBqB,EAACx1C,EAAK3vG,EAAGJ,KACtC,IAAIhX,EACJ,OAAO+8G,EAASlwH,KAA2C,QAArCmT,EAAK+mH,EAAIw1C,8BAA2C,IAAPv8J,OAAgB,EAASA,EAAGzT,KAAKw6H,EAAK3vG,EAAGJ,IAAIu+C,MAAK7a,IACnH,GAAuB,OAAnBA,EAAI8hH,WACN,OAAOz/C,EAASE,OAElB,MAAMrjG,EAAImtG,EAAIgrC,cAGd,OAFAn4I,EAAEysI,SAAS3rG,EAAI8hH,WAAY9hH,EAAIvP,QAC/BvxB,EAAE2xI,WACKxuC,EAAS/iH,KAAK4f,EAAE,GACvB,EAQO2iJ,CAAuBx1C,EAAK3vG,EAAGJ,GAC7B+vG,EAAI01C,oBAPW,EAAC11C,EAAK3vG,EAAGJ,KACnC,IAAIhX,EACJ,OAAO+8G,EAASlwH,KAAwC,QAAlCmT,EAAK+mH,EAAI01C,2BAAwC,IAAPz8J,OAAgB,EAASA,EAAGzT,KAAKw6H,EAAK3vG,EAAGJ,GAAG,EAMnGylJ,CAAoB11C,EAAK3vG,EAAGJ,GAE5B+lG,EAASE,OAQds4C,GAAQ3Z,GAAa,CACzB,CAAE3rD,OAAQ,CAAC,YACX,CACEk8C,GAAI,CACF,UACA,WAGJ,CAAEj8C,MAAO,CAAC,cAONqhE,GAAO,CACXthE,OAJeslE,GAAMtlE,OAKrBk8C,GAJSopB,GAAMppB,GAKfj8C,MAJcqlE,GAAMrlE,MAKpBshE,KATW,CAAC7pD,EAAS8pD,EAAUC,EAAMC,IAAYhqD,EAAQwV,KAAKs0C,EAAUC,EAAMC,GAU9EjwB,SATiBkwB,GAAQA,EAAKz0C,KAAKZ,EAAUA,EAAUA,IAYnDy7C,GAAQpc,GAAa,CACzB,CAAE2X,SAAU,CAAC,QACb,CACEv7B,SAAU,CACR,YACA,eAGJ,CACEw7B,MAAO,CACL,QACA,UACA,SACA,cAkBAsI,GAAe,CACnBvI,SATeyE,GAAMzE,SAUrBv7B,SATeggC,GAAMhgC,SAUrBw7B,MATYwE,GAAMxE,MAUlBuI,eAlBqBC,GAAYhE,GAAMxE,MAAMwI,EAASvuK,MAAOuuK,EAASrJ,QAASqJ,EAASz2B,OAAQy2B,EAASpJ,SAmBzGqJ,OAVax6B,IACb,MAAMh0I,EATWg0I,IAAaA,EAAUpvI,MAAM,CAC9CkhK,SAAUvN,GAAO5jC,GAAaS,QAAQmjC,EAAIiN,gBAC1Cj7B,SAAU,CAACm6B,EAAW+J,IAAgB3K,GAAK7vB,SAASywB,GACpDqB,MAAO,CAAC/lK,EAAO0uK,EAAUC,EAASC,IAAa5uK,IAMjCysY,CAAWz4P,GACzB,OAAOnnF,GAAY7sD,EAAM,EASzB6xC,MAPYw0H,IAUR4I,GAAgB,CAAC7sK,EAASs7C,KAC9B,MAAMwxH,EAASnpK,GAAK3D,GACpB,MAAI,UAAY8sK,EACPpL,GAAKrhE,MAAMrgG,GACR6uH,EAAW,CACnB,KACA,OACCi+C,GAGe,IAAXxxH,EAAeomH,GAAKthE,OAAOpgG,GAAW0hK,GAAKrhE,MAAMrgG,GAFjD0hK,GAAKplB,GAAGt8I,EAASs7C,EAG1B,EAEIqyH,GAAqB,CAACrL,EAAWC,KACrC,MAAM3kK,EAAQ0kK,EAAUh1C,KAAKo0C,GAAKthE,OAAQysE,GAAenL,GAAKrhE,OACxDq1C,EAAS6sB,EAAWj1C,KAAKo0C,GAAKthE,OAAQysE,GAAenL,GAAKrhE,OAChE,OAAO4rE,GAAa9jC,SAASvqI,EAAO83I,EAAO,EAEvC+3B,GAAkB,CAAC7vK,EAAOklK,EAASptB,EAAQqtB,KAC/C,MAAMT,EAAYuK,GAAcjvK,EAAOklK,GACjCP,EAAasK,GAAcn3B,EAAQqtB,GACzC,OAAOkJ,GAAa9jC,SAASm6B,EAAWC,EAAW,EAY/Cs0B,GAAe,CAAC/vL,EAAUP,KAC9B,MACM4sL,GADM5sL,GAASjG,UACAw2L,yBAIrB,OAHA6nK,EAAO73V,GAAU9G,IACfmzL,EAASx6J,YAAY34B,EAAQmxH,IAAI,IAE5BoB,GAAaS,QAAQmgE,EAAS,EAGjCm3M,GAAW14P,IACf,MAAMtL,EAAM2lC,GAAaG,OAAOx6B,GAAWzgB,IACrCo5Q,EAAc,CAAC3sY,EAAOklK,EAASptB,EAAQqtB,IAAYF,GAAcv8B,EAAK1oI,EAAOklK,EAASptB,EAAQqtB,GAC9Fn+B,EAtBWgN,IAAaA,EAAUpvI,MAAM,CAC9CkhK,SAAUvN,IACR,MAAMv4J,EAAQ20H,GAAaS,QAAQmjC,EAAIiN,gBACjC1tB,EAASnjB,GAAaS,QAAQmjC,EAAImN,cACxC,OAAOmK,GAAgB7vK,EAAOu4J,EAAIkN,YAAa3tB,EAAQygB,EAAIoN,UAAU,EAEvEp7B,SAAUwlC,GACVhK,MAAO8J,KAeUwd,CAAWr5C,GAC5B,OAAO4xB,GAASl9B,EAAK1B,GAAUpiI,MAAM,CACnC0gK,IAAKqnO,EACLv8U,IAAKu8U,GACL,EAEE17N,GAAa,CAACvoC,EAAK/+G,EAAGJ,IAvHR,EAACm/G,EAAK/+G,EAAGJ,KAC3B,MAAM+vG,EAAMoP,EAAIhmI,SAChB,OAAOmsK,GAAgBv1C,EAAK3vG,EAAGJ,GAAG/oB,KAAI+3J,GAAO8N,GAAgB1xC,GAAaS,QAAQmjC,EAAIiN,gBAAiBjN,EAAIkN,YAAa9wC,GAAaS,QAAQmjC,EAAImN,cAAenN,EAAIoN,YAAW,EAqH/IinO,CAAYlkQ,EAAK/+G,EAAGJ,GAEhD8rG,GAAY,CAACvnE,EAASC,EAASurE,KACnC,MAAMoP,EAAM77E,GAAY8nE,GAAaS,QAAQkE,IAC7C,OAAO23C,GAAWvoC,EAAInV,IAAKzlE,EAASC,GAASvtD,KAAI+tK,IAC/C,MAAMhW,EAAMj/B,EAAIgrC,cAGhB,OAFA/L,EAAIK,SAAS2V,EAASvuK,MAAMuzH,IAAKg7C,EAASrJ,SAC1C3M,EAAIM,OAAO0V,EAASz2B,OAAOvkB,IAAKg7C,EAASpJ,SAClC5M,CAAG,IACT5nC,gBAAgB,EAGfk8Q,GAAS,CAACC,EAAM/c,IACbnhQ,EAAck+Q,IAASl+Q,EAAcmhQ,IAAU+c,EAAKtnO,iBAAmBuqN,EAAKvqN,gBAAkBsnO,EAAKrnO,cAAgBsqN,EAAKtqN,aAAiBqnO,EAAKpnO,eAAiBqqN,EAAKrqN,cAAgBonO,EAAKnnO,YAAcoqN,EAAKpqN,UAa/MonO,GAAc,CAACniY,EAAMyuV,EAAU9gP,IAAwD,OAV1E,EAAC3tG,EAAMyuV,EAAU9gP,KAClC,IAAIwoJ,EAAcn2P,EAClB,KAAOm2P,GAAeA,IAAgBs4F,GAAU,CAC9C,GAAI9gP,EAAUwoJ,GACZ,OAAOA,EAETA,EAAcA,EAAYzlO,UAC5B,CACA,OAAO,IAAI,EAEsC0xW,CAAWpiY,EAAMyuV,EAAU9gP,GACxE00R,GAAoB,CAACriY,EAAMyuV,EAAUtzV,IAASgnY,GAAYniY,EAAMyuV,GAAUzuV,GAAQA,EAAK4oH,WAAaztH,IACpGmnY,GAA0B,CAACtiY,EAAMyuV,IAAauvB,GAAmBh+W,KAAUmiY,GAAYniY,EAAMyuV,EAAUulC,IACvGuO,GAAmB,CAAC55Q,EAAK3oH,EAAMtL,KACnC,MAAMg8B,EAAa1wB,EAAK0wB,WACxB,GAAIA,EAAY,CACd,MAAMysJ,EAAS,IAAIg9K,GAAcn6V,EAAM2oH,EAAIwgB,UAAUz4G,EAAYi4F,EAAI2gB,UAAY3gB,EAAIyhE,WACrF,IAAI+rE,EACJ,KAAOA,EAAch5E,EAAOzoL,EAAO,OAAS,WAC1C,GAAI2nW,GAAOlmG,GACT,OAAO,CAGb,CACA,OAAO,CAAK,EAgBRqsI,GAAuB,CAAC75Q,EAAK85Q,EAAapnO,EAAW3mK,EAAMggM,KAC/D,MAAMpqL,EAAOq+G,EAAIyhE,UACX+/K,EAAsBxhP,EAAIvvH,OAAO29L,sBACjCrmK,EAAagkK,EAAUhkK,WAC7B,IAAIgyW,EACA1iY,EACJ,IAAK0wB,EACH,OAAOg0F,EAASE,OAElB,MAAM+9Q,EAAuBh6Q,EAAIwgB,UAAUz4G,EAAYi4F,EAAI2gB,UAAYh/H,EACvE,GAAI5V,GAAQ2nW,GAAO3nK,IAAc+tM,GAAe95Q,EAAI4uC,QAAQorO,GAC1D,OAAOj+Q,EAAS/iH,KAAK8gX,GAAc/xV,EAAYi4F,EAAI6qE,UAAUkB,KAE/D,MAAMvX,EAAS,IAAIg9K,GAAczlK,EAAWiuM,GAC5C,KAAO3iY,EAAOm9K,EAAOzoL,EAAO,OAAS,WAAW,CAC9C,GAA2C,UAAvCi0H,EAAIkuP,yBAAyB72W,IAAqBsiY,GAAwBtiY,EAAMsK,GAClF,OAAOo6G,EAASE,OAElB,GAAIq3O,GAASj8V,IAASA,EAAK6G,KAAKxC,OAAS,EACvC,OAAKg+X,GAAkBriY,EAAMsK,EAAM,KAG5Bo6G,EAASE,OAFPF,EAAS/iH,KAAK8gX,GAAcziX,EAAMtL,EAAOsL,EAAK6G,KAAKxC,OAAS,IAIvE,GAAIskH,EAAI2gB,QAAQtpI,IAASmqW,EAAoBnqW,EAAK4oH,SAASnwH,eACzD,OAAOisH,EAASE,OAElB89Q,EAAoB1iY,CACtB,CACA,OAAI8oH,GAAU45Q,GACLh+Q,EAASE,OAEdy2C,GAAaqnO,EACRh+Q,EAAS/iH,KAAK8gX,GAAcigB,EAAmB,IAEjDh+Q,EAASE,MAAM,EAElBg+Q,GAAoB,CAACj6Q,EAAK0yC,EAAWjmK,EAAOu4J,KAChD,MAAMrjJ,EAAOq+G,EAAIyhE,UACjB,IAAIpqL,EACAymG,GAAa,EACb5iD,EAAYzuD,EAAQu4J,EAAIiN,eAAiBjN,EAAImN,aAC7ChoH,EAAS19C,EAAQu4J,EAAIkN,YAAclN,EAAIoN,UAC3C,MAAM0nO,EAAc/mC,GAAY73S,IAAc/Q,IAAW+Q,EAAUumE,WAAW/lH,OACxE8lW,EAAsBxhP,EAAIvvH,OAAO29L,sBACvC,IAAI8rM,EAAgBztY,EACpB,GAAI4oX,GAAmBn6T,GACrB,OAAO6gE,EAASE,OASlB,GAPI82O,GAAY73S,IAAc/Q,EAAS+Q,EAAUumE,WAAW/lH,OAAS,IACnEw+X,GAAgB,GAEdzmC,GAAav4S,KACfA,EAAYv5C,EACZwoC,EAAS,GAEP+Q,IAAcv5C,EAAM,CACtB,GAAIu4X,IACF7iY,EAAO6jD,EAAUumE,WAAWt3E,EAAS,EAAIA,EAAS,EAAI,GAClD9yC,GAAM,CACR,GAAIg+W,GAAmBh+W,GACrB,OAAO0kH,EAASE,OAElB,GAAIulP,EAAoBnqW,EAAK4oH,WAAamzO,GAAU/7V,GAClD,OAAO0kH,EAASE,MAEpB,CAEF,GAAI/gE,EAAUsmE,gBAAiB,CAI7B,GAHAr3E,EAASxuC,KAAKyW,KAAK8nX,GAAiB/vV,EAAS,EAAIA,EAAS,EAAIA,EAAQ+Q,EAAUumE,WAAW/lH,OAAS,GACpGw/C,EAAYA,EAAUumE,WAAWt3E,GACjCA,EAASmpT,GAASp4S,IAAc4+U,EAAc5+U,EAAUh9C,KAAKxC,OAAS,GACjEg3J,GAAax3G,IAAcv5C,EAAK8+K,WAAa2yK,GAAUl4S,GAC1D,OAAO6gE,EAASE,OAElB,GArFkC,EAAC90E,EAAM9vC,KAC7C,IAAIm2P,EAAcn2P,EAClB,KAAOm2P,GAAeA,IAAgBrmN,GAAM,CAC1C,GAAI0sT,GAAyBrmG,GAC3B,OAAO,EAETA,EAAcA,EAAYzlO,UAC5B,CACA,OAAO,CAAK,EA6EJoyW,CAAgCx4X,EAAMu5C,IAAcm6T,GAAmBn6T,GACzE,OAAO6gE,EAASE,OAElB,GAAIi4O,GAAUh5S,GACZ,OAAO6gE,EAASE,OAElB,GAAI/gE,EAAUsmE,kBAAoB4xO,GAAUl4S,GAAY,CACtD7jD,EAAO6jD,EACP,MAAMs5H,EAAS,IAAIg9K,GAAct2S,EAAWv5C,GAC5C,EAAG,CACD,GAAIkyV,GAAyBx8V,IAASg+W,GAAmBh+W,GAAO,CAC9DymG,GAAa,EACb,KACF,CACA,GAAIw1P,GAASj8V,IAASA,EAAK6G,KAAKxC,OAAS,EAAG,CAC1CyuC,EAAS+vV,EAAgB,EAAI7iY,EAAK6G,KAAKxC,OACvCw/C,EAAY7jD,EACZymG,GAAa,EACb,KACF,CACA,GAAI0jQ,EAAoBnqW,EAAK4oH,SAASnwH,iBAAmBikW,GAAqB18V,GAAO,CACnF8yC,EAAS61E,EAAI6qE,UAAUxzL,GACvB6jD,EAAY7jD,EAAK0wB,WACZmyW,GACH/vV,IAEF2zD,GAAa,EACb,KACF,CACF,OAASzmG,EAAO6iY,EAAgB1lN,EAAO/9H,OAAS+9H,EAAOj8H,OACzD,CACF,CACF,CA8BA,OA7BIm6G,IACE4gM,GAASp4S,IAAyB,IAAX/Q,GACzB0vV,GAAqB75Q,EAAK85Q,EAAapnO,GAAW,EAAMx3G,GAAWxf,MAAKge,IACtEwB,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACb2zD,GAAa,CAAI,IAGjBi1P,GAAY73S,KACd7jD,EAAO6jD,EAAUumE,WAAWt3E,GACvB9yC,IACHA,EAAO6jD,EAAUumE,WAAWt3E,EAAS,KAEnC9yC,IAAQq8V,GAAOr8V,IAvIN,EAACA,EAAM7E,KACxB,IAAIwM,EACJ,OAAwC,QAA/BA,EAAK3H,EAAKisH,uBAAoC,IAAPtkH,OAAgB,EAASA,EAAGihH,YAAcztH,CAAI,EAqI7D4nY,CAAW/iY,EAAM,MAASuiY,GAAiB55Q,EAAK3oH,GAAM,IAAWuiY,GAAiB55Q,EAAK3oH,GAAM,IACxHwiY,GAAqB75Q,EAAK85Q,EAAapnO,GAAW,EAAMr7J,GAAMqkC,MAAKge,IACjEwB,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACb2zD,GAAa,CAAI,MAKrBo8R,IAAkBxnO,GAAa4gM,GAASp4S,IAAc/Q,IAAW+Q,EAAUh9C,KAAKxC,QAClFm+X,GAAqB75Q,EAAK85Q,EAAapnO,GAAW,EAAOx3G,GAAWxf,MAAKge,IACvEwB,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACb2zD,GAAa,CAAI,IAGdA,GAAc5iD,EAAY6gE,EAAS/iH,KAAK8gX,GAAc5+T,EAAW/Q,IAAW4xE,EAASE,MAAM,EAE9Fo+Q,GAAc,CAACr6Q,EAAKglC,KACxB,MAAM0N,EAAY1N,EAAI0N,UAAW4nO,EAAUt1O,EAAI8yB,aACzCiyM,EAAWjQ,GAAcG,eAAej1N,GAc9C,OAbAi1O,GAAkBj6Q,EAAK0yC,GAAW,EAAM4nO,GAAS5+V,MAAKge,IAC/Cg5G,GAAconN,GAAchsC,QAAQi8C,EAAUrwU,IACjD4gV,EAAQj1O,SAAS3rG,EAAIwB,YAAaxB,EAAIvP,SACxC,IAEGuoH,GACHunO,GAAkBj6Q,EAAK0yC,GAAW,EAAO4nO,GAAS5+V,MAAKge,IACrD4gV,EAAQh1O,OAAO5rG,EAAIwB,YAAaxB,EAAIvP,SAAS,IAG7CuoH,GACF4nO,EAAQ/vO,UAAS,GAEZ+uO,GAAOt0O,EAAKs1O,GAAWv+Q,EAASE,OAASF,EAAS/iH,KAAKshY,EAAQ,EAGlE9T,GAAY,CAACnvX,EAAM8yC,IAChB9yC,EAAKmvX,UAAUr8U,GAElB54C,GAAQyzJ,IACZ,IAAIiN,EAAiBjN,EAAIiN,eAAgBC,EAAclN,EAAIkN,YAAaC,EAAenN,EAAImN,aAAcC,EAAYpN,EAAIoN,UACzH,GAAIH,IAAmBE,GAAgBmhM,GAASrhM,IAC9C,GAAIC,EAAc,GAAKA,EAAcD,EAAe/zJ,KAAKxC,OAGvD,GAFAy2J,EAAeq0N,GAAUv0N,EAAgBC,GACzCD,EAAiBE,EAAa7uC,gBAC1B8uC,EAAYF,EAAa,CAC3BE,GAAwBF,EACxB,MAAMqoO,EAAe/T,GAAUr0N,EAAcC,GAAW9uC,gBACxD2uC,EAAiBE,EAAeooO,EAChCnoO,EAAYmoO,EAAar8X,KAAKxC,OAC9Bw2J,EAAc,CAChB,MACEE,EAAY,OAQhB,GAJIkhM,GAASrhM,IAAmBC,EAAc,GAAKA,EAAcD,EAAe/zJ,KAAKxC,SACnFu2J,EAAiBu0N,GAAUv0N,EAAgBC,GAC3CA,EAAc,GAEZohM,GAASnhM,IAAiBC,EAAY,GAAKA,EAAYD,EAAaj0J,KAAKxC,OAAQ,CACnF,MAAM6+X,EAAe/T,GAAUr0N,EAAcC,GAAW9uC,gBACxD6uC,EAAeooO,EACfnoO,EAAYmoO,EAAar8X,KAAKxC,MAChC,CAEF,MAAO,CACLu2J,iBACAC,cACAC,eACAC,YACD,EAGGooO,GAAax6Q,IAsBV,CACL+vO,KAtBW,CAAC/qM,EAAK7uJ,IACVg8X,GAAOnyQ,EAAKglC,EAAK7uJ,GAsBxB5E,MApBcA,GAqBdwjP,OAba,CAAC/vF,EAAKxzJ,EAAU,CAAEmF,KAAM,WACrC,GAAqB,SAAjBnF,EAAQmF,KAAiB,CAC3B,MAAM8jY,EAAYxI,GAAUjyQ,EAAKglC,EAAK,CAAC,CAAEgoB,OAAQ,UAC3C0tN,EAAW16Q,EAAIilC,YAGrB,OAFAy1O,EAASr1O,SAASo1O,EAAUxoO,eAAgBwoO,EAAUvoO,aACtDwoO,EAASp1O,OAAOm1O,EAAUtoO,aAAcsoO,EAAUroO,WAC3CsoO,CACT,CACA,OAAO11O,CAAG,EAMVjnG,UArBgBinG,GACTq1O,GAAYr6Q,EAAKglC,GAAK7oC,KAAKN,GAAO8+Q,IACvC31O,EAAIK,SAASs1O,EAAc1oO,eAAgB0oO,EAAczoO,aACzDlN,EAAIM,OAAOq1O,EAAcxoO,aAAcwoO,EAAcvoO,YAC9C,OAoBbooO,GAAWI,cAAgBtB,GAC3BkB,GAAWK,uBAAyB/4Q,GACpC04Q,GAAW5jB,gBAAkBA,GAC7B4jB,GAAWtrN,QAAU2nM,GAErB,MAsCMl5O,GAtCY,EAACnrI,EAAM28H,KACvB,MASMphI,EAAMc,IACV,MAAM+pB,EAAIu2G,EAAUtgI,GACpB,GAAI+pB,GAAK,GAAW,OAANA,EAAY,CACxB,MAAMovG,EAAM6Q,GAAMhqI,EAAS2D,GAC3B,OAAOge,WAAWw3G,IAAQ,CAC5B,CACA,OAAOpvG,CAAC,EAGJw2G,EAAY,CAACvgI,EAAS0U,IAAeg7G,EAAMh7G,GAAY,CAACo+C,EAAKxxD,KACjE,MAAMkqC,EAAMw+F,GAAMhqI,EAASsB,GACrB3B,OAAgByB,IAARoqC,EAAoB,EAAIxpB,SAASwpB,EAAK,IACpD,OAAOvmB,MAAMtlB,GAASmzD,EAAMA,EAAMnzD,CAAK,GACtC,GAMH,MAAO,CACLP,IA7BU,CAACY,EAASm8B,KACpB,IAAKjX,EAASiX,KAAOA,EAAE35B,MAAM,YAC3B,MAAM,IAAIwC,MAAMrB,EAAO,wDAA0Dw4B,GAEnF,MAAMg1F,EAAMnxH,EAAQmxH,IAChB4H,GAAY5H,KACdA,EAAI7iG,MAAM3qB,GAAQw4B,EAAI,KACxB,EAuBAj9B,MACAshI,SAdethI,EAefqhI,YACAxzH,IAVU,CAAC/M,EAASL,EAAO+U,KAC3B,MAAM+rH,EAAuBF,EAAUvgI,EAAS0U,GAEhD,OADoB/U,EAAQ8gI,EAAuB9gI,EAAQ8gI,EAAuB,CAChE,EAQnB,EAGSJ,CAAU,UAAUrgI,IAC9B,MAAMmxH,EAAMnxH,EAAQmxH,IACpB,OAAO8F,GAAOj3H,GAAWmxH,EAAI1lE,wBAAwB35B,OAASq/F,EAAI4U,YAAY,IAI1E0hE,GAAc,IAAMl1E,GAAaS,QAAQ1yH,UAEzConM,GAAS,CAACx2B,EAAYh6C,IACZg6C,EAAWuK,KAAKvkD,GACjB5J,KAAK9uG,EAAS,KAAKue,IAC9B,MAAM2pB,EAASwqH,EAAWh9C,MAAMn3F,GAC1BpgB,EAAO+qL,GAAOx2B,EAAYxqH,GAChC,MAAO,CAAC3pB,GAAG1+B,OAAOse,EAAK,IAe3B,IAAIgrL,GAA0BprM,OAAOqhE,OAAO,CACxCriC,UAAW,KACXkgJ,KATSvkD,IACX,IAAI/mH,EAEJ,OADgB+mH,EAAI/F,MAAQ7wH,SAAW4sH,EAASE,OAASF,EAASlwH,KAAoC,QAA9BmT,EAAK+mH,EAAI/F,IAAI1mE,mBAAgC,IAAPt6C,OAAgB,EAASA,EAAGy3L,eAC3HxpM,IAAIm0H,GAAaS,QAAQ,EAOtCkB,MALUl0H,GAAWm0H,GAAgBn0H,KAQzC,MAAMmT,GAAOnT,IACX,MAAMk3H,EAAMuwE,KACNJ,EAAS5xC,GAAMv+B,GACf8wE,EArBO,EAAChoM,EAASkxK,KACvB,MAAM3sJ,EAAI2sJ,EAAWh9C,MAAMl0H,GAC3B,OAAO0nM,GAAOx2B,EAAY3sJ,EAAE,EAmBbwjL,CAAO/nM,EAAS2nM,IACzBrsJ,EAASwrF,GAAS9mI,GAClB+pB,EAAIylG,EAAMw4E,GAAQ,CAAC9xL,EAAG3R,KAC1B,MAAM0jM,EAAMnhE,GAASviI,GACrB,MAAO,CACLrH,KAAMgZ,EAAEhZ,KAAO+qM,EAAI/qM,KACnB20B,IAAK3b,EAAE2b,IAAMo2K,EAAIp2K,IAClB,GACA,CACD30B,KAAM,EACN20B,IAAK,IAEP,OAAOs0G,GAAcp8G,EAAE7sB,KAAOo+C,EAAOp+C,KAAOmqM,EAAOnqM,KAAM6sB,EAAE8H,IAAMypB,EAAOzpB,IAAMw1K,EAAOx1K,IAAI,EAGrFo6W,GAAqBjsY,GAA6B,aAAlB2D,GAAK3D,GA+CrCksY,GAAa,CAAClsY,EAASmsY,KAC3B,MAAMthV,EA5rRS7qD,KACf,MAAMk3H,EAAMl3H,EAAQmxH,IAAI3mE,cAClB13C,EAAOokH,EAAIpkH,KACXwzH,EAAMpP,EAAIzsE,YACVgoE,EAAOyE,EAAIz9G,gBACjB,GAAI3G,IAAS9S,EAAQmxH,IACnB,OAAOgV,GAAcrzH,EAAKkoE,WAAYloE,EAAKyzH,WAE7C,MAAMC,EAAYJ,GAA2B,OAARE,QAAwB,IAARA,OAAiB,EAASA,EAAIG,YAAahU,EAAK+T,WAC/FE,EAAaN,GAA2B,OAARE,QAAwB,IAARA,OAAiB,EAASA,EAAIK,YAAalU,EAAKiU,YAChGE,EAAYR,GAAmB3T,EAAKmU,UAAW9zH,EAAK8zH,WACpDC,EAAaT,GAAmB3T,EAAKoU,WAAY/zH,EAAK+zH,YAC5D,OAAOC,GAAS9mI,GAASk/C,UAAUwnF,EAAaG,EAAYL,EAAYI,EAAU,EAgrRtEP,CAASrmI,GACf8xB,EAjGM9xB,IAAW8uI,GAAI5vI,IAAIc,GAiGhBwuK,CAAMxuK,GACrB,MAAO,CACLA,UACAq7C,OAAQwP,EAAIh5B,IAAMC,EAClBA,SACA+4B,MACAs1T,QAASgsB,EACV,EAEGC,GAAiB,CAACpsY,EAASs7C,KAC/B,MAAMshJ,EAnDQ,EAAC58L,EAASs7C,KACxB,MAAMq6E,EAAW+B,GAAW13H,GAC5B,GAAwB,IAApB21H,EAAS9oH,QAAgBo/X,GAAmBjsY,GAC9C,MAAO,CACLA,UACAs7C,UAEG,GAAIA,EAASq6E,EAAS9oH,SAAWo/X,GAAmBt2Q,EAASr6E,IAClE,MAAO,CACLt7C,QAAS21H,EAASr6E,GAClBA,OAAQ,GAEL,CACL,MAAMpJ,EAAOyjF,EAASA,EAAS9oH,OAAS,GACxC,OAAIo/X,GAAmB/5V,GACd,CACLlyC,UACAs7C,UAGiB,QAAf33C,GAAKuuC,GACA,CACLlyC,QAASkyC,EACToJ,OAAQ,GAEDgmT,GAASpvT,GACX,CACLlyC,QAASkyC,EACToJ,OAAQm0H,GAAMv9H,GAAMrlC,QAGf,CACL7M,QAASkyC,EACToJ,OAAQo8E,GAAWxlF,GAAMrlC,OAIjC,GAcmB0iI,CAAQvvI,EAASs7C,GAC9B61D,EAAOohB,GAAaC,SAAS,2EAEnC,OADAsC,GAAS8nE,EAAW58L,QAASmxG,GACtB+6R,GAAW/6R,GAAM,IAAMioG,GAASjoG,IAAM,EAGzCk7R,GAAa,CAAC76P,EAAQz0G,EAAGo5H,EAAKssM,KAClC6pC,GAAa96P,GAAQ,CAAC+6P,EAAIr4N,IAAOs4N,GAAgBh7P,EAAQz0G,EAAGo5H,EAAKssM,IAAatsM,EAAI,EAE9Es2O,GAAmB,CAACj7P,EAAQta,EAAKn6F,EAAGjO,EAAQ2zU,KAChD,MAAMpzV,EAAO,CACXgrH,IAAKvrG,EAAO9uB,QAAQmxH,IACpBsxO,cAEF,GAxE8B,EAACjxN,EAAQniI,IACnBmiI,EAAO7xH,SAAS,iBAAkBtQ,GACnCkhL,qBAsEfm8M,CAAwBl7P,EAAQniI,GAClC,OAGF0tB,EAAEy0G,EAAQta,EADQu+B,GAAMv+B,GAAKrlG,IACH/C,EAAQ2zU,GAxEC,EAACjxN,EAAQniI,KAC5CmiI,EAAO7xH,SAAS,sBAAuBtQ,EAAK,EAwE5Cs9X,CAA6Bn7P,EAAQniI,EAAK,EAEtCm9X,GAAkB,CAACh7P,EAAQz0G,EAAGo5H,EAAKssM,KACvC,MAAM3vV,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnCszB,EAAM3E,GAAaS,QAAQwe,EAAOwK,UACjClpI,EA/2Raq+G,IAAI7kG,YAg3RxB,MAAMwC,EAASs9W,GAAe75Q,GAAaS,QAAQmjC,EAAIiN,gBAAiBjN,EAAIkN,aAC5EopO,GAAiBj7P,EAAQta,EAAKn6F,EAAGjO,EAAQ2zU,GACzC3zU,EAAOqxV,SAAS,EAEZpiF,GAAc,CAACvsJ,EAAQxxI,EAAS+8B,EAAG0lU,KACvC,MAAMvrO,EAAM3E,GAAaS,QAAQwe,EAAOwK,UACxCywP,GAAiBj7P,EAAQta,EAAKn6F,EA1BV/8B,IAAWksY,GAAW35Q,GAAaS,QAAQhzH,GAAUisC,GA0BxC2gW,CAAc5sY,GAAUyiW,EAAW,EAEhE6pC,GAAe,CAAC96P,EAAQz0G,EAAGo5H,KAC/B,MAAM02O,EAAe12O,EAAIiN,eACnBC,EAAclN,EAAIkN,YAClBypO,EAAa32O,EAAImN,aACjBC,EAAYpN,EAAIoN,UACtBxmI,EAAEw1F,GAAaS,QAAQ65Q,GAAet6Q,GAAaS,QAAQ85Q,IAC3D,MAAMriB,EAASj5O,EAAOrgB,IAAIilC,YAC1Bq0N,EAAOj0N,SAASq2O,EAAcxpO,GAC9BonN,EAAOh0N,OAAOq2O,EAAYvpO,GAC1B/xB,EAAOI,UAAU0kB,OAAOH,EAAI,EAExB42O,GAAiB,CAACv7P,EAAQ1iH,EAAQw5R,EAAYm6C,EAAYvrO,KAC9D,MAAMrsE,EAAM/7B,EAAO+7B,IACnB,GAAI43S,EACF/4T,GAAGmhB,EAAI3tD,KAAM2tD,EAAIh5B,IAAKqlG,OACjB,CACL,MAAM/vG,EAAI0jC,EAAIh5B,IAAMy2R,EAAax5R,EAAOgD,OACxC4X,IAAI8nG,EAAO5tC,UAAUn4C,wBAAwBvuD,KAAMiqB,EAAG+vG,EACxD,GAEI81Q,GAAqB,CAACx7P,EAAQta,EAAKsP,EAAW8hL,EAAYx5R,EAAQ2zU,KACtE,MAAMwqC,EAAiB3kF,EAAa9hL,EAC9BmiL,EAAY75R,EAAO+7B,IAAIh5B,IACvB+2R,EAAe95R,EAAOusB,OACtB6xV,EAAqBtkF,EAAeD,GAAaL,EACvD,GAAIK,EAAYniL,EACdumQ,GAAev7P,EAAQ1iH,EAAQw5R,GAA2B,IAAfm6C,EAAsBvrO,QAC5D,GAAIyxL,EAAYskF,EAAgB,CAErCF,GAAev7P,EAAQ1iH,EAAQw5R,EADjB4kF,GAAoC,IAAfzqC,GAAsC,IAAfA,EACRvrO,EACpD,MAAW0xL,EAAeqkF,IAAmBC,GAC3CH,GAAev7P,EAAQ1iH,EAAQw5R,GAA2B,IAAfm6C,EAAqBvrO,EAClE,EAEIi2Q,GAAa,CAAC37P,EAAQta,EAAKsP,EAAW13G,EAAQ2zU,KAClD,MAAMn6C,EAAa79P,GAAYysE,GAAK/F,IAAIm+C,YACxC09N,GAAmBx7P,EAAQta,EAAKsP,EAAW8hL,EAAYx5R,EAAQ2zU,EAAW,EAEtE2qC,GAAY,CAAC57P,EAAQta,EAAKsP,EAAW13G,EAAQ2zU,KACjD,MAAM4qC,EAAkB5iV,GAAYysE,GAAK/F,IAAIm+C,YAC7C09N,GAAmBx7P,EAAQta,EAAKsP,EAAW6mQ,EAAiBv+W,EAAQ2zU,GACpE,MAAM6qC,EAAKn6X,GAAK2b,EAAO9uB,SACjB+qU,EAAiBxrG,GAAUl/N,QAC7BitY,EAAGz7W,IAAMk5S,EAAe5jT,EAC1Bq7U,GAAS1zU,EAAO9uB,SAAwB,IAAfyiW,GAChB6qC,EAAGz7W,IAAMk5S,EAAe1vR,QACjCmnT,GAAS1zU,EAAO9uB,SAAwB,IAAfyiW,EAC3B,EAEI8qC,GAAkB,CAAC/7P,EAAQ2kB,EAAKssM,IAAe4pC,GAAW76P,EAAQ27P,GAAYh3O,EAAKssM,GACnF+qC,GAAoB,CAACh8P,EAAQxxI,EAASyiW,IAAe1kE,GAAYvsJ,EAAQxxI,EAASmtY,GAAY1qC,GAC9FgrC,GAAiB,CAACj8P,EAAQ2kB,EAAKssM,IAAe4pC,GAAW76P,EAAQ47P,GAAWj3O,EAAKssM,GACjFirC,GAAmB,CAACl8P,EAAQxxI,EAASyiW,IAAe1kE,GAAYvsJ,EAAQxxI,EAASotY,GAAW3qC,GAK5FkrC,GAAsB,CAACn8P,EAAQ2kB,EAAKssM,MACvBjxN,EAAO2sC,OAASovN,GAAkBE,IAC1Cj8P,EAAQ2kB,EAAKssM,EAAW,EAG7BphH,GAAU,CAACrhP,EAAS6wN,GAAgB,IAAU7wN,EAAQmxH,IAAI+rB,MAAM,CAAE2zE,kBAClE+8K,GAAa5tY,IACjB,MAAMs4C,EAAOw+E,GAAY92H,GAASmxH,IAClC,OAAOnxH,EAAQmxH,MAAQ74E,EAAK04K,aAAa,EAErCC,GAAW,CAAC34K,EAAOmvJ,OAAkBv6E,EAASlwH,KAAKs7C,EAAK64E,IAAI6/F,eAAe5yN,IAAIm0H,GAAaS,SAG5F66Q,GAAU,CAACvyV,EAAQt7C,KACvB,MAAM+M,EAAMu0V,GAASthW,GAAWyvK,GAAMzvK,GAAS6M,OAAS6qH,GAAW13H,GAAS6M,OAAS,EACrF,OAAIyuC,EAASvuC,EACJA,EACEuuC,EAAS,EACX,EAEFA,CAAM,EAETwyV,GAAe33O,GAAO8V,GAAax8H,MAAM0mH,EAAIv4J,MAAOiwY,GAAQ13O,EAAI2M,QAAS3M,EAAIv4J,OAAQu4J,EAAIzgB,OAAQm4P,GAAQ13O,EAAI4M,QAAS5M,EAAIzgB,SAC1Hq4P,GAAe,CAACz1V,EAAM+hF,KAAS4pO,GAAiB5pO,EAAIlJ,OAAS7qH,GAASgyC,EAAM+hF,IAAQn9F,GAAGob,EAAM+hF,IAC7F2zQ,GAAc11V,GAAQ69G,GAAO43O,GAAaz1V,EAAM69G,EAAIv4J,QAAUmwY,GAAaz1V,EAAM69G,EAAIzgB,QAErFu4P,GAA8BlkX,GAAKkiJ,GAAax8H,MAAM8iF,GAAaS,QAAQjpG,EAAEq5I,gBAAiBr5I,EAAEs5I,YAAa9wC,GAAaS,QAAQjpG,EAAEu5I,cAAev5I,EAAEw5I,WAMrJ2qO,GAAgB51V,GALJguF,KAChB,MAAMsL,EAAYtL,EAAIwjC,eAEtB,OADal4B,GAAsC,IAAzBA,EAAUi8B,WAAqC3gD,EAASlwH,KAAK40I,EAAUm8B,WAAW,IAArD7gD,EAASE,QACrDhvH,IAAI6vY,GAA4B,EAIpCrgO,CADKnjH,GAAYnS,GACH64E,KAAK9tH,OAAO2qY,GAAY11V,IAGzC61V,GAAsBplN,IAC1B,MAAM5yB,EAAM71J,SAAS4hK,cACrB,IAGE,OAFA/L,EAAIK,SAASuyB,EAASnrL,MAAMuzH,IAAK43D,EAASjmB,SAC1C3M,EAAIM,OAAOsyB,EAASrzC,OAAOvkB,IAAK43D,EAAShmB,SAClC71C,EAAS/iH,KAAKgsJ,EACvB,CAAE,MAAO11J,GACP,OAAOysH,EAASE,MAClB,GAEIm1G,GAAQ/wF,IACZ,MAAM48P,EAvBY58P,IAAUA,EAAO2sC,QAAUkiL,GAAIvhO,QAAQzB,YAuBrCgxQ,CAAY78P,GAAU08P,GAAc37Q,GAAaS,QAAQwe,EAAO5tC,YAAcspB,EAASE,OAC3GokB,EAAOu3C,SAAWqlN,EAAY3gR,SAAW2gR,EAAc58P,EAAOu3C,QAAQ,EAElE3T,GAAS5jC,IACIA,EAAOu3C,SAAWv3C,EAAOu3C,SAAW77D,EAASE,QAC9C1nD,MAAKn+C,GAjBN,EAAC+wB,EAAMywI,IAAa77D,EAASlwH,KAAK+rL,GAAU1lL,OAAO2qY,GAAY11V,IAAOl6C,IAAI0vY,IAiB/Dr1R,CAAS8Z,GAAaS,QAAQwe,EAAO5tC,WAAYr8E,KAAIm+C,KAAKyoU,IAUhFG,GAAe,CAAEC,kBAJKl0Q,IAC1B,MAAMylD,EAAYzlD,EAAIylD,UAAU/8K,WAChC,OAAsC,IAA/B+8K,EAAU1lJ,QAAQ,UAAiD,IAA/B0lJ,EAAU1lJ,QAAQ,OAAc,GAgBvEo0W,GAAQ,CACZljN,iBAAkB,CAAC95C,EAAQlqI,EAAUmgB,IAbb,EAACngB,EAAUmgB,KAC9BvC,EAASuC,KACZA,EAAO,GAEFsU,WAAWz0B,EAAUmgB,IAUnBgnX,EAAkB,KAClBj9P,EAAOlyE,SACVh4D,GACF,GACCmgB,GAELinX,kBAAmB,CAACl9P,EAAQlqI,EAAUmgB,KACpC,MAAMowJ,EAfiB,EAACvwK,EAAUmgB,KAC/BvC,EAASuC,KACZA,EAAO,GAEF6S,YAAYhzB,EAAUmgB,IAWbknX,EAAmB,KAC1Bn9P,EAAOlyE,QAGV9kC,cAAcq9I,GAFdvwK,GAGF,GACCmgB,GACH,OAAOowJ,CAAK,GA6BVo8J,GAAaziM,IACjB,MAAMo9P,EAAiB1rB,IAAQ,KAC7B3gJ,GAAM/wF,EAAO,GACZ,GACHA,EAAO8K,GAAG,QAAQ,KACZ9K,EAAO2sC,QA3Ba,EAAC3sC,EAAQo9P,KACnC,MAAMC,EAAc,KAClBD,EAAe92N,UAAU,EAE3BmkM,GAASvoL,IAAIhuH,KAAKplE,SAAU,UAAWuuY,GACvCr9P,EAAO8K,GAAG,UAAU,KAClB2/N,GAASvoL,IAAItgB,OAAO9yK,SAAU,UAAWuuY,EAAY,GACrD,EAqBEC,CAAoBt9P,EAAQo9P,GAdL,EAACp9P,EAAQo9P,KALd,EAACp9P,EAAQo9P,KAC/Bp9P,EAAO8K,GAAG,oBAAoB43B,IAC5B06N,EAAe92N,UAAU,GACzB,EAGFi3N,CAAgBv9P,EAAQo9P,GACxBp9P,EAAO8K,GAAG,2CAA2C13I,IAnB5BA,IACP,eAAXA,EAAEkD,MAAyBlD,EAAEoqY,gBAmB7BC,CAAmBrqY,IACtB29N,GAAM/wF,EACR,GACA,EAUA09P,CAAqB19P,EAAQo9P,EAAe,IAE9Cp9P,EAAO8K,GAAG,UAAU,KAClBsyP,EAAe37U,QAAQ,GACvB,EAGJ,IAAIk8U,GACJ,MAAMC,GAAQnzB,GAASvoL,IAIjB27M,GAA6Bh1Q,IACjC,MAAMk3C,EAAYl3C,EAAIk3C,UACtB,YAAkBnwK,IAAdmwK,IACKA,EAAUjrK,SAAS,kBAAoBirK,EAAUjrK,SAAS,0BAA4BirK,EAAUjrK,SAAS,oBAGlH,EAEIgpY,GAAc,CAAC99P,EAAQnX,KAC3B,MAAMk1Q,EAAiBld,GAAoB7gP,GACrC9qF,EAAS0oV,GAAMz9P,UAAUtX,GAAKA,GAbZA,IACjB6pO,GAAY7pO,IAAQi0Q,GAAaC,kBAAkBl0Q,GAajDk0Q,CAAkBl0Q,MAASk1Q,GAAiB/9P,EAAOrgB,IAAI2G,GAAGuC,EAAKk1Q,KAExE,OAAkB,OAAX7oV,CAAe,EAElB8oV,GAAmBh+P,IACvB,IACE,MAAMl5F,EAAOw+E,GAAYvE,GAAaS,QAAQwe,EAAOj4G,eACrD,OAAO03L,GAAS34K,GAAMg1E,MAAK,IAAMhtH,SAASwS,OAAMyU,GAAKA,EAAE4pG,KACzD,CAAE,MAAOs4B,GACP,OAAOnpJ,SAASwS,IAClB,GAEI28X,GAAmB,CAACvhF,EAAetpT,KACvC,MAAM4sI,EAAS5sI,EAAE4sI,OACjByiM,GAAWziM,GACX,MAAMk+P,EAA2B,CAACl+P,EAAQptH,KACxC,GAAI2wW,GAAuBvjP,KAA6B,IAAlBA,EAAO2sC,OAAiB,CAE5D/5J,EADoBmuG,GAAaS,QAAQwe,EAAOmyC,gBAChC,iBAClB,GAEFnyC,EAAO8K,GAAG,WAAW,KACnB,MAAMqzP,EAAgBzhF,EAAcyhF,cAChCN,GAA2BG,GAAiBh+P,KAC9Ck+P,EAAyBl+P,EAAQigC,IAE/Bk+N,IAAkBn+P,IAChBm+P,GACFA,EAAchwX,SAAS,OAAQ,CAAEgwX,cAAen+P,IAElD08K,EAAc1tI,UAAUhvC,GACxB08K,EAAcyhF,cAAgBn+P,EAC9BA,EAAO7xH,SAAS,QAAS,CAAEiwX,cAAeD,IAC1Cn+P,EAAO0L,OAAM,GACf,IAEF1L,EAAO8K,GAAG,YAAY,KACpBkyP,GAAMljN,iBAAiB95C,GAAQ,KAC7B,MAAMm+P,EAAgBzhF,EAAcyhF,cAC/BN,GAA2BG,GAAiBh+P,KAAYm+P,IAAkBn+P,GAC7Ek+P,EAAyBl+P,EAAQ/b,IAE9B65Q,GAAY99P,EAAQg+P,GAAiBh+P,KAAYm+P,IAAkBn+P,IACtEA,EAAO7xH,SAAS,OAAQ,CAAEgwX,cAAe,OACzCzhF,EAAcyhF,cAAgB,KAChC,GACA,IAECR,KACHA,GAAyBvqY,IACvB,MAAMirY,EAAe3hF,EAAc2hF,aAC/BA,GACF98N,GAAuBnuK,GAAGioC,MAAK5sC,IAC7B,MAAMozH,EAAOpzH,EACTozH,EAAK7oE,gBAAkBlqD,WACrB+yH,IAAS/yH,SAASwS,MAASw8X,GAAYO,EAAcx8Q,IAAS66L,EAAcyhF,gBAAkBE,IAChGA,EAAalwX,SAAS,OAAQ,CAAEgwX,cAAe,OAC/CzhF,EAAcyhF,cAAgB,MAElC,GAEJ,EAEFP,GAAM1pU,KAAKplE,SAAU,UAAW6uY,IAClC,EAEIW,GAA2B,CAAC5hF,EAAetpT,KAC3CspT,EAAcyhF,gBAAkB/qY,EAAE4sI,SACpC08K,EAAcyhF,cAAgB,OAE3BzhF,EAAc2hF,cAAgBV,KACjCC,GAAMh8N,OAAO9yK,SAAU,UAAW6uY,IAClCA,GAAyB,KAC3B,EAUIY,GAAoB,CAACz3V,EAAM69G,IADRA,IAAOA,EAAI0N,UAAY32C,EAASlwH,KAAKgrX,GAAU7xN,EAAIiN,eAAgBjN,EAAIkN,cAAcjlK,IAAIm0H,GAAaS,SAAW9F,EAASE,OAC1G4iR,CAAiB75O,GAAKzwF,MAAKl9D,GAC9Dg9W,GAAeh9W,GACV0kH,EAAS/iH,KAAK3B,GACXlC,GAASgyC,EAAM9vC,GAGlB0kH,EAASE,OAFTF,EAAS/iH,KAAKmuC,KAKnB23V,GAAqB,CAACz+P,EAAQ2kB,KAClC45O,GAAkBx9Q,GAAaS,QAAQwe,EAAO5tC,WAAYuyD,GAAKzwF,MAAK20D,GAC3DgiQ,GAAgBhiQ,EAAIlJ,OAC1B7D,MAAK,KACNkkB,EAAOI,UAAU1iF,WAAW,IAC3BghV,GAAY1+P,EAAOI,UAAU0kB,OAAO45O,EAAShlB,YAAW,EAEvDilB,GAAYr9X,IAChB,GAAIA,EAAK0tK,UACP,IACE1tK,EAAK0tK,WACP,CAAE,MAAO/2B,GACP32I,EAAKoqI,OACP,MAEApqI,EAAKoqI,OACP,EAEIkzP,GAAkB/1Q,IAAOuzQ,UAAWvzQ,KA5P3Br6H,EA4P0Cq6H,EA5P/B42F,GAASn6F,GAAY92H,IAAUqD,QAAOuB,GAAK5E,EAAQmxH,IAAI7qH,SAAS1B,EAAEusH,QA4P9B1D,SA5P/CztH,KA4PuD,EAUhEikL,GAAWzyC,GAAUA,EAAO2sC,OARX3sC,KACrB,MAAM6+P,EAAU7+P,EAAO5tC,UACvB,OAAOysS,GAAWD,GAAgB79Q,GAAaS,QAAQq9Q,GAAS,EAMvBC,CAAe9+P,GATnCA,IAAUhlB,EAAcglB,EAAOivJ,gBAAkBmtG,GAAWr7Q,GAAaS,QAAQwe,EAAOivJ,gBAS3C8vG,CAAe/+P,GAC7Eg/P,GAAqBh/P,GAAUyyC,GAASzyC,IAL3BA,KACjB,MAAMpd,EAAM0C,GAAYvE,GAAaS,QAAQwe,EAAOj4G,eACpD,OAAO03L,GAAS78F,GAAK/wH,QAAOgwH,IAASg8Q,GAA2Bh8Q,EAAKlC,MAAQm+Q,GAAY99P,EAAQne,EAAKlC,OAAM1D,QAAQ,EAG7DgjR,CAAWj/P,GAwC9Dk/P,GAAiBl/P,GAAUA,EAAO08K,cAAc1tI,UAAUhvC,GAC1D0L,GAAQ,CAAC1L,EAAQ0+K,KACjB1+K,EAAOlyE,UAGP4wP,EACFwgF,GAAel/P,GA7CCA,KAClB,MAAMI,EAAYJ,EAAOI,UACnB9+H,EAAO0+H,EAAO5tC,UACpB,IAAIuyD,EAAMvkB,EAAUwjC,SACpB5jC,EAAOm/P,OAAOC,yBACd,MAAMC,EAAkBr/P,IACtB4jC,GAAO5jC,GAAQ3kG,MAAKikW,IAClBt/P,EAAOI,UAAU0kB,OAAOw6O,GACxB36O,EAAM26O,CAAW,GACjB,GAEC7sN,GAASzyC,IAAWA,EAAOu/P,mBAC9BF,EAAgBr/P,GAElB,MAAMw/P,EAxDuB,EAACx/P,EAAQhpI,IAASgpI,EAAOrgB,IAAIwgB,UAAUnpI,GAAMA,GAAgD,SAAxCgpI,EAAOrgB,IAAI4rE,mBAAmBv0L,KAwDpFyoY,CAAuBz/P,EAAQI,EAAUyuC,WACrE,GAAI2wN,GAAuBx/P,EAAOrgB,IAAI4uD,UAAUixN,EAAqBl+X,GAUnE,MAlEkC,EAAC0+H,EAAQhpI,IAAiG,OAAxFgpI,EAAOrgB,IAAIwgB,UAAUnpI,GAAMA,GAAgD,UAAxCgpI,EAAOrgB,IAAI4rE,mBAAmBv0L,KAyDhH0oY,CAA8B1/P,EAAQw/P,IACzCb,GAAUr9X,GAEZq9X,GAAUa,GACLx/P,EAAOu/P,mBACVF,EAAgBr/P,GAElBy+P,GAAmBz+P,EAAQ2kB,QAC3Bu6O,GAAel/P,GAGZA,EAAO2sC,SACLkiL,GAAIvhO,QAAQ1B,WACf+yQ,GAAUr9X,GAEZ0+H,EAAO46B,SAASlvB,UAEdmjN,GAAIvhO,QAAQzB,aAAemU,EAAO2sC,UACpCgyN,GAAUr9X,GACVm9X,GAAmBz+P,EAAQ2kB,IAE7Bu6O,GAAel/P,EAAO,EAUpB2/P,CAAY3/P,GACd,EAGI4/P,GAAkB,CAACjgR,EAAKglC,IACxBA,EAAI0N,UACC1yC,EAAI4+B,WAAWoG,EAAIiN,gBAEnBjyC,EAAI4+B,WAAWoG,EAAIiN,iBAAmBjyC,EAAI4+B,WAAWoG,EAAImN,cAI9D+tO,GAAqB,CAAC/4V,EAAM69G,EAAKv4J,EAAO0zY,EAAMj1X,KAClD,MAAMgwC,EAAYzuD,EAAQu4J,EAAIiN,eAAiBjN,EAAImN,aAC7ChoH,EAAS19C,EAAQu4J,EAAIkN,YAAclN,EAAIoN,UAC7C,OAAOr2C,EAASlwH,KAAKqvD,GAAWjuD,IAAIm0H,GAAaS,SAAS50H,KAAIi8H,GAAQi3Q,GAASn7O,EAAI0N,UAA4DxpC,EAAhDjC,GAAQiC,EAAKh+G,EAAQg+G,EAAK/+E,IAASyyE,MAAMsM,KAAY30D,MAAK20D,GAAOgnO,GAAYhnO,GAAOnN,EAAS/iH,KAAKkwH,GAAO3zE,GAAO2zE,GAAKh3H,OAAOg+V,MAAcjjW,KAAIi8H,GAAOA,EAAIlJ,MAAKpD,MAAMz1E,EAAK,EAEpQu5F,GAAW,CAACv5F,EAAM69G,EAAKm7O,GAAO,IAAUD,GAAmB/4V,EAAM69G,GAAK,EAAMm7O,GAAM,CAACj3Q,EAAK/+E,IAAWxuC,KAAKyW,IAAI2+U,GAAgB7nO,GAAM/+E,KAClI6zF,GAAS,CAAC72F,EAAM69G,EAAKm7O,GAAO,IAAUD,GAAmB/4V,EAAM69G,GAAK,EAAOm7O,GAAM,CAACj3Q,EAAK/+E,IAAWA,EAAS,EAAIA,EAAS,EAAIA,IAC5Hi2V,GAAqB,CAAC/oY,EAAM28W,KAChC,MAAMzjT,EAAOl5D,EACb,KAAOA,GAAQi8V,GAASj8V,IAAyB,IAAhBA,EAAKqE,QACpCrE,EAAO28W,EAAW38W,EAAKksH,YAAclsH,EAAKisH,gBAE5C,OAAOjsH,GAAQk5D,CAAI,EAwEf8vU,GAAgB,CAAChgQ,EAAQiyB,IAAWi7L,EAAMj7L,GAAQh0H,IACtD,MAAM4+I,EAAM78C,EAAO7xH,SAAS,oBAAqB,CAAE8vB,UACnD,OAAO4+I,EAAI5+I,QAAUA,EAAQ4+I,EAAI5+I,MAAQA,CAAK,IAG1CgiW,GAAa,CACjB,QAAS,EACT,WAAY,EACZ,SAAU,EACV,MAAO,EACP,WAAY,GACZ,qBAAsB,IAElBC,GAAS,CAAClpY,EAAM8vC,EAAMoR,KAC1B,MAAMo5S,EAAYp5S,EAAO,YAAc,aACjCq5S,EAAcr5S,EAAO,OAAS,OACpC,GAAIlhD,EAAKs6V,GACP,OAAOt6V,EAAKs6V,GAEd,GAAIt6V,IAAS8vC,EAAM,CACjB,IAAIssH,EAAUp8J,EAAKu6V,GACnB,GAAIn+L,EACF,OAAOA,EAET,IAAK,IAAIl+G,EAASl+C,EAAKk+C,OAAQA,GAAUA,IAAWpO,EAAMoO,EAASA,EAAOA,OAExE,GADAk+G,EAAUl+G,EAAOq8S,GACbn+L,EACF,OAAOA,CAGb,CACgB,EAEZ+sO,GAAkBnpY,IACtB,IAAI2H,EACJ,MAAM4X,EAA6B,QAArB5X,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAChE,IAAKizV,GAAiBr7U,GACpB,OAAO,EAET,MAAMmR,EAAa1wB,EAAKk+C,OACxB,OAAIxtB,GAAmC,SAApBA,EAAWv1B,OAAmBu1B,EAAWm5F,KAAK,WAAa,SAASzvH,KAAKmlB,EAGjF,EAEP6pX,GAAoBppY,IACxB,MAAM69V,EAA8B,MAAd79V,EAAK7E,OAAiB6E,EAAK6pH,KAAK,SAAW7pH,EAAK6pH,KAAK,MAC3E,OAAO7pH,EAAK6pH,KAAK,SAAW7pH,EAAK6pH,KAAK,QAAU7pH,EAAK4sH,YAAc5sH,EAAK6pH,KAAK,sBAAwBg0O,CAAa,EAEpH,MAAMwrC,GACJ,aAAO77X,CAAOrS,EAAMquH,GAClB,MAAMxpH,EAAO,IAAIqpY,GAAQluY,EAAM8tY,GAAW9tY,IAAS,GAMnD,OALIquH,GACFktO,GAAOltO,GAAO,CAACryH,EAAO+/P,KACpBl3P,EAAK6pH,KAAKqtI,EAAU//P,EAAM,IAGvB6I,CACT,CACA,WAAArN,CAAYwI,EAAMmE,GAChBvM,KAAKoI,KAAOA,EACZpI,KAAKuM,KAAOA,EACC,IAATA,IACFvM,KAAKqI,WAAa,GAClBrI,KAAKqI,WAAWxF,IAAM,CAAC,EAE3B,CACA,OAAAoC,CAAQgI,GACN,MAAMzI,EAAOxE,KAMb,OALIiN,EAAKk+C,QACPl+C,EAAK0qD,SAEPnzD,EAAK+2I,OAAOtuI,EAAMzI,GAClBA,EAAKmzD,SACEnzD,CACT,CACA,IAAAsyH,CAAK1uH,EAAMhE,GACT,MAAMI,EAAOxE,KACb,IAAK6wH,EAASzoH,GAMZ,OALI6oH,EAAc7oH,IAChBu7V,GAAOv7V,GAAM,CAAChE,EAAOJ,KACnBQ,EAAKsyH,KAAK9yH,EAAKI,EAAM,IAGlBI,EAET,MAAMiyH,EAAQjyH,EAAK6D,WACnB,GAAIouH,EAAO,CACT,QAAc5wH,IAAVzB,EAAqB,CACvB,GAAc,OAAVA,EAAgB,CAClB,GAAIgE,KAAQquH,EAAM5zH,IAAK,QACd4zH,EAAM5zH,IAAIuF,GACjB,IAAI2e,EAAI0vG,EAAMnlH,OACd,KAAOyV,KACL,GAAI0vG,EAAM1vG,GAAG3e,OAASA,EAEpB,OADAquH,EAAMp+F,OAAOtR,EAAG,GACTviB,CAGb,CACA,OAAOA,CACT,CACA,GAAI4D,KAAQquH,EAAM5zH,IAAK,CACrB,IAAIkkB,EAAI0vG,EAAMnlH,OACd,KAAOyV,KACL,GAAI0vG,EAAM1vG,GAAG3e,OAASA,EAAM,CAC1BquH,EAAM1vG,GAAG3iB,MAAQA,EACjB,KACF,CAEJ,MACEqyH,EAAMxyH,KAAK,CACTmE,OACAhE,UAIJ,OADAqyH,EAAM5zH,IAAIuF,GAAQhE,EACXI,CACT,CACA,OAAOiyH,EAAM5zH,IAAIuF,EACnB,CAEF,CACA,KAAAmmC,GACE,MAAM/pC,EAAOxE,KACPuuC,EAAQ,IAAI+nW,GAAQ9xY,EAAK4D,KAAM5D,EAAK+H,MACpCgqY,EAAY/xY,EAAK6D,WACvB,GAAIkuY,EAAW,CACb,MAAMC,EAAa,GACnBA,EAAW3zY,IAAM,CAAC,EAClB,IAAK,IAAIkkB,EAAI,EAAG4Z,EAAI41W,EAAUjlY,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAChD,MAAM0vX,EAAWF,EAAUxvX,GACL,OAAlB0vX,EAASruY,OACXouY,EAAWA,EAAWllY,QAAU,CAC9BlJ,KAAMquY,EAASruY,KACfhE,MAAOqyY,EAASryY,OAElBoyY,EAAW3zY,IAAI4zY,EAASruY,MAAQquY,EAASryY,MAE7C,CACAmqC,EAAMlmC,WAAamuY,CACrB,CAEA,OADAjoW,EAAMnqC,MAAQI,EAAKJ,MACZmqC,CACT,CACA,IAAAsjC,CAAKioD,GACH,MAAMt1H,EAAOxE,KAKb,OAJIwE,EAAK2mD,SACP3mD,EAAK2mD,OAAOowF,OAAOzhB,EAASt1H,GAC5Bs1H,EAAQE,OAAOx1H,IAEVA,CACT,CACA,MAAA21H,GACE,MAAM31H,EAAOxE,KACb,IAAK,IAAIiN,EAAOzI,EAAKq1H,WAAY5sH,GAAO,CACtC,MAAMo/C,EAAOp/C,EAAKo/C,KAClB7nD,EAAK+2I,OAAOtuI,EAAMzI,GAAM,GACxByI,EAAOo/C,CACT,CACA7nD,EAAKmzD,QACP,CACA,MAAAA,GACE,MAAMnzD,EAAOxE,KAAMmrD,EAAS3mD,EAAK2mD,OAAQkB,EAAO7nD,EAAK6nD,KAAM8B,EAAO3pD,EAAK2pD,KAoBvE,OAnBIhD,IACEA,EAAO0uE,aAAer1H,GACxB2mD,EAAO0uE,WAAaxtE,EAChBA,IACFA,EAAK8B,KAAO,OAELA,IACTA,EAAK9B,KAAOA,GAEVlB,EAAOkrI,YAAc7xL,GACvB2mD,EAAOkrI,UAAYloI,EACfA,IACFA,EAAK9B,KAAO,OAELA,IACTA,EAAK8B,KAAOA,GAEd3pD,EAAK2mD,OAAS3mD,EAAK6nD,KAAO7nD,EAAK2pD,KAAO,MAEjC3pD,CACT,CACA,MAAAw1H,CAAO/sH,GACL,MAAMzI,EAAOxE,KACTiN,EAAKk+C,QACPl+C,EAAK0qD,SAEP,MAAMhhB,EAAOnyC,EAAK6xL,UASlB,OARI1/I,GACFA,EAAK0V,KAAOp/C,EACZA,EAAKkhD,KAAOxX,EACZnyC,EAAK6xL,UAAYppL,GAEjBzI,EAAK6xL,UAAY7xL,EAAKq1H,WAAa5sH,EAErCA,EAAKk+C,OAAS3mD,EACPyI,CACT,CACA,MAAAsuI,CAAOtuI,EAAM46L,EAAShjG,GAChB53F,EAAKk+C,QACPl+C,EAAK0qD,SAEP,MAAMxM,EAAS08I,EAAQ18I,QAAUnrD,KAqBjC,OApBI6kG,GACEgjG,IAAY18I,EAAO0uE,WACrB1uE,EAAO0uE,WAAa5sH,EACX46L,EAAQ15I,OACjB05I,EAAQ15I,KAAK9B,KAAOp/C,GAEtBA,EAAKkhD,KAAO05I,EAAQ15I,KACpBlhD,EAAKo/C,KAAOw7I,EACZA,EAAQ15I,KAAOlhD,IAEX46L,IAAY18I,EAAOkrI,UACrBlrI,EAAOkrI,UAAYppL,EACV46L,EAAQx7I,OACjBw7I,EAAQx7I,KAAK8B,KAAOlhD,GAEtBA,EAAKo/C,KAAOw7I,EAAQx7I,KACpBp/C,EAAKkhD,KAAO05I,EACZA,EAAQx7I,KAAOp/C,GAEjBA,EAAKk+C,OAASA,EACPl+C,CACT,CACA,MAAAqO,CAAOlT,GACL,MAAM5D,EAAOxE,KACPg7S,EAAa,GACnB,IAAK,IAAI/tS,EAAOzI,EAAKq1H,WAAY5sH,EAAMA,EAAOkpY,GAAOlpY,EAAMzI,GACrDyI,EAAK7E,OAASA,GAChB4yS,EAAW/2S,KAAKgJ,GAGpB,OAAO+tS,CACT,CACA,QAAA5gL,GACE,MACM4gL,EAAa,GACnB,IAAK,IAAI/tS,EAFIjN,KAEQ65H,WAAY5sH,EAAMA,EAAOA,EAAKo/C,KACjD2uP,EAAW/2S,KAAKgJ,GAElB,OAAO+tS,CACT,CACA,KAAAx+Q,GACE,MAAMh4B,EAAOxE,KACb,GAAIwE,EAAKq1H,WAAY,CACnB,MAAM7sH,EAAQ,GACd,IAAK,IAAIC,EAAOzI,EAAKq1H,WAAY5sH,EAAMA,EAAOkpY,GAAOlpY,EAAMzI,GACzDwI,EAAM/I,KAAKgJ,GAEb,IAAI8Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB9Z,EAAKk+C,OAASl+C,EAAK4sH,WAAa5sH,EAAKopL,UAAYppL,EAAKo/C,KAAOp/C,EAAKkhD,KAAO,IAC3E,CACF,CAEA,OADA3pD,EAAKq1H,WAAar1H,EAAK6xL,UAAY,KAC5B7xL,CACT,CACA,OAAAggK,CAAQj5J,EAAUmrY,EAAa,CAAC,EAAG97R,GACjC,IAAIhmG,EACJ,MAAMpQ,EAAOxE,KACb,IAAIiN,EAAOzI,EAAKq1H,WAChB,GAAIw8Q,GAAkB7xY,GACpB,OAAO,EAET,GAAIyI,EACF,EAAG,CACD,GAAkB,IAAdA,EAAKV,KAAY,CACnB,GAAIU,EAAK6pH,KAAK,kBACZ,SAEF,GAAIvrH,EAAS0B,EAAK7E,MAChB,OAAO,EAET,GAAIiuY,GAAkBppY,GACpB,OAAO,CAEX,CACA,GAAkB,IAAdA,EAAKV,KACP,OAAO,EAET,GAAkB,IAAdU,EAAKV,OAAe6pY,GAAgBnpY,GACtC,OAAO,EAET,GAAkB,IAAdA,EAAKV,MAAcU,EAAKk+C,QAAUurV,EAAWzpY,EAAKk+C,OAAO/iD,OAASy/V,GAAuC,QAArBjzV,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,IACxI,OAAO,EAET,GAAIgmG,GAAaA,EAAU3tG,GACzB,OAAO,CAEX,OAASA,EAAOkpY,GAAOlpY,EAAMzI,IAE/B,OAAO,CACT,CACA,IAAAmhW,CAAKx3S,GACH,OAAOgoV,GAAOn2Y,KAAM,KAAMmuD,EAC5B,EAGF,MAAMwoV,GAAuBnmR,GAAMs2L,QAAQ,8DAA+D,KACpG8vF,GAAe3pY,GAAQ4jH,EAAS5jH,EAAKwmI,YAAcxmI,EAAKwmI,UAAUvsI,SAASyjX,IAC3EksB,GAA2BC,IAAsC,IAArBA,EAAUxlY,OAAe,GAAK,GAAI6xV,EAAM2zC,GAAWhgR,GAAQ,IAAKA,OAAU5yH,KAAK,SAAnF,yBAExC6yY,GAA0Bx/X,GAAQxS,SAASiyY,iBAAiBz/X,EAAMslP,WAAW8F,cAAc11P,GAAQ2pY,GAAa3pY,GAAQ4vP,WAAWo6I,cAAgBp6I,WAAWq6I,cAC9JC,GAAgC5/X,GAAQxS,SAASiyY,iBAAiBz/X,EAAMslP,WAAW+F,WAAW31P,IAClG,GAAI2pY,GAAa3pY,GAAO,CACtB,MAAMk+C,EAASl+C,EAAK0wB,WACpB,OAAOwtB,GAAUw+I,GAAMgtM,GAAsBxrV,EAAO0qE,UAAYgnI,WAAWo6I,cAAgBp6I,WAAWq6I,WACxG,CACE,OAAOr6I,WAAWq6I,WACpB,IAEIE,GAAiB7/X,GAAqD,OAA7Cw/X,GAAwBx/X,GAAMstP,WACvDwyI,GAAuB9/X,GAA2D,OAAnD4/X,GAA8B5/X,GAAMstP,WACnEyyI,GAAmB,CAACR,EAAWv/X,IAAqE,OAA5DA,EAAK6gH,cAAcy+Q,GAAyBC,IACpFS,GAAqB,CAACT,EAAWv/X,KACrC6rV,EAdwB,EAAC0zC,EAAWv/X,IAASA,EAAKtJ,iBAAiB4oY,GAAyBC,IAcrFU,CAAkBV,EAAWv/X,IAAOunH,IACzC,MAAMr6H,EAAUuyH,GAAaS,QAAQqH,GACI,QAArC4G,GAAMjhI,EAAS,kBACjBo5M,GAASp5M,GAET2+V,EAAO0zC,GAAWhgR,IACZxB,GAAM7wH,EAASqyH,IACjBqvO,GAAS1hW,EAASqyH,EACpB,GAEJ,GACA,EAEE2gR,GAA6BrtN,IACjC,IAAIvlH,EAAOulH,EAAOy6E,WAClB,KAAgB,OAAThgM,GACLA,EAAK4uE,UAAY,KACjB5uE,EAAOulH,EAAOy6E,UAChB,EAEI6yI,GAAoB/uM,EAAQ8uM,GAA4BV,IACxDY,GAA0BhvM,EAAQ8uM,GAA4BN,IAC9DttM,GAAS,CAACtyL,EAAMu/X,KACpB,MAAMc,EAAmB,CACvB,CACEC,UAAWxmR,EAAMimR,GAAkBR,GACnC/sY,OAAQsnH,EAAMkmR,GAAoBT,IAEpC,CACEe,UAAWT,GACXrtY,OAAQ2tY,IAEV,CACEG,UAAWR,GACXttY,OAAQ4tY,KAGZ,IAAIG,EAAUvgY,EACVwgY,GAAS,EAUb,OATA30C,EAAOw0C,GAAkB,EAAEC,YAAW9tY,aAChC8tY,EAAUC,KACPC,IACHD,EAAUvgY,EAAKgjH,WAAU,GACzBw9Q,GAAS,GAEXhuY,EAAO+tY,GACT,IAEKA,CAAO,EAGVE,GAAuB7sV,IAC3B,MAAM8sV,EAAgB77Q,GAAYjxE,EAAQ,oBAC1Ci4S,EAAO60C,GAAengR,IAED,QADA4N,GAAM5N,EAAM,kBAE7B+lF,GAAS/lF,GACAgyP,GAAOhyP,IAChByB,GAASzB,EAAMd,GAAaO,SAASkwO,KACrC5pJ,GAAS/lF,IAETqC,GAAOrC,EACT,GACA,EAEEogR,GAAoB/sV,IACxB,MAAMpD,EAASq0E,GAAYjxE,EAAQ,SACnCi4S,EAAOr7S,GAAQ3+C,IACb+8V,GAAS/8V,EAAO,OAAO,GACvB,EAQE+uY,GAAsB,CAACliQ,EAAQ1+H,KACnC,MAAMokH,EAAMsa,EAAOwK,SACb5nB,EAAM0C,GAAYvE,GAAaS,QAAQwe,EAAO5tC,YAC9Cq4C,EAAe1pB,GAAaM,QAAQ,MAAOqE,GACjDuqO,GAAMxlN,EAAc,iBAAkB,OACtC/iB,GAAO+iB,EAAc,CACnBp0H,SAAU,QACV3qB,KAAM,aACN20B,IAAK,MAEPonG,GAAMgjB,EAAcnpI,EAAKmb,WACzBslX,GAAqBt3P,GACrBw3P,GAAkBx3P,GAClB,MAAM3jG,EA94ToB87E,IAAOyC,GAAazC,GAAOA,EAAM7B,GAAaS,QAAQmB,GAAgBC,GAAKjD,IAAIr+G,MA84T5FqpI,CAAoB/nB,GACjCa,GAAS38E,EAAM2jG,GACf,MAAMn5I,EAAUqjX,GAAOlqO,EAAa9qB,IAAIlI,WAExC,OADAmwF,GAASn9D,GACFn5I,CAAO,EAEV6wY,GAAqB,CAACniQ,EAAQh9H,EAAM1B,KACxC,IAAIhQ,EAEFA,EADkB,QAAhB0R,EAAK4iC,OACG20E,GAAMxpH,KAAK4jX,GAAO/gL,GAAOtyL,EAAM0+H,EAAOiL,WAAWm3P,gBAAgB3lX,YAClD,SAAhBzZ,EAAK4iC,OACJs8V,GAAoBliQ,EAAQ1+H,GACb,SAAhB0B,EAAK4iC,OACJo6F,EAAOiL,WAAWC,UAAU5pI,EAAM0B,GA/BtB,EAACg9H,EAAQ/e,KACjC,MAAM4gE,EAAYP,GAAmBthD,GAC/BqiQ,EAAc,IAAInwY,OAAO,MAAO2vL,gDAA4DA,+BAClG,OAAO5gE,EAAKjyH,QAAQqzY,EAAa,GAAG,EA8BxBC,CAAkBtiQ,EAAQA,EAAOiL,WAAWC,UAAU5pI,EAAM0B,IAGxE,MADmC,SAAhBA,EAAK4iC,SAAsBsuU,GAAoBnzP,GAAaS,QAAQlgH,KAClEs5G,EAAStpH,GAAWipH,GAAMxpH,KAAKO,GAAWA,CAAO,EAIlEixY,GAAYhoR,GAAMs2L,QAClB2xF,GAASx8N,IACb,MAAM/kD,EAAO,GAEPwhR,GADNz8N,EAAWA,GAAY,CAAC,GACAy8N,OAClBC,EAAeH,GAAUv8N,EAAS28N,eAAiB,IACnDC,EAAcL,GAAUv8N,EAAS68N,cAAgB,IACjDvsN,EAASmlL,GAASC,cAAc11L,EAAS88N,iBAAmB,MAAO98N,EAASu1L,UAC5EwnC,EAAyC,UAA5B/8N,EAASg9N,eAC5B,MAAO,CACL52Y,MAAO,CAAC+F,EAAMquH,EAAOj6F,KACnB,GAAIk8W,GAAUC,EAAavwY,IAAS8uH,EAAK5lH,OAAS,EAAG,CACnD,MAAMlN,EAAQ8yH,EAAKA,EAAK5lH,OAAS,GAC7BlN,EAAMkN,OAAS,GAAe,OAAVlN,GACtB8yH,EAAKjzH,KAAK,KAEd,CAEA,GADAizH,EAAKjzH,KAAK,IAAKmE,GACXquH,EACF,IAAK,IAAI1vG,EAAI,EAAG4Z,EAAI81F,EAAMnlH,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAC5C,MAAM+vG,EAAOL,EAAM1vG,GACnBmwG,EAAKjzH,KAAK,IAAK6yH,EAAK1uH,KAAM,KAAMmkL,EAAOz1D,EAAK1yH,OAAO,GAAO,IAC5D,CAOF,GAJE8yH,EAAKA,EAAK5lH,SADPkrB,GAASw8W,EACQ,IAEA,MAElBx8W,GAASk8W,GAAUG,EAAYzwY,IAAS8uH,EAAK5lH,OAAS,EAAG,CAC3D,MAAMlN,EAAQ8yH,EAAKA,EAAK5lH,OAAS,GAC7BlN,EAAMkN,OAAS,GAAe,OAAVlN,GACtB8yH,EAAKjzH,KAAK,KAEd,GAEF+b,IAAK5X,IACH,IAAIhE,EACJ8yH,EAAKjzH,KAAK,KAAMmE,EAAM,KAClBswY,GAAUG,EAAYzwY,IAAS8uH,EAAK5lH,OAAS,IAC/ClN,EAAQ8yH,EAAKA,EAAK5lH,OAAS,GACvBlN,EAAMkN,OAAS,GAAe,OAAVlN,GACtB8yH,EAAKjzH,KAAK,MAEd,EAEFuoB,KAAM,CAACA,EAAMyB,KACPzB,EAAKlb,OAAS,IAChB4lH,EAAKA,EAAK5lH,QAAU2c,EAAMzB,EAAO+/J,EAAO//J,GAC1C,EAEF0sX,MAAO1sX,IACL0qG,EAAKjzH,KAAK,YAAauoB,EAAM,MAAM,EAErC2sX,QAAS3sX,IACP0qG,EAAKjzH,KAAK,UAAQuoB,EAAM,SAAM,EAEhC4sX,GAAI,CAAChxY,EAAMokB,KACLA,EACF0qG,EAAKjzH,KAAK,KAAMmE,EAAM,IAAKmkL,EAAO//J,GAAO,MAEzC0qG,EAAKjzH,KAAK,KAAMmE,EAAM,MAEpBswY,GACFxhR,EAAKjzH,KAAK,KACZ,EAEFohQ,QAAS74O,IACP0qG,EAAKjzH,KAAK,YAAauoB,EAAM,IAAKksX,EAAS,KAAO,GAAG,EAEvDh6U,MAAO,KACLw4D,EAAK5lH,OAAS,CAAC,EAEjB+5K,WAAY,IACHn0D,EAAKhzH,KAAK,IAAIe,QAAQ,MAAO,IAEvC,EAGGo0Y,GAAiB,CAACp9N,EAAW,CAAC,EAAG51K,EAASivW,QAC9C,MAAM5hW,EAAS+kY,GAAOx8N,GACtBA,EAAS/+D,WAAW,aAAc++D,IAAWA,EAAS/+D,SAuGtD,MAAO,CAAEikC,UAtGSl0I,IAChB,MAAMiwG,EAAW++D,EAAS/+D,SACpBq3D,EAAW,CACf,EAAGtnK,IACD,IAAI2H,EACJlB,EAAO8Y,KAA2B,QAArB5X,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAAI3H,EAAKghB,IAAI,EAE9E,EAAGhhB,IACD,IAAI2H,EACJlB,EAAOylY,QAA8B,QAArBvkY,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAAG,EAEvE,EAAG3H,IACDyG,EAAO0lY,GAAGnsY,EAAK7E,KAAM6E,EAAK7I,MAAM,EAElC,GAAI6I,IACF,IAAI2H,EACJlB,EAAO2xP,QAA8B,QAArBzwP,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAAG,EAEvE,EAAG3H,IACD,IAAI2H,EACJlB,EAAOwlY,MAA4B,QAArBtkY,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAAG,EAErE,GAAI3H,IACF,IAAIq4S,EAAWr4S,EACf,GAAIq4S,EAAWA,EAASzrL,WACtB,GACE8rO,EAAKrgD,SACEA,EAAWA,EAASj5P,KAC/B,GAGJ34C,EAAOgrD,QACP,MAAMinS,EAAO14V,IACX,IAAI2H,EACJ,MAAMm7D,EAAUwkG,EAAStnK,EAAKV,MAC9B,GAAKwjE,EAuDHA,EAAQ9iE,OAvDI,CACZ,MAAM7E,EAAO6E,EAAK7E,KACZo8J,EAAUp8J,KAAQ/B,EAAO6wL,kBAC/B,IAAIzgE,EAAQxpH,EAAK5E,WACjB,GAAI60G,GAAYuZ,GAASA,EAAMnlH,OAAS,EAAG,CACzC,MAAMgoY,EAAc,GACpBA,EAAYz2Y,IAAM,CAAC,EACnB,MAAM02Y,EAAclzY,EAAOkzW,eAAetsW,EAAK7E,MAC/C,GAAImxY,EAAa,CACf,IAAK,IAAIxyX,EAAI,EAAG4Z,EAAI44W,EAAY7lC,gBAAgBpiW,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAClE,MAAMo9O,EAAWo1I,EAAY7lC,gBAAgB3sV,GAC7C,GAAIo9O,KAAY1tI,EAAM5zH,IAAK,CACzB,MAAMuhQ,EAAY3tI,EAAM5zH,IAAIshQ,GAC5Bm1I,EAAYz2Y,IAAIshQ,GAAYC,EAC5Bk1I,EAAYr1Y,KAAK,CACfmE,KAAM+7P,EACN//P,MAAOggQ,GAEX,CACF,CACA,IAAK,IAAIr9O,EAAI,EAAG4Z,EAAI81F,EAAMnlH,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAC5C,MAAMo9O,EAAW1tI,EAAM1vG,GAAG3e,KAC1B,KAAM+7P,KAAYm1I,EAAYz2Y,KAAM,CAClC,MAAMuhQ,EAAY3tI,EAAM5zH,IAAIshQ,GAC5Bm1I,EAAYz2Y,IAAIshQ,GAAYC,EAC5Bk1I,EAAYr1Y,KAAK,CACfmE,KAAM+7P,EACN//P,MAAOggQ,GAEX,CACF,CACA3tI,EAAQ6iR,CACV,CACF,CAEA,GADA5lY,EAAOrR,MAAM+F,EAAMquH,EAAO+tC,GACtBgnM,GAAyBpjW,GACvByoH,EAAS5jH,EAAK7I,QAChBsP,EAAO8Y,KAAKvf,EAAK7I,OAAO,GAE1BsP,EAAOsM,IAAI5X,QAEX,IAAKo8J,EAAS,CACZ,IAAI5nC,EAAQ3vH,EAAK4sH,WACjB,GAAI+C,EAAO,CACK,QAATx0H,GAA2B,aAATA,GAAuC,IAAfw0H,EAAMrwH,MAAkF,QAA5C,QAAtBqI,EAAKgoH,EAAMx4H,aAA0B,IAAPwQ,OAAgB,EAASA,EAAG,KAC7HlB,EAAO8Y,KAAK,MAAM,GAEpB,GACEm5U,EAAK/oO,SACEA,EAAQA,EAAMvwE,KACzB,CACA34C,EAAOsM,IAAI5X,EACb,CAEJ,CAEA,EASF,OAPkB,IAAd6E,EAAKV,MAAe0vK,EAAS3oF,MAER,IAAdrmF,EAAKV,KACdgoK,EAAS,GAAGtnK,GAEZsnK,EAAS,IAAItnK,GAJb04V,EAAK14V,GAMAyG,EAAO23K,YAAY,EAER,EAGhBmuN,GAAuB,IAAIt5Y,IAmD/BkjW,EAjDgC,CAC9B,SACA,cACA,eACA,aACA,gBACA,UACA,eACA,gBACA,cACA,iBACA,SACA,eACA,eACA,eACA,aACA,wBACA,kBACA,mBACA,oBACA,sBACA,oBACA,kBACA,QACA,WACA,OACA,QACA,MACA,SACA,UACA,UACA,YACA,QACA,YACA,YACA,SACA,aACA,aACA,WACA,aACA,aACA,gBACA,iBACA,aACA,mBACA,sBACA,sBACA,+BAE8BrwU,IAC9BymX,GAAqB/4Y,IAAIsyB,EAAM,IAGnC,MAAM0mX,GAAkC,IAAIv5Y,IAG1CkjW,EAD2C,CAAC,qBACDrwU,IACzC0mX,GAAgCh5Y,IAAIsyB,EAAM,IAG9C,MAAM2mX,GAAsB,CAC1B,OACA,kBACA,iBAGIC,GAAgB,CAAC/jR,EAAK3oH,IAASlJ,GADjB,EAAC6xH,EAAK3oH,IAAS2oH,EAAImyL,WAAWnyL,EAAI6iB,UAAUxrI,EAAM,UAC5B2sY,CAAYhkR,EAAK3oH,IAGrD4sY,GAA0B,CAACjkR,EAAK3oH,IAASqlH,EAAOqnR,GAAc/jR,EAAK3oH,IAAO8lB,GAFlDA,IAASymX,GAAqBttY,IAAI6mB,GAEyB+mX,CAAsB/mX,KACzGgnX,GAAqC,CAACnkR,EAAK3oH,IAAS4sY,GAAwBjkR,EAAK3oH,IAASqlH,EAAOqnR,GAAc/jR,EAAK3oH,IAAO8lB,GAFxFA,IAAS0mX,GAAgCvtY,IAAI6mB,GAEoDinX,CAAiCjnX,KAErKknX,GAAmB,CAACrkR,EAAK3oH,EAAM0wB,KACnC,MAAMu8W,EAAiBP,GAAc/jR,EAAK3oH,GACpCktY,EAAuBR,GAAc/jR,EAAKj4F,GAC1Cy8W,EAAgB5yV,IACpB,IAAI5yC,EAAI+/I,EACR,MAAMlhB,EAAgD,QAAnC7+H,EAAKghH,EAAI1jE,SAASjlD,EAAMu6C,UAA0B,IAAP5yC,EAAgBA,EAAK,GAC7EylY,EAAwD,QAAzC1lP,EAAK/+B,EAAI1jE,SAASv0B,EAAY6pB,UAA0B,IAAPmtG,EAAgBA,EAAK,GAC3F,OAAOp3B,GAAWkW,IAAclW,GAAW88Q,IAAgB5mQ,IAAc4mQ,CAAW,EAEtF,OAAO/nR,EAAO4nR,GAAgBI,IAC5B,MAAMC,EAAajzV,GAASgrE,EAAOhrE,GAAOE,GAAQA,IAAS8yV,IAC3D,IAAKC,EAAWJ,IAAyBI,EAAWb,IAAsB,CACxE,MAAMc,EAb4Bl3C,EAaU62C,GAbOpnX,GAASu/F,EAAOonR,IAAqBlyV,GAAQxI,GAAWjsB,EAAOy0B,OAclH,OAAO8qE,EAAOkoR,EAAeJ,EAC/B,CACE,OAAOA,EAAcE,EACvB,GACA,EAGEG,GAAS,CAACx5M,EAASrmF,EAAWtrD,IAAQqiE,EAASlwH,KAAK6tD,EAAIwB,aAAahpD,OAAOohW,IAAU52O,QAAO9lG,IACjG,MAAM0vB,EAAQ+kJ,EAAU,GAAK,EAC7B,OAAOrmF,EAAUpuF,EAAK1Y,KAAKvO,OAAO+pD,EAAIvP,SAAW7D,GAAO,IAEpDw+V,GAAgBrpR,EAAMopR,IAAQ,EAAM3X,IACpC6X,GAAetpR,EAAMopR,IAAQ,EAAO3X,IACpC8X,GAActrV,IAClB,MAAMwB,EAAYxB,EAAIwB,YACtB,OAAOo4S,GAASp4S,KAAyC,IAA1BA,EAAUh9C,KAAKxC,QAAgB6uL,GAAOrvI,EAAUh9C,OAAS42X,GAAgB3oM,eAAejxI,EAAUnzB,YAAY,EAEzIk9W,GAAyB,CAACh2S,EAAQ+V,IAActrD,GAAOyuU,GAA6Bl5R,EAAS,GAAK,EAAGv1C,GAAKxnD,OAAO8yG,GAAWsX,SAC5H4oR,GAAe7tY,GAAQs8V,GAAMt8V,IAA0D,UAAjDwhI,GAAMzX,GAAaS,QAAQxqH,GAAO,WACxE8tY,GAAY9tY,GAAQw8V,GAAyBx8V,KAtpThCA,IAAQ07V,GAAY17V,IAAiD,QAAxCA,EAAK3D,aAAa,kBAspTL0xY,CAAW/tY,GAClEguY,GAAqBJ,IAAuB,EAAMC,IAClDI,GAAoBL,IAAuB,EAAOC,IAClDK,GAAgBN,IAAuB,EAAMjxC,IAC7CwxC,GAAeP,IAAuB,EAAOjxC,IAC7CyxC,GAAgBR,IAAuB,EAAM7xC,IAC7CsyC,GAAeT,IAAuB,EAAO7xC,IAC7CuyC,GAA+BV,IAAuB,EAAME,IAC5DS,GAA8BX,IAAuB,EAAOE,IAY5DjiR,GAAU,CAACz2H,EAAO06C,IATH,EAAC16C,EAAO06C,EAAM69D,IAC7B7vG,GAASgyC,EAAM16C,GACDmkW,GAAUnkW,GAAOy8H,GACxBlkB,EAAUkkB,IAAQn9F,GAAGm9F,EAAK/hF,KAJbv3C,MAAM,GAAI,GAOzB,GAGsBi2Y,CAAap5Y,EAAO06C,EAAM00E,GACrDiqR,GAAiB,CAACr5Y,EAAO06C,IAAS,CAAC16C,GAAOS,OAAOg2H,GAAQz2H,EAAO06C,IAEhE4+V,GAA+B,CAAC16M,EAASlkJ,EAAMt7C,IAAS++X,GAAev/L,EAASlkJ,EAAMt7C,EAAMm5Y,IAE5FgB,GAAoB,CAAC7+V,EAAMuS,EAAKjpD,IAAWimM,GAAOovM,GAAe1kR,GAAaS,QAAQnoE,EAAIwB,aAAc/T,GAD5F12C,IAAU2rD,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,IAC+D4hG,CAAUvtJ,IACzHw1Y,GAA+B,CAAC56M,EAASlkJ,EAAMuS,EAAKjpD,IAAWs1Y,GAA6B16M,EAASlkJ,EAAK64E,IAAKtmE,GAAKijE,QAAOmlG,GAAUkkL,GAAkB7+V,EAAMuS,EAAKjpD,GAAQ0rH,MAAK,KAAO6rQ,GAAclmK,EAAQpoK,EAAKvS,EAAK64E,OAAMkmR,IAAcle,GAAclmK,EAAQpoK,EAAKvS,EAAK64E,MAAQ7qH,GAAS+wY,EAAW9kR,GAAaS,QAAQigG,EAAO5mK,kBAClUirV,GAAoB,CAAC96M,EAASlkJ,EAAMuS,EAAKjpD,IAAWu1Y,GAAkB7+V,EAAMuS,EAAKjpD,GAAQ0rH,MAAK,IAAM4pR,GAA6B16M,EAASlkJ,EAAK64E,IAAKtmE,GAAKijE,QAAOmlG,IAAWkmK,GAAclmK,EAAQpoK,EAAKvS,EAAK64E,SAAOzqE,GAAUwwV,GAA6B16M,EAAS91I,EAAOyqE,IAAKtmE,GAAK6iE,WACnR6pR,GAAmB3qR,EAAM0qR,IAAmB,GAC5CE,GAAiB5qR,EAAM0qR,IAAmB,GAC1CG,GAAgB7qR,EAAMwqR,IAA8B,GACpDM,GAAe9qR,EAAMwqR,IAA8B,GAEnDO,GAAS9sV,GAAOsvU,GAAuBtvU,GAAKgjE,OAAOw3P,IACnDn+M,GAAS,CAACs1B,EAASlkJ,EAAMuS,EAAKjpD,KAClC,MAAMi0L,EAAegpK,EAASo4C,GAAe1kR,GAAaS,QAAQnoE,EAAIwB,aAAc/T,IAAOiV,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,MAC/GhnD,EAAQmW,GAAKm5K,GAAc9nE,MAAMz1E,GACvC,OAAOwjV,GAAat/L,EAASj2L,EAAM4qH,IAAKtmE,GAAKxnD,OAAOs0Y,GAAO,EAEvDC,GAAe,CAACt/V,EAAMuS,EAAKjpD,IAAWu4X,GAAuBtvU,GAAKgjE,OAAOw3P,KAAWn+M,IAAO,EAAM5uH,EAAMuS,EAAKjpD,GAAQ6rH,SACpHoqR,GAAY,CAACv/V,EAAMuS,EAAKjpD,IA1oHKipD,IAAOqiE,EAASlwH,KAAK6tD,EAAIw1H,SAAQ,IAAOjiL,IAAIm0H,GAAaS,SA0oHnD8kR,CAA2BjtV,GAAKgjE,OAAOw3P,KAAWn+M,IAAO,EAAO5uH,EAAMuS,EAAKjpD,GAAQ6rH,SACtHsqR,GAAiBnrR,EAAMs6C,IAAQ,GAC/B8wO,GAAaprR,EAAMs6C,IAAQ,GAE3B+wO,GAAmBptV,GAAOogU,GAAcO,eAAe3gU,KAASA,EAAI87T,cAAgB97T,EAAIg8T,UACxFqxB,GAAkB,CAAC5/V,EAAMuS,EAAKjpD,KAClC,MAAMi0L,EAAegpK,EAASo4C,GAAe1kR,GAAaS,QAAQnoE,EAAIwB,aAAc/T,IAAOiV,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,MACrH,OAAO7wC,GAAKm5K,GAAc9nE,MAAMz1E,EAAK,EAEjC6/V,GAAiB,CAAC7/V,EAAMuS,EAAKjpD,IAC7Bq2Y,GAAiBptV,GACZqrV,GAAarrV,GAEbqrV,GAAarrV,IAAQuxU,GAAa8b,GAAgB5/V,EAAMuS,EAAKjpD,GAAQuvH,IAAKtmE,GAAKgjE,OAAOqoR,IAG3FkC,GAAgB,CAAC9/V,EAAMuS,EAAKjpD,IAC5Bq2Y,GAAiBptV,GACZorV,GAAcprV,GAEdorV,GAAcprV,IAAQsxU,GAAa+b,GAAgB5/V,EAAMuS,EAAKjpD,GAAQuvH,IAAKtmE,GAAKgjE,OAAOooR,IAO5FoC,GAAUxtV,GAAOsvU,GAAuBtvU,GAAK6a,MAAK20D,GAAOo3E,GAAUp3E,EAAKgnO,MAAcxzO,QAAOwM,GAJhF16H,IAASkvH,EAAW,CACrC,MACA,YACClvH,GACuG24Y,CAAWtuQ,GAAM3P,EAAK,kBAG1Hk+Q,GAAmB,CAACjgW,EAAMuS,EAAKjpD,IAFT,EAAC02C,EAAMuS,IAAQuxU,GAAa9jV,EAAK64E,IAAKtmE,GAAK6iE,SAEvB8qR,CAAoBlgW,EAAMuS,IADpD,EAACvS,EAAMuS,IAAQsxU,GAAa7jV,EAAK64E,IAAKtmE,GAAK6iE,SACiB+qR,CAAcngW,EAAMuS,IAAQ0sV,GAAiBj/V,EAAMuS,EAAKjpD,IAAW41Y,GAAel/V,EAAMuS,EAAKjpD,IAAWi2Y,GAAUv/V,EAAMuS,EAAKjpD,IAAWg2Y,GAAat/V,EAAMuS,EAAKjpD,GAE5O82Y,GAAoB,CAACpgW,EAAMmW,IAAcpC,IAC7C,OAFiB7jD,EAEC,IAAIm6V,GAAct2S,EAAW/T,GAAMmW,KAF5B+9D,EAAchkH,IAASw8V,GAAyBx8V,IAAS8vX,GAAY9vX,GAA7EA,KAEiD,EAY9DmwY,GAAkB,CAACrgW,EAAMuS,EAAKjpD,KAC9By2Y,GAAQxtV,KAGH0tV,GAAiBjgW,EAAMuS,EAAKjpD,IAAWu2Y,GAAe7/V,EAAMuS,EAAKjpD,IAAWw2Y,GAAc9/V,EAAMuS,EAAKjpD,IAG1Gg3Y,GAAoB,CAACtgW,EAAMuS,EAAKjpD,KAChCy2Y,GAAQxtV,KAGH0sV,GAAiBj/V,EAAMuS,EAAKjpD,IAAW61Y,GAAcn/V,EAAMuS,EAAKjpD,IAAWi2Y,GAAUv/V,EAAMuS,EAAKjpD,IAAWu2Y,GAAe7/V,EAAMuS,EAAKjpD,IAhBxH,EAAC02C,EAAMuS,KAC7B,MAAMy+Q,EAAU8yD,GAAa9jV,EAAK64E,IAAKtmE,GAAKkjE,MAAMljE,GAC5CguV,EAAiBH,GAAkBpgW,EAAK64E,IAAK,QACnD,OAAOtmE,EAAI87T,cAAgBkyB,EAAehuV,EAAIwB,cAAgBwsV,EAAevvE,EAAQj9Q,aAAa,EAauDysV,CAAgBxgW,EAAMuS,IAY3KkuV,GAAqB,CAACzgW,EAAMuS,EAAKjpD,KACjCy2Y,GAAQxtV,KAGH2sV,GAAel/V,EAAMuS,EAAKjpD,IAAW81Y,GAAap/V,EAAMuS,EAAKjpD,IAAWg2Y,GAAat/V,EAAMuS,EAAKjpD,IAAWw2Y,GAAc9/V,EAAMuS,EAAKjpD,IArCtH,EAAC02C,EAAMuS,KAC9B,MAAMmuV,EAAU7c,GAAa7jV,EAAK64E,IAAKtmE,GAAKkjE,MAAMljE,GAC5CouV,EAAiBP,GAAkBpgW,EAAK64E,IAAK,QACnD,OAAOtmE,EAAIg8T,YAAcoyB,EAAepuV,EAAIwB,cAAgB4sV,EAAeD,EAAQ3sV,aAAa,EAkCwD6sV,CAAiB5gW,EAAMuS,IAG3KsuV,GAAgB,CAAC7gW,EAAMuS,EAAKjpD,IAAWg3Y,GAAkBtgW,EAAMuS,EAAKjpD,IAAWm3Y,GAAmBzgW,EAhBtFuS,KAChB,MAAMwB,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACnB,OAAImpT,GAASp4S,IAAc/Q,EAAS+Q,EAAUh9C,KAAKxC,OAC1Co+W,GAAc5+T,EAAW/Q,EAAS,GAElCuP,CACT,EAS4GkvU,CAAUlvU,GAAMjpD,GACxHw3Y,GAAW,CAACrxX,EAAMuzB,IAAW6iV,GAAOp2W,EAAKjnB,OAAOw6C,IAChD+9V,GAAiB,CAACtxX,EAAMuzB,IAAW+iV,GAAat2W,EAAKjnB,OAAOw6C,IAe5Dg+V,GAAuB,CAAChhW,EAAM9vC,EAAM+wY,EAAU33Y,KAClD,MAAMmmB,EAAOvf,EAAK6G,KACZmqY,EAAWvuB,GAAcziX,EAAM,GACrC,OAAK+wY,IAAYH,GAASrxX,EAAM,IAAOoxX,GAAc7gW,EAAMkhW,EAAU53Y,MAG1D23Y,GAAYF,GAAetxX,EAAM,IAAM6wX,GAAkBtgW,EAAMkhW,EAAU53Y,MAClF4G,EAAK6G,KAAO4zV,GAAOl7U,EAAKhnB,MAAM,IACvB,IAJPyH,EAAK6G,KAAO,IAAM0Y,EAAKhnB,MAAM,IACtB,EAMT,EAEI04Y,GAAkCjxY,IACtC,MAAMuf,EAAOvf,EAAK6G,KACZqqY,EAzBoB3xX,KAC1B,MAAM85K,EAAQ95K,EAAKrlB,MAAM,IACzB,OAAOg8V,EAAM78J,GAAO,CAACvgB,EAAKh/J,IACpB67W,GAAO78M,IAAQh/J,EAAI,GAAKA,EAAIu/K,EAAMh1L,OAAS,GAAKs5V,GAAUtkK,EAAMv/K,EAAI,KAAO6jV,GAAUtkK,EAAMv/K,EAAI,IAC1F,IAEAg/J,IAER7hL,KAAK,GAAG,EAiBKk6Y,CAAoB5xX,GACpC,OAAI2xX,IAAY3xX,IACdvf,EAAK6G,KAAOqqY,GACL,EAGT,EAEIE,GAAqB,CAACthW,EAAM9vC,EAAM+wY,EAAU33Y,KAChD,MAAMmmB,EAAOvf,EAAK6G,KACZwqY,EAAU5uB,GAAcziX,EAAMuf,EAAKlb,OAAS,GAClD,OAAK0sY,IAAYH,GAASrxX,EAAMA,EAAKlb,OAAS,IAAOssY,GAAc7gW,EAAMuhW,EAASj4Y,MAGvE23Y,GAAYF,GAAetxX,EAAMA,EAAKlb,OAAS,IAAMksY,GAAmBzgW,EAAMuhW,EAASj4Y,MAChG4G,EAAK6G,KAAO0Y,EAAKhnB,MAAM,GAAI,GAAKkiW,IACzB,IAJPz6V,EAAK6G,KAAO0Y,EAAKhnB,MAAM,GAAI,GAAK,KACzB,EAMT,EAEI+4Y,GAAmB,CAACxhW,EAAMuS,EAAKjpD,KACnC,MAAMyqD,EAAYxB,EAAIwB,YACtB,IAAKo4S,GAASp4S,GACZ,OAAO6gE,EAASE,OAElB,GAvDcviE,KACd,MAAMwB,EAAYxB,EAAIwB,YACtB,OAAOo4S,GAASp4S,IAAc0nE,GAAW1nE,EAAUh9C,KAAM4zV,GAAK,EAqD1D82C,CAAQlvV,GAAM,CAChB,MAAMokD,EAAaqqS,GAAqBhhW,EAAM+T,GAAW,EAAOzqD,IAAW63Y,GAAgCptV,IAAcutV,GAAmBthW,EAAM+T,GAAW,EAAOzqD,GACpK,OAAO+2H,GAAO1pB,EAAYpkD,EAC5B,CAAO,GAAIsuV,GAAc7gW,EAAMuS,EAAKjpD,GAAS,CAC3C,MAAMqtG,EAAaqqS,GAAqBhhW,EAAM+T,GAAW,EAAMzqD,IAAWg4Y,GAAmBthW,EAAM+T,GAAW,EAAMzqD,GACpH,OAAO+2H,GAAO1pB,EAAYpkD,EAC5B,CACE,OAAOqiE,EAASE,MAClB,EAWI4sR,GAAc,CAACxxY,EAAM8yC,EAAQhI,EAAO1xC,KACxC,GAAc,IAAV0xC,EACF,OAEF,MAAM+mF,EAAM9H,GAAaS,QAAQxqH,GAC3B8vC,EAAO+pT,GAAWhoO,GAAK9sE,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,MAAMwgE,MAAMsM,GAC7D43Q,EAAazpY,EAAK6G,KAAKtO,MAAMu6C,EAAQA,EAAShI,GAC9CmwT,EAAiBnoT,EAAShI,GAAS9qC,EAAK6G,KAAKxC,QAAUksY,GAAmBzgW,EAAM2yU,GAAcziX,EAAMA,EAAK6G,KAAKxC,QAASjL,GACvH4hW,EAA8B,IAAXloT,GAAgBs9V,GAAkBtgW,EAAM2yU,GAAcziX,EAAM,GAAI5G,GACzF4G,EAAKyxY,YAAY3+V,EAAQhI,EAAOgwT,GAAY2uC,EAAY,EAAGzuC,EAAkBC,GAAgB,EAEzFy2C,GAA2B,CAAC1xY,EAAM8yC,EAAQ15C,KAC9C,MAAMkB,EAAU0F,EAAK6G,KAAKtO,MAAMu6C,GAC1B6+V,EAAkBr3Y,EAAQ+J,OAAS8yV,GAAM78V,GAAS+J,OACxDmtY,GAAYxxY,EAAM8yC,EAAQ6+V,EAAiBv4Y,EAAO,EAE9Cw4Y,GAA4B,CAAC5xY,EAAM8yC,EAAQ15C,KAC/C,MAAMkB,EAAU0F,EAAK6G,KAAKtO,MAAM,EAAGu6C,GAC7B6+V,EAAkBr3Y,EAAQ+J,OAAS+yV,GAAM98V,GAAS+J,OACxDmtY,GAAYxxY,EAAM8yC,EAAS6+V,EAAiBA,EAAiBv4Y,EAAO,EAEhEy4Y,GAAiB,CAACC,EAAUl6I,EAAUx+P,EAAQ24Y,EAAqBC,GAAc,KACrF,MAAMC,EAAmB76C,GAAM06C,EAASjrY,MAAMxC,OACxC6tY,EAAUF,EAAcF,EAAWl6I,EACnCu6I,EAAaH,EAAcp6I,EAAWk6I,EAU5C,OATIE,EACFE,EAAQpd,WAAWqd,EAAWtrY,MAE9BqrY,EAAQE,WAAW,EAAGD,EAAWtrY,MAEnC+pM,GAAS7mF,GAAaS,QAAQ2nR,IAC1BJ,GACFL,GAAyBQ,EAASD,EAAkB74Y,GAE/C84Y,CAAO,EAQV1oL,GAAa,CAAC33F,EAAKxvE,IALD,EAACA,EAAKwvE,KAC5B,MAAMhuE,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACnB,OAAQ2vU,GAAcO,eAAe3gU,IAAQwB,IAAcguE,EAAInhG,YAAcoiB,EAAS2vU,GAAc7qR,OAAOi6B,GAAK/+E,QAAQ,EAEzFu/V,CAAgBhwV,EAAKwvE,GAAO4wP,GAAcpgU,EAAIwB,YAAaxB,EAAIvP,SAAW,GAAKuP,EAG1GiwV,GAAkCzgR,IACtC,OAAIuuP,GAAmBvuP,EAAI5F,iBAClBvH,EAAS/iH,MAHC3B,EAGiB6xH,EAAI5F,gBAHbgwO,GAASj8V,GAAQyiX,GAAcziX,EAAMA,EAAK6G,KAAKxC,QAAUo+W,GAAc5qR,MAAM73F,KAK/F6xH,EAAI5F,gBAAkB6nQ,GAAejiQ,EAAI5F,iBAAmBvH,EAASE,OAL3D5kH,KAMnB,EAEIuyY,GAA8B1gR,IAClC,OAAIuuP,GAAmBvuP,EAAI3F,aAClBxH,EAAS/iH,MAXI3B,EAWiB6xH,EAAI3F,YAXb+vO,GAASj8V,GAAQyiX,GAAcziX,EAAM,GAAKyiX,GAAc7qR,OAAO53F,KAapF6xH,EAAI3F,YAAc2nQ,GAAgBhiQ,EAAI3F,aAAexH,EAASE,OAbjD5kH,KActB,EAMIwyY,GAA6B,CAACp1C,EAAavrO,IAAQygR,GAAgCzgR,GAAKjM,SAAQ,IAAM2sR,GAA4B1gR,KAAMjM,SAAQ,IAJ5G,EAACw3O,EAAavrO,IAC/CnN,EAASlwH,KAAKq9H,EAAI5F,gBAAkB4F,EAAI5F,gBAAkB4F,EAAInhG,YAAYwsC,MAAKl9D,GAAQ4zX,GAAax2B,EAAaqlB,GAAc7qR,OAAO53F,MAAQ4lH,SAAQ,IAAM+tQ,GAAav2B,EAAaqlB,GAAc5qR,MAAMg6B,MAGvD4gR,CAAkCr1C,EAAavrO,KACrM6gR,GAA2B,CAACt1C,EAAavrO,IAAQ0gR,GAA4B1gR,GAAKjM,SAAQ,IAAM0sR,GAAgCzgR,KAAMjM,SAAQ,IAF3G,EAACw3O,EAAavrO,IAAQ8hQ,GAAav2B,EAAaqlB,GAAc5qR,MAAMg6B,IAAMjM,SAAQ,IAAMguQ,GAAax2B,EAAaqlB,GAAc7qR,OAAOi6B,MAEtB8gR,CAAiCv1C,EAAavrO,KAElM+gR,GAAoC,CAAC5+M,EAASopK,EAAavrO,IADvC,EAACmiE,EAASopK,EAAavrO,IAAQmiE,EAAU0+M,GAAyBt1C,EAAavrO,GAAO2gR,GAA2Bp1C,EAAavrO,GAC/EghR,CAAkB7+M,EAASopK,EAAavrO,GAAKj8H,IAAIwuH,EAAMolG,GAAY33F,IACtIihR,GAAiB,CAAC9pQ,EAAQgrD,EAAS3xI,KACvCA,EAAIyiE,MAAK,KACPkkB,EAAO0L,OAAO,IACbryF,IACD2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,UAAW1uL,EAAQ,GAC/C,EAGE1qD,GAAU,CAACN,EAAQnX,IAAQA,GAAO6qE,GAAM1zD,EAAO5vI,OAAOsxL,mBAAoBvvL,GAAK02H,IAmB/EkhR,GAAmB,CAAClhR,EAAKmhR,EAAmB55Y,EAAQ24Y,KACxD,MAAMkB,EAAcjnR,GAAY6F,GAAKh3H,OAAOi+V,IACtCo6C,EAAchnR,GAAY2F,GAAKh3H,OAAOi+V,IAE5C,OADAloJ,GAAS/+E,IA7wVIo3D,EA8wVAgqN,EA9wVI/pN,EA8wVSgqN,EA9wVLtgE,EA8wVkBogE,EA9wVdz+W,EA8wViC,CAAC2sB,EAAM9B,EAAMiD,KACrE,MAAMyvV,EAAW5wV,EAAKynE,IAAKivI,EAAWx4M,EAAKupE,IACrC71E,EAASg/V,EAASjrY,KAAKxC,OAE7B,OADAwtY,GAAeC,EAAUl6I,EAAUx+P,EAAQ24Y,GACpC1vV,EAAIwB,cAAgB+zM,EAAW6qH,GAAcqvB,EAAUh/V,GAAUuP,CAAG,EAlxV9C4mI,EAAGhkE,UAAYikE,EAAGjkE,UAAY2tN,EAAG3tN,SAAWP,EAAS/iH,KAAK4yB,EAAE00J,EAAGpjE,WAAYqjE,EAAGrjE,WAAY+sN,EAAG/sN,aAAenB,EAASE,QAmxVjJgB,SAAQ,KACLmsR,IACFkB,EAAY5uW,MAAKwtF,GAAO+/Q,GAA0B//Q,EAAIlJ,IAAKkJ,EAAIlJ,IAAItkH,OAAQjL,KAC3E85Y,EAAY7uW,MAAKwtF,GAAO6/Q,GAAyB7/Q,EAAIlJ,IAAK,EAAGvvH,MAExD45Y,KAxxVG,IAAC/pN,EAAIC,EAAI0pJ,EAAIr+S,CAyxVvB,EAGE4+W,GAAkB,CAACnqQ,EAAQgrD,EAASniE,EAAKuhR,GAAY,EAAMC,GAAqB,KACpF,MAAMC,EAAiBV,GAAkC5+M,EAAShrD,EAAO5tC,UAAWy2B,EAAIlJ,KAClFugB,EAAc2wN,GAAWhoO,EAAKzN,EAAMklB,GAASN,IAxCnCs0O,EAwCsDt0O,EAAO5tC,UAxClDy2B,GAAOA,EAAIlJ,MAAQ20P,IAA9BA,MAyChB,MAAMi2B,EAA2BR,GAAiBlhR,EAAKyhR,EAAgBtqQ,EAAO5vI,OAJxD,EAAC4vI,EAAQxxI,IAAYklM,GAAM1zD,EAAO5vI,OAAOslL,wBAAyBvjL,GAAK3D,IAIPg8Y,CAAgBxqQ,EAAQnX,IAC1GmX,EAAOrgB,IAAI4uC,QAAQvuB,EAAO5tC,YAC5B4tC,EAAOwuB,WAAW,IAClBxuB,EAAOI,UAAUquB,qBAEjBvuB,EAAYhsE,MAAK20D,GA5CE,EAACz4H,EAAQy4H,EAAKwhR,KACnC,GAAInpN,GAAU9wL,EAAQy4H,GAAM,CAC1B,MAAM8sC,EAAK50C,GAAaC,SAAS,2BAWjC,OAVIqpR,EACFl9C,EAAOjnO,GAAW2C,IAAM7xH,IACjBw5X,GAA0Bx5X,IAC7B4wM,GAAS5wM,EACX,IAGFuvB,GAAMsiG,GAERpF,GAASoF,EAAK8sC,GACPj6C,EAAS/iH,KAAK8gX,GAAc7qR,OAAO+mE,EAAGh2C,KAC/C,CACE,OAAOjE,EAASE,MAClB,EA4B0B6uR,CAAezqQ,EAAO5vI,OAAQy4H,EAAKwhR,KAAqBvuR,MAAK,KAC/EsuR,GACFN,GAAe9pQ,EAAQgrD,EAASu/M,EAClC,IACCG,IACGN,GACFN,GAAe9pQ,EAAQgrD,EAAStvE,EAAS/iH,KAAK+xY,GAChD,GAEJ,EAGIC,GAAY,4CAGZC,GAAiB,CAAC5qQ,EAAQnX,IAAQpG,GAAK1B,GAAaS,QAAQqH,GAAMi3P,GAA0B9/O,MAAao3N,GAAmBp3N,EAAO5vI,OAAQy4H,IAAQmX,EAAOrgB,IAAI4+B,WAAW11B,GACzKuL,GAAQ5lI,IACZ,IAAImQ,EACJ,MAA6D,QAAtD8rW,GAASvoL,IAAIjmI,SAASztD,EAAS,aAAa,IALhC+nB,IAAQo0X,GAAUv5Y,KAAKmlB,GAK4Bs0X,CAA4C,QAA9BlsY,EAAKnQ,EAAQo3B,mBAAgC,IAAPjnB,EAAgBA,EAAK,GAAG,EAG9ImsY,GAAiB,CAACF,EAAgBnlD,EAAUpsS,KAChD,MAAMwpE,EAFkB,EAAC+nR,EAAgBnlD,EAAUpsS,IAAQg0S,EAASod,GAASvoL,IAAIpT,WAAWz1H,EAAIwB,YAAa,IAAK4qS,GAAWmlD,GAE7GG,CAAkBH,EAAgBnlD,EAAUpsS,GAC5D,OAAOqiE,EAASlwH,KAAKq3H,EAAQA,EAAQxnH,OAAS,GAAG,EAQ7C2vY,GAAoB,CAAChgN,EAAS3xI,KAClC,MAAMwB,EAAYxB,EAAIwB,YAAa/Q,EAASuP,EAAIvP,SAChD,OAAIkhJ,EACE+pL,GAAuBl6T,GACrBo4S,GAASp4S,EAAUqoE,aACdu2P,GAAc5+T,EAAUqoE,YAAa,GAErCu2P,GAAc5qR,MAAMh0C,GAGtBq6T,GAAe77T,GAAOogU,GAAc5+T,EAAW/Q,EAAS,GAAKuP,EAGlE07T,GAAuBl6T,GACrBo4S,GAASp4S,EAAUooE,iBACdw2P,GAAc5+T,EAAUooE,gBAAiBpoE,EAAUooE,gBAAgBplH,KAAKxC,QAExEo+W,GAAc7qR,OAAO/zC,GAGvBu6T,GAAc/7T,GAAOogU,GAAc5+T,EAAW/Q,EAAS,GAAKuP,CAEvE,EAEI4xV,GAAoB7vR,EAAM4vR,IAAmB,GAC7CE,GAAqB9vR,EAAM4vR,IAAmB,GAE9CG,GAA+B,CAACnrQ,EAAQmxD,KAC5C,MAAMi6M,EAAeh4Y,GAAKA,EAAEtI,2BAC5Bk1I,EAAO8K,GAAG,oBAAqBsgQ,GAAc,GAC7CprQ,EAAOwK,SAASujC,YAAYojB,GAC5BnxD,EAAO6lC,IAAI,oBAAqBulO,EAAa,EAKzCC,GAA0BrrQ,GAAUmrQ,GAA6BnrQ,EAAQ,UACzEsrQ,GAAiCtrQ,GAAUmrQ,GAA6BnrQ,EAAQ,iBAEhFurQ,GAAwB/8Y,GAAWslX,GAActlX,IAAYulX,GAAavlX,GAC1Eg9Y,GAAmB,CAAC/lD,EAAU58N,IAC9B/zH,GAAS2wV,EAAU58N,GACdo3E,GAAUp3E,EAAK0iR,GAJL9lD,IAAY58N,GAAOjH,GAAK1sE,GAAO2zE,GAAM48N,EAAU/5T,IAInB+/W,CAAahmD,IAEnD/pO,EAASE,OAGd8vR,GAAgB,CAAC1rQ,EAAQ2rQ,GAAgB,KACzC3rQ,EAAOrgB,IAAI4uC,QAAQvuB,EAAO5tC,YAC5B4tC,EAAOwuB,WAAW,GAAI,CAAEo9O,cAAeD,GACzC,EAEIE,GAAkC,CAAC7gN,EAAS8gN,EAASjjR,IAAQm3D,GAAM6qM,GAAgBhiQ,GAAMiiQ,GAAejiQ,IAAM,CAACm/Q,EAAUK,KAC7H,MAAM0D,EAAqBf,IAAkB,EAAMhD,GAC7CgE,EAAoBhB,IAAkB,EAAO3C,GAC7C4D,EAAoBjB,IAAkB,EAAOc,GACnD,OAAI9gN,EACK2/L,GAAa9hQ,EAAKojR,GAAmB5vR,QAAOmrR,GAAWA,EAAQ7tB,QAAQqyB,IAAsBF,EAAQnyB,QAAQoyB,KAE7GnhB,GAAa/hQ,EAAKojR,GAAmB5vR,QAAOy7M,GAAWA,EAAQ6hD,QAAQoyB,IAAuBD,EAAQnyB,QAAQqyB,IACvH,IACCzvR,OAAM,GACH2vR,GAAcplW,IAh1VAt4C,MAk1VlB,OA91Vc,IAYeylM,GAAXzlM,EAi1VQs4C,IAj1VoD,aAAlB30C,GAAK3D,GAi1V/Bw0H,GAAYl8E,GAAQs5I,GAAUt5I,IACnDotB,KAAKg4U,IAAatvR,SAAQ,IAAMlB,EAAS/iH,KAAKmuC,IAAM,EAE7DqlW,GAAsB,CAACnsQ,EAAQ2kB,EAAK79G,EAAM6kW,GAAgB,KAC9D,IAAIhtY,EACJgmJ,EAAIynP,iBACJ,MAAMhtQ,EAAW8sQ,GAAYplW,GAAMy1E,MAAMz1E,GACnCulW,EAAYtrR,GAAaS,QAA0E,QAAjE7iH,EAAKqhI,EAAOrgB,IAAIwgB,UAAUf,EAASzf,IAAKqgB,EAAOrgB,IAAI2gB,gBAA6B,IAAP3hI,EAAgBA,EAAKmoC,EAAK64E,KAS3I,GARI0sR,EAAU1sR,MAAQqgB,EAAO5tC,UAC3Bs5S,GAAc1rQ,EAAQ2rQ,GACbzqN,GAAUlhD,EAAO5vI,OAAQi8Y,EAAW,CAAE58M,oBAAoB,MACnEglL,GAAkB43B,GACdV,GACF3rQ,EAAOI,UAAUquB,kBAAkB49O,EAAU1sR,IAAK,KAGjDj0F,GAAGob,EAAMulW,GAAY,CACxB,MAAMC,EAAyB1qR,GAAK1sE,GAAOm3V,GAAYvlW,GAAQ,GA1oV1DoO,GAFQ1mD,EA4oVgE69Y,GA1oVxDz/Y,IAAIs5H,IAAYt5H,KADpB0I,GAAY+3V,EAAS/3V,GAAUygB,IAAM2V,GAAGl9B,EAASunB,OACbwmG,MAAM,IA2oV3D4wO,EAAOm/C,EAAuBz/Y,OAAOq5H,GAAWp/E,KAAQ9vC,IACjD00B,GAAG10B,EAAMq1Y,IAAev3Y,GAASkC,EAAMq1Y,KAAcnrN,GAAUlhD,EAAO5vI,OAAQ4G,IACjF4wM,GAAS5wM,EACX,GAEJ,CAlpVexI,KAkpVf,EAII+9Y,GAAgBnsW,GAAS+lF,GAAY/lF,EAAO,SAC5CosW,GAAa,CAACx1Y,EAAM8rH,IAAWsqQ,GAAgBrsQ,GAAaS,QAAQxqH,GAAO8rH,GAc3E2pR,GAAwBv5Y,GAbUA,IAC/B8sL,GAAM9sL,EAAQm0I,WAAYn0I,EAAQw5Y,UAAU,CAACrlQ,EAAYqlQ,KAC9D,MAAMC,EAA+B9lR,GAAWwgB,GAAY1tG,GAAKjO,GAAGiO,EAAG+yW,KACjEE,EAA+B/lR,GAAW6lR,GAAU/yW,GAAKjO,GAAGiO,EAAG0tG,KACrE,OAAQslQ,GAAiCC,EAAyC,IAC7E15Y,EACHm0I,WAAYslQ,EAA+BjxR,EAASE,OAAS1oH,EAAQm0I,WACrEqlQ,SAAUE,EAA+BlxR,EAASE,OAAS1oH,EAAQw5Y,SACnEG,aAAa,EACbC,cAAc,GALwD55Y,CAMvE,IACAqpH,MAAMrpH,GAGF65Y,CAAgC75Y,GAmBnC85Y,GAAe,CAAC5gZ,EAAO2d,KAAQ,CACnC3d,QACA2d,QAOIkjY,GAAe1yP,GAAa,CAChC,CACE2yP,gBAAiB,CACf,MACA,SAGJ,CAAEC,UAAW,CAAC,UACd,CACEC,aAAc,CACZ,QACA,mBAGJ,CACEC,WAAY,CACV,kBACA,gBACA,iBAIAC,GAAmB,CAACzyV,EAAWioE,IAAW+3F,GAAU95F,GAAaS,QAAQ3mE,GAAY,QAASioE,GAC9FyqR,GAAoBC,IAAY9hX,GAAG8hX,EAAQphZ,MAAOohZ,EAAQzjY,KAC1D0jY,GAAsB,CAACD,EAAS1qR,IAAWsqQ,GAAgBogB,EAAQphZ,MAAO02H,GAAQ5uD,MAAKw5U,GAAoBtgB,GAAgBogB,EAAQzjY,IAAK+4G,GAAQ5uD,MAAKy5U,GAAkBxmR,GAAOz7F,GAAGgiX,EAAkBC,GAAiBD,OAYpNE,GAA+B9qR,GAAU0qR,GAAWC,GAAoBD,EAAS1qR,GAAQl2H,KAAIwzC,GAzC5E,EAACukH,EAAKvkH,EAAO2kF,KAAU,CAC5C4/B,MACAvkH,QACA2kF,UAsC0G8oR,CAAeL,EAASptW,EAAOmsW,GAAcnsW,MACnJ0tW,GAAqB,CAACN,EAASO,EAAkBppP,EAAK7hC,KAC1D,GAAI6hC,EAAI0N,YAAcm7O,EAAQlxR,OAAOixR,IACnC,OAAO7xR,EAASE,OACX,GAAImyR,EAAiBlB,YAAa,CACvC,MAAMmB,EAAqBR,EAAQt5U,KAAK05U,GAA6B9qR,IACrE,OAAOpH,EAAS/iH,KAAK,CACnBvM,MAAO4hZ,EACPjkY,IAAKikY,GAET,CAAO,CACL,MAAM3qQ,EAAYiqQ,GAAiB3oP,EAAIiN,eAAgB9uC,GACjDmrR,EAAUX,GAAiB3oP,EAAImN,aAAchvC,GAC7CorR,EAAsB7qQ,EAAUnvE,KAfP4uD,IAAUugB,GAAa+pP,GAAgB/pP,EAAWvgB,GAAQ5uD,MAAK9zB,GAASs+E,GAAO6tR,GAAcnsW,IAAQxzC,KAAIqhZ,GAAWjB,GAAa3pQ,EAAW4qQ,OAehIE,CAA2BrrR,IAAS5uD,KAAK05U,GAA6B9qR,IAC3GsrR,EAAoBH,EAAQ/5U,KAfL4uD,IAAUmrR,GAAW7gB,GAAgB6gB,EAASnrR,GAAQ5uD,MAAK9zB,GAASl1B,GAAKqhY,GAAcnsW,IAAQxzC,KAAIy2I,GAAa2pQ,GAAa3pQ,EAAW4qQ,OAe9HI,CAAyBvrR,IAAS5uD,KAAK05U,GAA6B9qR,IAC3G,OAAOpH,EAAS/iH,KAAK,CACnBvM,MAAO8hZ,EACPnkY,IAAKqkY,GAET,GAEIE,GAAe,CAACvpR,EAAOoD,IAASolO,GAAYxoO,GAAOhvG,GAAK2V,GAAG3V,EAAGoyG,KAC9DkiB,GAAmBwjQ,GAAkB7tN,GAAMsuN,GAAaT,EAAe9oR,MAAO8oR,EAAelpP,IAAIv4J,OAAQkiZ,GAAaT,EAAe9oR,MAAO8oR,EAAelpP,IAAI56I,MAAM,CAAC86E,EAAYf,IAAa+pT,EAAe9oR,MAAMx1H,MAAMs1F,EAAYf,EAAW,KACjPyqT,GAAmC,CAACC,EAAY7pP,EAAK7hC,IAAW0rR,EAAWnyR,QAAOmxR,GAlC9D,EAACA,EAAS1qR,KAAYyqR,GAAkBC,IAAYC,GAAoBD,EAAS1qR,GAAQzG,QAAOj8E,IACxH,MAAMznB,EAAOynB,EAAMu/E,IAAIhnG,KACvB,OAAuB,IAAhBA,EAAKtd,QAAyC,IAAzBsd,EAAK,GAAGosG,MAAM1pH,MAAY,IAgC2CozY,CAAkBjB,EAAS1qR,IAAWyqQ,GAAuBigB,EAAQphZ,MAAOu4J,KACzK+pP,GAAgB,CAAC/pP,EAAKopP,KAC1B,MAAM,WAAC1mQ,EAAU,SAAEqlQ,GAAYqB,EACzBY,EAAkBhqP,EAAI8yB,aAG5B,OAFApwC,EAAWhsG,MAAK+E,GAASuuW,EAAgB19O,cAAc7wH,EAAMu/E,OAC7D+sR,EAASrxW,MAAK+E,GAASuuW,EAAgBz9O,aAAa9wH,EAAMu/E,OACnDgvR,CAAe,EA+BlBC,GAAqB,CAAC9nW,EAAM69G,KAChC,MAAM7hC,EA9IkBh8E,IAAQya,GAAO71B,GAAGob,EAAMya,GA8IjCstV,CAAkB/nW,GAC3B0nW,EArEW,EAAC7pP,EAAK7hC,KACvB,MAAMugB,EAAYiqQ,GAAiB3oP,EAAIiN,eAAgB9uC,GACjDmrR,EAAUX,GAAiB3oP,EAAImN,aAAchvC,GACnD,OAAOk9D,GAAM38C,EAAW4qQ,EAASjB,GAAa,EAkE3B8B,CAAWnqP,EAAK7hC,GAC7BirR,EA7HyB,EAACppP,EAAK7hC,KACrC,MAAMukB,EAAamlQ,GAAW7nP,EAAIiN,eAAgB9uC,GAC5C4pR,EAAWF,GAAW7nP,EAAImN,aAAchvC,GACxCisR,EAAiB1nQ,EAAWprB,SAC5B+yR,EAAetC,EAASzwR,SACxB4wR,EAAc7sN,GAAM34C,EAAYqlQ,EAAUhhX,IAAI6wF,OAAM,GAE1D,OAAOkwR,GAAsB,CAC3BplQ,aACAqlQ,WACAqC,iBACAC,eACAnC,cACAC,cAPoBD,GAAekC,GAAkBC,GAQrD,EA+GuBC,CAAyBtqP,EAAK7hC,GACvD,OAAIyrR,GAAiCC,EAAY7pP,EAAK7hC,GAC7C0rR,EAAW5hZ,KAAI4gZ,GAAWP,GAAaC,gBAAgBvoP,EAAK6oP,EAAQphZ,SAClE2hZ,EAAiBjB,aAhBL,EAACU,EAASO,EAAkBppP,EAAK7hC,IAAWgrR,GAAmBN,EAASO,EAAkBppP,EAAK7hC,GAAQ5uD,MAAK,EAAE9nE,QAAO2d,UAC5I,MAAMmlY,EAA0B9iZ,EAAM8nE,KAAKm2E,IAAkB9tB,MAAM,IAC7D4yR,EAAwBplY,EAAImqD,KAAKm2E,IAAkB9tB,MAAM,IAC/D,GAAI2yR,EAAwB7zY,OAAS,GAAK8zY,EAAsB9zY,OAAS,EAAG,CAC1E,MAAMszY,EAAkBD,GAAc/pP,EAAKopP,GAC3C,OAAOryR,EAAS/iH,KAAKs0Y,GAAaI,WAAW6B,EAAyBC,EAAuBR,GAC/F,CACE,OAAOjzR,EAASE,MAClB,IASSwzR,CAAiBZ,EAAYT,EAAkBppP,EAAK7hC,GApCrC,EAAC0qR,EAASO,EAAkBppP,EAAK7hC,IAAWgrR,GAAmBN,EAASO,EAAkBppP,EAAK7hC,GAAQ5uD,MAAK,EAAE9nE,QAAO2d,SAAS3d,EAAMqwH,GAAG1yG,KAAMmqD,MAAK25U,IAC1K,MAAM,YAAChB,GAAekB,EAChB3xQ,EAAgBiO,GAAiBwjQ,GAAgBtxR,MAAM,IAC7D,GAAIswR,GAAegB,EAAe9oR,MAAM1pH,SAAW+gI,EAAc/gI,OAC/D,OAAOqgH,EAAS/iH,KAAKs0Y,GAAaE,UAAUU,EAAeztW,QACtD,GAAIg8F,EAAc/gI,OAAS,EAAG,CACnC,GAAIwxY,EACF,OAAOnxR,EAAS/iH,KAAKs0Y,GAAaG,aAAahxQ,EAAe1gB,EAASE,SAClE,CACL,MAAM+yR,EAAkBD,GAAc/pP,EAAKopP,GAC3C,OAAOryR,EAAS/iH,KAAKs0Y,GAAaG,aAAahxQ,EAAe1gB,EAAS/iH,KAAK,IACvEo1Y,EACHppP,IAAKgqP,KAET,CACF,CACE,OAAOjzR,EAASE,MAClB,IAqBSyzR,CAAkBb,EAAYT,EAAkBppP,EAAK7hC,EAC9D,EAGIwsR,GAAavqR,GAASooO,EAAOpoO,GAAOoD,IACxC+nO,GAAS/nO,EAAM,mBACfssP,GAAkBtsP,EAAK,IAanBonR,GAA0B,CAACvvQ,EAAQ7X,EAAMw8B,EAAK6qP,KAClD,MAAMC,EAAiB9qP,EAAI8yB,aACvB+3N,GACFC,EAAezqP,SAASL,EAAIiN,eAAgBjN,EAAIkN,aAChD49O,EAAet+O,YAAYhpC,EAAKxI,IAAIygE,aAEpCqvN,EAAez+O,eAAe7oC,EAAKxI,IAAIiE,YACvC6rR,EAAexqP,OAAON,EAAImN,aAAcnN,EAAIoN,YAE9C29O,GAAmB1vQ,EAAQyvQ,EAAgBtnR,GAAM,GAAO9sF,MAAKvnC,GAAUA,KAAS,EAE5E67Y,GAAkC3vQ,IACtC,MAAM5D,EAAgB8wP,GAAmBltP,GACnC4vQ,EAAe7uR,GAAaS,QAAQwe,EAAOI,UAAUyuC,WACvD4kL,GAAcm8C,EAAajwR,MAAQuhE,GAAUlhD,EAAO5vI,OAAQw/Y,GAC9D5vQ,EAAOI,UAAUquB,kBAAkBmhP,EAAajwR,IAAK,GAErDqgB,EAAOI,UAAU8pB,UAAS,GAExB9tB,EAAc/gI,OAAS,GAAKghH,EAAO+f,GAAejU,GAAQz8F,GAAGy8F,EAAMynR,MACrE3/C,GAAM2/C,EAAc,oBAAqB,IAC3C,EAEIC,GAAwB,CAAC7vQ,EAAQjb,EAAO+qR,IAAmBp0R,EAAS/iH,MAAK,KAC7E,MAAMo3Y,EAAY/vQ,EAAOI,UAAUwjC,SAC7BosO,EAAeF,EAAe57U,MAAK,EAAEywF,MAAKoqP,qBAC9C,MAAMkB,EArCc,EAACjwQ,EAAQnlF,IAAc6gE,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUtlF,EAAWmlF,EAAOrgB,IAAI2gB,UAAU1zI,IAAIm0H,GAAaS,SAqC1G0uR,CAAgBlwQ,EAAQ+uQ,EAAiBpqP,EAAImN,aAAenN,EAAIiN,gBACrFjN,EAAIynP,iBArCiB,EAACpsQ,EAAQmwQ,EAAcC,KAC9CA,EAAW/0W,MAAKuwJ,IACVukN,EACFvoM,GAAShc,IAET6oL,GAAkB7oL,GAClB5rD,EAAOI,UAAUquB,kBAAkBm9B,EAAMjsE,IAAK,GAChD,GACA,EA8BA0wR,CAAiBrwQ,EAAQ+uQ,EAAgBkB,EAAap+Y,OAAOupH,EAAM8lE,GAAWlhD,EAAO5vI,UACrF,MAAMkgZ,EAAevB,EAAiBhqR,EAAM,GAAKA,EAAMA,EAAM1pH,OAAS,GAEtE,OADAk0Y,GAAwBvvQ,EAAQswQ,EAAcP,EAAWhB,GACpD7tN,GAAUlhD,EAAO5vI,OAAQkgZ,GAGrB50R,EAASE,OAFTF,EAAS/iH,KAAKo2Y,EAAiBhqR,EAAMx1H,MAAM,GAAKw1H,EAAMx1H,MAAM,GAAI,GAGzE,IACCgtH,MAAMwI,GACTuqR,GAAWU,GACXL,GAAgC3vQ,EAAO,IAEnCuwQ,GAAuB,CAACvwQ,EAAQwwQ,EAAiBC,EAAeC,IAAeh1R,EAAS/iH,MAAK,KACjG,MAAMgsJ,EAAM3kB,EAAOI,UAAUwjC,SACvBvgC,EAAYmtQ,EAAgB,GAC5BvC,EAAUwC,EAAcA,EAAcp1Y,OAAS,GACrDk0Y,GAAwBvvQ,EAAQqD,EAAWshB,GAAK,GAChD4qP,GAAwBvvQ,EAAQiuQ,EAAStpP,GAAK,GAC9C,MAAMgsP,EAAyBzvN,GAAUlhD,EAAO5vI,OAAQizI,GAAamtQ,EAAkBA,EAAgBjhZ,MAAM,GACvGqhZ,EAAuB1vN,GAAUlhD,EAAO5vI,OAAQ69Y,GAAWwC,EAAgBA,EAAclhZ,MAAM,GAAI,GACzG+/Y,GAAWqB,EAAuB9jZ,OAAO+jZ,IACzCF,EAAWtE,iBACXuD,GAAgC3vQ,EAAO,IAEnC0vQ,GAAqB,CAAC1vQ,EAAQ2kB,EAAKx8B,EAAMwjR,GAAgB,IAASjwR,EAAS/iH,MAAK,KACpFwzY,GAAoBnsQ,EAAQ2kB,EAAKx8B,EAAMwjR,EAAc,IAEjDkF,GAAqB,CAAC7wQ,EAAQ5/F,IAAUs7E,EAAS/iH,MAAK,IAAMwxY,GAAgBnqQ,GAAQ,EAAO5/F,KAG3F0wW,GAAmB,CAAC9wQ,EAAQw2K,EAAS7xJ,EAAKi0O,IAAamY,GAAiBv6F,EAASoiF,GAAU98Q,MAAK,IAF9E,EAACkkB,EAAQw2K,EAAS7xJ,IAAQiqP,GAAmBp4F,EAAS7xJ,GAAKzwF,MAAKpgE,GAAUA,EAAOgoH,KAAKV,EAAMs0R,GAAoB1vQ,GAAS5kB,EAAMy1R,GAAoB7wQ,GAAS5kB,EAAMy0R,GAAuB7vQ,GAAS5kB,EAAMm1R,GAAsBvwQ,MAE1IgxQ,CAAgBhxQ,EAAQw2K,EAAS7xJ,KAAMuK,GADxH,EAAClvB,EAAQkvB,IAAY+hP,GAAajxQ,EAAQkvB,GACyFgiP,CAAmBlxQ,EAAQkvB,KAMnLiiP,GAAgB,CAAC36F,EAAS3tL,IAAQwtE,GAAOovM,GAAe58Q,EAAK2tL,GAAUy9D,IACvE88B,GAAmB,CAACv6F,EAAS3tL,IAAQwtE,GAAOovM,GAAe58Q,EAAK2tL,GAAUp2L,GAAM,YAEhF6wR,GAAe,CAACjxQ,EAAQnX,IAAQnN,EAAS/iH,MAAK,KAClD87W,GAAkB5rP,GAClBmX,EAAOI,UAAUquB,kBAAkB5lC,EAAIlJ,IAAK,EAAE,IAK1CyxR,GAA2B,CAACpxQ,EAAQw2K,EAASxrH,EAASqmN,EAAa7lZ,IAAS6tK,GAAS2xB,EAAShrD,EAAO5tC,UAAW5mG,GAAMswH,MAAK,IAAMJ,EAAS/iH,KAAK8hC,KAAOvC,GAH9H,EAACm5W,EAAarmN,EAASx/L,EAAM0sC,IAAO2yV,GAAgBwmB,EAAY1xR,KAAKzrD,MAAK6O,GAAS+nT,GAAeumB,EAAY1xR,KAAK/yH,KAAI8zC,GAAQsqJ,EAAUx/L,EAAKmuX,QAAQ52S,IAAU7qC,EAAGyhV,QAAQj5U,GAAQl1C,EAAKmuX,QAAQj5U,IAASxI,EAAGyhV,QAAQ52S,OAASw5C,OAAM,GAG/F+0R,CAAsBD,EAAarmN,EAASx/L,EAAM0sC,GAF1L,EAAC8nG,EAAQnX,IAAQooR,GAAajxQ,EAAQnX,GAE0J0oR,CAAkBvxQ,EAAQqxQ,GADvN,EAAC76F,EAAS66F,EAAan5W,IAAO64W,GAAiBv6F,EAASz1L,GAAaS,QAAQtpF,EAAG22I,YAAY/yD,MAAK,IAAMJ,EAAS/iH,KAAK8hC,KAAO+2W,GAAarqR,IAAQz7F,GAAG8lX,EAAWH,GAAc52W,KACyDg3W,CAAqBj7F,EAAS66F,EAAan5W,KACxSw5W,GAAmB,CAAC1xQ,EAAQgrD,EAASwrH,EAASoiF,KAClD,MAAMptY,EAAOiuX,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC3D,OAAOutO,GAAc36F,EAASoiF,GAAU1kU,MAAKy9U,GAAYzwN,GAAUlhD,EAAO5vI,OAAQuhZ,EAAU,CAAEliN,oBAAoB,IAAWwhN,GAAajxQ,EAAQ2xQ,GAXzH,EAAC3xQ,EAAQw2K,EAASxrH,EAAS2mN,EAAUnmZ,IAAS6tK,GAAS2xB,EAAShrD,EAAO5tC,UAAW5mG,GAAM0oE,MAAKh8B,GAAMi5W,GAAc36F,EAASz1L,GAAaS,QAAQtpF,EAAG22I,YAAY36G,MAAKq0K,GAAU78M,GAAG68M,EAAQopK,GAAYj2R,EAASE,OAASF,EAAS/iH,KAAK8hC,OAW/Fm3W,CAAmB5xQ,EAAQw2K,EAASxrH,EAAS2mN,EAAUnmZ,IAAM,EAMvNqmZ,GAAc,CAAC7mN,EAAS3xI,IAAQ2xI,EAAUo6M,GAAc/rV,GAAOgsV,GAAahsV,GAK5Ey4V,GAAgB,CAAC9xQ,EAAQgrD,EAAS4tM,KACtC,MAAMpiF,EAAUz1L,GAAaS,QAAQwe,EAAO5tC,WAC5C,OAAO2+S,GAAiBv6F,EAASoiF,GAAU98Q,MAAK,IAAM41R,GAAiB1xQ,EAAQgrD,EAASwrH,EAASoiF,GAAUh8Q,SAAQ,IAAMuK,GAN9F,EAAC6Y,EAAQgrD,KACpC,MAAM8gN,EAAUryB,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC9D,OAAOiuO,GAAY7mN,EAAS8gN,IAAYxhB,GAAat/L,EAAShrD,EAAO5tC,UAAW05S,GAASzvR,QAAOhjE,GAAOw4V,GAAY7mN,EAAS3xI,IAAK,EAID04V,CAAqB/xQ,EAAQgrD,GAAUvwJ,OAAQ42W,GAXtJ,EAACrxQ,EAAQgrD,EAASwrH,EAAS66F,KACpD,MAAM7lZ,EAAOiuX,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC3D,OAAOsd,GAAUlhD,EAAO5vI,OAAQihZ,GAAeJ,GAAajxQ,EAAQqxQ,GAAeD,GAAyBpxQ,EAAQw2K,EAASxrH,EAASqmN,EAAa7lZ,EAAK,EASsCwmZ,CAAmBhyQ,EAAQgrD,EAASwrH,EAAS66F,IAAa,EAEpPY,GAAoB,CAACjyQ,EAAQgrD,KACjC,MAAM4tM,EAAW73Q,GAAaS,QAAQwe,EAAOI,UAAUC,UAAS,IAC1Dtb,EAAQmoQ,GAAmBltP,GACjC,OAAOA,EAAOI,UAAU+8C,eAAkC,IAAjBp4D,EAAM1pH,OAAey2Y,GAAc9xQ,EAAQgrD,EAAS4tM,GApCzE,EAAC54P,EAAQ44P,EAAUx8P,KACvC,MAAMqpN,EAAW1kO,GAAaS,QAAQwe,EAAO5tC,WACvCuyD,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAgC,IAAzBxnC,EAAc/gI,OAAew0Y,GAAsB7vQ,EAAQ5D,EAAe1gB,EAASE,QAAUk1R,GAAiB9wQ,EAAQylN,EAAU9gM,EAAKi0O,EAAS,EAiC5CsZ,CAAclyQ,EAAQ44P,EAAU7zQ,EAAM,EAG3IotR,GAA2B,CAACrrW,EAAM9vC,KACtC,IAAIq4S,EAAWr4S,EACf,KAAOq4S,GAAYA,IAAavoQ,GAAM,CACpC,GAAIysT,GAAwBlkD,IAAamkD,GAAyBnkD,GAChE,OAAOA,EAETA,EAAWA,EAAS3nR,UACtB,CACA,OAAO,IAAI,EAGP0qX,GAA6B,CACjC,cACA,YACA,cACA,gBACA,KAEIC,GAAS93R,GAAMl/E,KACfi3W,GAAetyQ,IACnB,MAAMrgB,EAAMqgB,EAAOrgB,IACb4yR,EAAqB,IAAItoZ,IAAI+1I,EAAOiL,WAAWm3P,gBA6C/CoQ,EAAsBh8Y,GAAiB6lH,EAAO+1R,IAA4BjkZ,GAAS46C,GAAWvyC,EAAerI,MAAWokZ,EAAmBt8Y,IAAIO,GACrJ,MAAO,CACLinD,QA9Cc,CAACyqU,EAAOC,KACtB,GAAID,EAAMtoQ,WAAauoQ,EAAMvoQ,UAAYsoQ,EAAM5wX,WAAa6wX,EAAM7wX,SAChE,OAAO,EAET,MAAM0zW,EAAah0W,IACjB,MAAMy7Y,EAAU,CAAC,EAOjB,OANAJ,GAAO1yR,EAAIqrP,WAAWh0W,IAAO6pH,IAC3B,MAAM1uH,EAAO0uH,EAAKjB,SAASnwH,cACd,UAAT0C,GAAqBqgZ,EAAoBrgZ,KAC3CsgZ,EAAQtgZ,GAAQwtH,EAAI6iB,UAAUxrI,EAAM7E,GACtC,IAEKsgZ,CAAO,EAEVC,EAAiB,CAAC7iY,EAAMC,KAC5B,IAAK,MAAM3d,KAAQ0d,EACjB,GAAI6jL,GAAM7jL,EAAM1d,GAAO,CACrB,MAAMhE,EAAQ2hB,EAAK3d,GACnB,GAAI4oH,EAAY5sH,GACd,OAAO,EAET,GAAI0hB,EAAK1d,KAAUhE,EACjB,OAAO,SAEF2hB,EAAK3d,EACd,CAEF,IAAK,MAAMA,KAAQ2d,EACjB,GAAI4jL,GAAM5jL,EAAM3d,GACd,OAAO,EAGX,OAAO,CAAI,EAEb,GAAIugW,GAAYw1B,IAAUx1B,GAAYy1B,GAAQ,CAC5C,IAAKuqB,EAAe1nC,EAAWkd,GAAQld,EAAWmd,IAChD,OAAO,EAET,IAAKuqB,EAAe/yR,EAAImyL,WAAWnyL,EAAI6iB,UAAU0lP,EAAO,UAAWvoQ,EAAImyL,WAAWnyL,EAAI6iB,UAAU2lP,EAAO,WACrG,OAAO,CAEX,CACA,OAAQuE,GAAiBxE,KAAWwE,GAAiBvE,EAAM,EAK3DqqB,sBACD,EAGGG,GAAY37Y,GAAQ,CACxB,KACA,KACA,KACA,KACA,KACA,MACA/F,SAAS+F,EAAK7E,MASVygZ,GAAc,CAACC,EAAaC,EAAkB97Y,EAAMlG,KACxD,MAAMqB,EAAO6E,EAAK7E,KAClB,IAAK,IAAI2tW,EAAK,EAAGizC,EAAKF,EAAYx3Y,OAAQykW,EAAKizC,EAAIjzC,IAAM,CACvD,MAAMjuW,EAASghZ,EAAY/yC,GAC3B,GAAIjuW,EAAOM,OAASA,EAAM,CACxB,MAAMnB,EAAQF,EAAQiG,MAAM5E,GACxBnB,EACFA,EAAM+F,MAAM/I,KAAKgJ,GAEjBlG,EAAQiG,MAAM5E,GAAQ,CACpBN,SACAkF,MAAO,CAACC,GAGd,CACF,CACA,GAAIA,EAAK5E,WACP,IAAK,IAAI4gZ,EAAK,EAAGhzI,EAAK8yI,EAAiBz3Y,OAAQ23Y,EAAKhzI,EAAIgzI,IAAM,CAC5D,MAAMnhZ,EAASihZ,EAAiBE,GAC1B9kJ,EAAWr8P,EAAOM,KACxB,GAAI+7P,KAAYl3P,EAAK5E,WAAWxF,IAAK,CACnC,MAAMoE,EAAQF,EAAQsB,WAAW87P,GAC7Bl9P,EACFA,EAAM+F,MAAM/I,KAAKgJ,GAEjBlG,EAAQsB,WAAW87P,GAAY,CAC7Br8P,SACAkF,MAAO,CAACC,GAGd,CACF,CACF,EAcIi8Y,GAAa,CAACniZ,EAASkS,KAC3B,MAAM4kG,EAAM,CAACsrS,EAAaC,KACxBzlD,GAAOwlD,GAAaliZ,IAClB,MAAM+F,EAAQvL,GAAKwF,EAAM+F,OACzBo2V,EAAOn8V,EAAMa,OAAOwjB,WAAWvf,IAC7B,IAAK,IAAIgb,EAAI/Z,EAAMsE,OAAS,EAAGyV,GAAK,EAAGA,IAAK,CAC1C,MAAM9Z,EAAOD,EAAM+Z,IACEqiY,OAAuDvjZ,IAAjCoH,EAAK6pH,KAAK7vH,EAAMa,OAAOM,MAAsB6E,EAAK7E,OAASnB,EAAMa,OAAOM,QAC9F8oH,EAAWjkH,EAAKk+C,SACnCn+C,EAAMqrB,OAAOtR,EAAG,EAEpB,CACI/Z,EAAMsE,OAAS,GACjBvF,EAASiB,EAAO/F,EAAMa,OAAOM,KAAM6Q,EACrC,GACA,GACF,EAEJ4kG,EAAI92G,EAAQiG,OAAO,GACnB6wG,EAAI92G,EAAQsB,YAAY,EAAK,EAEzB2rH,GAAW,CAAC80R,EAAaC,EAAkB97Y,EAAMgM,EAAO,CAAC,KAC7D,MAAMlS,EAlCkB,EAAC+hZ,EAAaC,EAAkB97Y,KACxD,MAAMlG,EAAU,CACdiG,MAAO,CAAC,EACR3E,WAAY,CAAC,GAOf,OALI4E,EAAK4sH,YA7CM,EAAC98E,EAAMl0B,KACtB,IAAI5b,EAAO8vC,EACX,KAAO9vC,EAAOA,EAAK04V,QACjB98U,EAAG5b,EACL,EA0CE+7J,CAAS/7J,GAAMo8Y,IACbR,GAAYC,EAAaC,EAAkBM,EAAWtiZ,EAAQ,IAG3DA,CAAO,EAwBEuiZ,CAAkBR,EAAaC,EAAkB97Y,GACjEi8Y,GAAWniZ,EAASkS,EAAK,EAGrBswY,GAAgB,CAACttO,EAAUhjK,EAAMs9H,EAAStpI,KAE9C,IADoBgvK,EAASutO,mBAAqBvwY,EAAKsiI,SACpChF,EAAQtpI,GAAO,CAChC,MAAMw8Y,EAAU,IAAInT,GAAQ,KAAM,GAC9Br9X,EAAKsiI,QACPkuQ,EAAQ3yR,KAAK,iBAAkB,KAEjC7pH,EAAKuvB,QAAQw9F,OAAOyvR,EACtB,MACEx8Y,EAAKuvB,QAAQw9F,OAAO,IAAIs8Q,GAAQ,QAAS,IAAIlyY,MAAQsjW,EACvD,EAMIgiD,GAAe,CAACz8Y,EAAM7E,KAC1B,MAAMyxH,EAAsB,OAAT5sH,QAA0B,IAATA,OAAkB,EAASA,EAAK4sH,WACpE,OAAO5I,EAAc4I,IAAeA,IAAe5sH,EAAKopL,WAAax8D,EAAWzxH,OAASA,CAAI,EAMzFo8J,GAAU,CAACn+J,EAAQsjZ,EAAkBr/C,EAAoBr9V,IAASA,EAAKu3J,QAAQmlP,EAAkBr/C,GAAoBr9V,GAJ1G,EAAC5G,EAAQ4G,KACxB,MAAMy8J,EAAOrjK,EAAOkzW,eAAetsW,EAAK7E,MACxC,OAAwE,KAAvD,OAATshK,QAA0B,IAATA,OAAkB,EAASA,EAAKkqM,UAAmB,EAEqDg2C,CAASvjZ,EAAQ4G,KAE9I48Y,GAAyB7+Y,IAC7B,IAAI8+Y,EACJ,IAAK,IAAI78Y,EAAOjC,EAAOiC,EAAMA,EAAOA,EAAKk+C,OAAQ,CAC/C,MAAM8sF,EAAkBhrI,EAAK6pH,KAAK,mBAClC,GAAwB,UAApBmhB,EACF,MAC6B,SAApBA,IACT6xQ,EAAe78Y,EAEnB,CACA,OAAO0kH,EAASlwH,KAAKqoZ,EAAa,EAG9BC,GAA4B,CAAC98Y,EAAM5G,EAAQ2jZ,EAAqB/8Y,EAAKk+C,UACzE,GAAI9kD,EAAO0zW,qBAAqB9sW,EAAK7E,MACnC6E,EAAKuvB,QAAQm7B,aACR,CACL,MAAMyiE,EAAWntH,EAAKmtH,WACtB,IAAK,MAAMivR,KAAajvR,EAClB4vR,IAAuB3jZ,EAAOm0L,aAAawvN,EAAmB5hZ,KAAMihZ,EAAUjhZ,OAChF2hZ,GAA0BV,EAAWhjZ,EAAQ2jZ,GAGjD/8Y,EAAKktH,QACP,GAEI8vR,GAAoB,CAACj9Y,EAAO3G,EAAQq1V,EAAUwuD,EAAWx5W,KAC7D,MAAMy5W,EAAoB9jZ,EAAO0wL,uBAC3B4yN,EAAmBtjZ,EAAO29L,sBAC1BsmK,EAAqBjkW,EAAOkkW,wBAC5B6/C,EAAwB55R,GAAMs2L,QAAQ,4CACtCn6K,EAAQ,IAAIzsI,IACZmqZ,EAAsBp9Y,GAAQA,IAASyuV,IAAa0uD,EAAsBn9Y,EAAK7E,MACrF,IAAK,IAAI2tW,EAAK,EAAGA,EAAK/oW,EAAMsE,OAAQykW,IAAM,CACxC,MAAM9oW,EAAOD,EAAM+oW,GACnB,IAAI5qT,EACAm/V,EACAhlG,EACJ,IAAKr4S,EAAKk+C,QAAUwhF,EAAMzgI,IAAIe,GAC5B,SAEF,GAAIk9Y,EAAkBl9Y,EAAK7E,OAA8B,OAArB6E,EAAKk+C,OAAO/iD,KAAe,CAC7D,IAAIihK,EAAUp8J,EAAKo/C,KACnB,KAAOg9G,GACD8gP,EAAkB9gP,EAAQjhK,OAC5BihK,EAAQjhK,KAAO,KACfukI,EAAMlsI,IAAI4oK,GACVp8J,EAAKk+C,OAAOowF,OAAO8tB,EAASp8J,EAAKk+C,QAInCk+G,EAAUA,EAAQh9G,KAEpBp/C,EAAKktH,SACL,QACF,CACA,MAAMrB,EAAU,CAAC7rH,GACjB,IAAKk+C,EAASl+C,EAAKk+C,OAAQA,IAAW9kD,EAAOm0L,aAAarvI,EAAO/iD,KAAM6E,EAAK7E,OAASiiZ,EAAoBl/V,GAASA,EAASA,EAAOA,OAChI2tE,EAAQ70H,KAAKknD,GAEf,GAAIA,GAAU2tE,EAAQxnH,OAAS,EAC7B,GAAKogR,GAAUrrR,EAAQ4G,EAAMk+C,GA+B3B4+V,GAA0B98Y,EAAM5G,OA/BI,CACpCyyH,EAAQpjH,UACR40Y,EAAYxxR,EAAQ,GAAGvqF,QACvB27W,EAASI,GACT,IAAIlnJ,EAAcknJ,EAClB,IAAK,IAAIvjY,EAAI,EAAGA,EAAI+xG,EAAQxnH,OAAS,EAAGyV,IAAK,CACvC1gB,EAAOm0L,aAAa4oE,EAAYh7P,KAAM0wH,EAAQ/xG,GAAG3e,OAAS2e,EAAI,GAChEu+R,EAAWxsL,EAAQ/xG,GAAGwnB,QACtB27W,EAAS5kG,GACTliD,EAAYppI,OAAOsrL,IAEnBA,EAAWliD,EAEb,IAAK,IAAIimJ,EAAYvwR,EAAQ/xG,GAAG8yG,WAAYwvR,GAAaA,IAAcvwR,EAAQ/xG,EAAI,IAAK,CACtF,MAAM89O,EAAWwkJ,EAAUh9V,KAC3Bi5P,EAAStrL,OAAOqvR,GAChBA,EAAYxkJ,CACd,CACAzB,EAAckiD,CAChB,CACK9gJ,GAAQn+J,EAAQsjZ,EAAkBr/C,EAAoBggD,GAIzDn/V,EAAOowF,OAAOtuI,EAAM6rH,EAAQ,IAAI,IAHhC3tE,EAAOowF,OAAO+uQ,EAAWxxR,EAAQ,IAAI,GACrC3tE,EAAOowF,OAAOtuI,EAAMq9Y,IAItBn/V,EAAS2tE,EAAQ,IACb0rC,GAAQn+J,EAAQsjZ,EAAkBr/C,EAAoBn/S,IAAWu+V,GAAav+V,EAAQ,QACxFA,EAAO3uB,QAAQm7B,QAEnB,MAGK,GAAI1qD,EAAKk+C,OAAQ,CACtB,GAAkB,OAAdl+C,EAAK7E,KAAe,CACtB,IAAIihK,EAAUp8J,EAAKkhD,KACnB,GAAIk7G,IAA6B,OAAjBA,EAAQjhK,MAAkC,OAAjBihK,EAAQjhK,MAAgB,CAC/DihK,EAAQrvC,OAAO/sH,GACf,QACF,CAEA,GADAo8J,EAAUp8J,EAAKo/C,KACXg9G,IAA6B,OAAjBA,EAAQjhK,MAAkC,OAAjBihK,EAAQjhK,OAAkBihK,EAAQxvC,WAAY,CACrFwvC,EAAQ9tB,OAAOtuI,EAAMo8J,EAAQxvC,YAAY,GACzC,QACF,CACA,MAAMC,EAAU,IAAIw8Q,GAAQ,KAAM,GAClC4T,EAASpwR,GACT7sH,EAAK4kE,KAAKioD,GACV,QACF,CACA,GAAIzzH,EAAOm0L,aAAavtL,EAAKk+C,OAAO/iD,KAAM,QAAU/B,EAAOm0L,aAAa,MAAOvtL,EAAK7E,MAAO,CACzF,MAAM0xH,EAAU,IAAIw8Q,GAAQ,MAAO,GACnC4T,EAASpwR,GACT7sH,EAAK4kE,KAAKioD,EACZ,MACEiwR,GAA0B98Y,EAAM5G,EAEpC,CACF,GAYIqrR,GAAY,CAACrrR,EAAQ4G,EAAMk+C,EAASl+C,EAAKk+C,WACxCA,OAGD9kD,EAAO+zH,SAASntH,EAAK7E,OAAU/B,EAAOm0L,aAAarvI,EAAO/iD,KAAM6E,EAAK7E,WAGvD,MAAd6E,EAAK7E,OAjBQ,EAAC6E,EAAM0yH,KACxB,IAAI2lL,EAAWr4S,EACf,KAAOq4S,GAAU,CACf,GAAIA,EAASl9S,OAASu3H,EACpB,OAAO,EAET2lL,EAAWA,EAASn6P,MACtB,CACA,OAAO,CAAK,EASao/V,CAAWp/V,EAAQ,UApP5Bl+C,IAAsB,YAAdA,EAAK7E,KAuPzBoiZ,CAAUr/V,KAAWy9V,GAAU37Y,QACZ,OAAXk+C,QAA8B,IAAXA,OAAoB,EAASA,EAAO0uE,cAAgB5sH,IAAoB,OAAXk+C,QAA8B,IAAXA,OAAoB,EAASA,EAAOkrI,aAAeppL,KAW9Jw9Y,GAA+B7vP,IACnC,MAAM+kO,EAAWjQ,GAAcG,eAAej1N,GACxCsnO,EAASxS,GAAcI,aAAal1N,GACpC8gM,EAAW9gM,EAAI0mC,wBACrB,OAAOi/L,IAAa,EAAO7kC,EAAUwmC,GAAQr/X,KAAI6nZ,IAC1C9sB,GAAc+B,EAAUuC,EAAQxmC,IAAakiC,GAAc+B,EAAU+qB,EAAWhvD,GAXrE,EAAChiN,EAAIs1O,EAAID,EAAIE,KAC/B,MAAMr0N,EAAM71J,SAAS4hK,cAGrB,OAFA/L,EAAIK,SAASvhB,EAAIs1O,GACjBp0N,EAAIM,OAAO6zN,EAAIE,GACRr0N,CAAG,EAQC+L,CAAYg5N,EAAS7uU,YAAa6uU,EAAS5/U,SAAU2qW,EAAU55V,YAAa45V,EAAU3qW,UAEtF66G,IAERpoC,MAAMooC,EAAI,EAETjnG,GAAYinG,GAAOA,EAAI0N,UAAY1N,EAAM6vP,GAA6B7vP,GAQtE+vP,GAAqB,CAACtkZ,EAAQ4G,IACZ5G,EAAOsxL,mBACR1qL,EAAK7E,OARF6E,IACjBgkH,EAAchkH,EAAK4sH,aAAe5sH,EAAK4sH,aAAe5sH,EAAKopL,UAO/Bu0N,CAAkB39Y,IALjCA,IACC,OAAdA,EAAK7E,MAAiB6E,EAAK7I,QAAUsjW,GAIkBmjD,CAAc59Y,EAAK4sH,YAM7EixR,GAAiB,CAACzkZ,EAAQuxL,KAC9B,IAAI/9D,EAAa+9D,EAAS/9D,WACtBw8D,EAAYuB,EAASvB,UAUzB,OATIx8D,GAAkC,SAApBA,EAAWzxH,OAC3ByxH,EAAaA,EAAWxtE,MAEtBgqI,GAAsC,eAAzBA,EAAUv/D,KAAK,QAC9Bu/D,EAAYA,EAAUloI,MAXK,EAAC9nD,EAAQ4G,KACtC,MAAM08Y,EAAmBtjZ,EAAO29L,sBAChC,OAAO/yE,EAAchkH,KAAUA,EAAKu3J,QAAQmlP,IAAqBgB,GAAmBtkZ,EAAQ4G,GAAM,EAW9F89Y,CAAuB1kZ,EAAQgwL,KACjCA,EAA0B,OAAdA,QAAoC,IAAdA,OAAuB,EAASA,EAAUloI,SAEzE0rE,GAAcA,IAAew8D,KAGP,OAApBx8D,EAAWzxH,MAAqC,OAApByxH,EAAWzxH,KAAa,EA4BvD4iZ,GAAmB/9Y,GAChBgkH,EAAuB,OAAThkH,QAA0B,IAATA,OAAkB,EAASA,EAAK4sH,aAAe5sH,EAAK4sH,aAAe5sH,EAAKopL,WAJ9FppL,IACTA,EAAK6G,OAAS4zV,IAAQ4B,GAAOr8V,GAGuFg+Y,CAAUh+Y,EAAK4sH,YAKtIqxR,GAAgBjxN,IACpB,OAAOA,EAAK3oL,OAAS,MAJCwtH,EAIoBm7D,EAAKA,EAAK3oL,OAAS,IAHjDuoH,YAAcmxR,GAAiBlsR,IAGwBm7D,EAAKz0L,MAAM,GAAI,GAAKy0L,EAJjEn7D,KAIqE,EAEvFqsR,GAAc,CAACv1R,EAAK3oH,KACxB,MAAMkpI,EAAcvgB,EAAIwgB,UAAUnpI,EAAM2oH,EAAI2gB,SAC5C,OAAOJ,GAAwC,OAAzBA,EAAYtgB,SAAoBsgB,EAAc,IAAI,EAqBpEi1Q,GAAa,CAACn+Y,EAAMyuV,KACxB,MAAMi5C,EAAWjlB,GAAc5qR,MAAM73F,GAE/Bo+Y,EADcprB,GAAYvkC,GACAvtS,KAAKwmV,GACrC,OAAO0W,EAAcA,EAAY17B,UAAY,IAAI,EAe7C27B,GAAiB,CAAC5mZ,EAAQu1L,EAAMyhK,KACpC,MAAMqR,EAAYroW,EAAOi5B,WAMzB,OALIovU,GACFv8O,GAAMl/E,KAAK2oJ,GAAMn7D,IACfiuO,EAAUvzO,aAAasF,EAAKp6H,EAAO,IA7BrB,EAACuI,EAAMyuV,KACzB,MAAMi5C,EAAWjlB,GAAc7qR,OAAO53F,GAEhCo+Y,EADcprB,GAAYvkC,GACArvS,KAAKsoV,GACrC,OAAO0W,EAAcA,EAAY17B,UAAY,IAAI,EA4B1C47B,CAAY7mZ,EAAQg3V,EAAS,EAMhC8vD,GAAkB,CAACtqQ,EAAYtrB,EAAKglC,EAAKg9B,KAC7C,MAAM6zN,EA/Ec,EAAC71R,EAAKsrB,EAAY02C,KACtC,MAAM1gE,EAAOgqB,EAAWC,UAAUy2C,GAElC,MAfyB6zN,KACzB,IAAI72Y,EAAI+/I,EACR,MAAM96B,EAAa4xR,EAAY5xR,WACzBw8D,EAAYo1N,EAAYp1N,UAO9B,OANIx8D,GAAsC,SAAxBA,EAAWhE,WACM,QAAhCjhH,EAAKilH,EAAWl8F,kBAA+B,IAAP/oB,GAAyBA,EAAGgpB,YAAYi8F,IAE/Ew8D,GAA8B,eAAjBA,EAAUthK,KACO,QAA/B4/H,EAAK0hC,EAAU14J,kBAA+B,IAAPg3H,GAAyBA,EAAG/2H,YAAYy4J,IAE3Eo1N,CAAW,EAKXC,CADa91R,EAAIiiE,eAAe3gE,GACD,EA4ElBy0R,CAAc/1R,EAAKsrB,EAAY02C,GAC7Cg0N,EAAWT,GAAYv1R,EAAKglC,EAAIiN,gBAChCgkP,EAASX,IA5ECpsR,EA4EuB2sR,EAAY5xR,WA1E5CypO,EAA6E,QAAnE1uV,EAAa,OAARkqH,QAAwB,IAARA,OAAiB,EAASA,EAAIzH,kBAA+B,IAAPziH,EAAgBA,EAAK,IAAIgoH,GACzF,OAAnBA,EAAM/G,aAHCiJ,MACZlqH,EA4EJ,MACM8mV,EAAW9lO,EAAIyhE,UACfy0N,EAAOx+R,IACX,MAAMqnR,EAAWjlB,GAAcG,eAAej1N,GACxCmxP,EAAc9rB,GAAYrqQ,EAAIyhE,WAC9BqgC,EALU,IAKDpqG,EAAyBy+R,EAAY59V,KAAKwmV,GAAYoX,EAAY1/V,KAAKsoV,GAChFqX,EAAwB,OAAXt0L,QAA8B,IAAXA,OAAoB,EAASA,EAAO5yC,UAC1E,OAAOknO,GAAab,GAAYv1R,EAAKo2R,KAAgBJ,CAAe,EAEtE,OAAKA,EAEME,EAXO,GAYTR,GAAeM,EAAUC,EAAQnwD,GAC/BowD,EAbgB,GARP,EAACpnZ,EAAQu1L,EAAMyhK,EAAU9lO,KAC7CA,EAAI8iE,YAAYuB,EAAKvkL,UAAWhR,GACzB0mZ,GAAWnxN,EAAK,GAAIyhK,IAoBlBuwD,CAAcL,EAAUC,EAAQnwD,EAAU9lO,GA5ChC,EAAClxH,EAAQu1L,EAAMyhK,EAAU9gM,KAC5C,MAAM92J,EAvBS,EAAC65B,EAAYi9H,KAC5B,MAAMsxP,EAAYtxP,EAAI8yB,aAChBy+N,EAAWvxP,EAAI8yB,aAGrB,OAFAw+N,EAAUjlP,eAAetpI,GACzBwuX,EAAS/kP,YAAYzpI,GACd,CACLuuX,EAAU/hO,gBACVgiO,EAAShiO,gBACV,EAeaiiO,CAAS1nZ,EAAQk2J,GACzBmyM,EAAYroW,EAAOi5B,WASzB,OARIovU,IACFA,EAAUvzO,aAAa11H,EAAM,GAAIY,GACjC8rH,GAAMl/E,KAAK2oJ,GAAM5B,IACf00K,EAAUvzO,aAAa6+D,EAAI3zL,EAAO,IAEpCqoW,EAAUvzO,aAAa11H,EAAM,GAAIY,GACjCqoW,EAAUnvU,YAAYl5B,IAEjB0mZ,GAAWnxN,EAAKA,EAAK3oL,OAAS,GAAIoqV,EAAS,EAmCzC2wD,CAAaT,EAAUC,EAAQnwD,EAAU9gM,GANzC,IAOT,EAGI0xP,GAA2B,CAAC,OAiB5BC,GAAc7iD,GAuBd8iD,GAAuB,CAAC52R,EAAKkJ,EAAKz4H,KACtCsrH,EAASlwH,KAAKm0H,EAAIwgB,UAAUtX,EAAK,UAAUj8H,IAAIm0H,GAAaS,SAASnmF,MAAK0gB,GA9vOhD,EAAC8sE,EAAKz4H,KAChCgwL,GAAUv3D,GAAKxtF,MAAK+kJ,IAClBp9D,GAAYo9D,GAAW/kJ,MAAKm7W,IACtBpmZ,EAAOkwI,QAAQnuI,GAAK02H,KAASgrP,GAAOzzL,IAAchwL,EAAOkwI,QAAQnuI,GAAKqkZ,KACxE5uM,GAASxnB,EACX,GACA,GACF,EAuvO8Eq2N,CAAoB16V,EAAI3rD,IAAQ,EA8C5GsmZ,GAAwB,CAAC12Q,EAAQ1iH,KACrC,IAAI3e,EAAI+/I,EAAI0yK,EACZ,IAAIulF,EACJ,MAAMh3R,EAAMqgB,EAAOrgB,IACbygB,EAAYJ,EAAOI,UACzB,IAAK9iH,EACH,OAEF8iH,EAAUwyC,eAAet1J,GACzB,MAAMs5X,EAAoBzE,GAAyBnyQ,EAAO5tC,UAAW90E,GACrE,GAAIs5X,GAAmE,UAA9Cj3R,EAAI4rE,mBAAmBqrN,GAG9C,OAFAj3R,EAAIj+D,OAAOpkC,QACX8iH,EAAU9sI,OAAOsjZ,GAGnB,IAAIjyP,EAAMhlC,EAAIilC,YACd,MAAM5tJ,EAAOsmB,EAAO2lG,gBACpB,GAAIgwO,GAASj8V,GAAO,CAClB2tJ,EAAIK,SAAShuJ,EAAsF,QAA/E0nJ,EAA+B,QAAzB//I,EAAK3H,EAAKwmI,iBAA8B,IAAP7+H,OAAgB,EAASA,EAAGtD,cAA2B,IAAPqjJ,EAAgBA,EAAK,GAChI,MAAMypO,EAAQ7qW,EAAO4lG,YACjB+vO,GAASk1B,KACXnxX,EAAK80X,WAAW3D,EAAMtqX,MACM,QAA3BuzT,EAAK+2D,EAAMzgW,kBAA+B,IAAP0pS,GAAyBA,EAAGzpS,YAAYwgW,GAEhF,MACExjO,EAAIqM,eAAe1zI,GACnBqnI,EAAIuM,aAAa5zI,GAEnB,MAMM4iH,EAAcvgB,EAAIwgB,UAAU7iH,EAAQqiG,EAAI2gB,SAE9C,GADA3gB,EAAIj+D,OAAOpkC,GACP4iH,GAAevgB,EAAI4uC,QAAQruB,GAAc,CAC3C,MAAM22Q,EAASP,GAAYp2Q,GAC3B35G,GAAMw6F,GAAaS,QAAQ0e,IAC3BykB,EAAIK,SAAS9kB,EAAa,GAC1BykB,EAAIM,OAAO/kB,EAAa,GACnB22Q,GA/CgB7/Y,MACdA,EAAK3D,aAAa,qBA8CTyjZ,CAAiB52Q,MAAiBy2Q,EAb3BhyP,KACvB,IAAI+5O,EAAWjlB,GAAcG,eAAej1N,GAG5C,OADA+5O,EADoB1U,GAAYhqP,EAAO5tC,WAChBh8C,KAAKsoV,GACR,OAAbA,QAAkC,IAAbA,OAAsB,EAASA,EAAShlB,SAAS,EASjBq9B,CAAiBpyP,IAI3EhlC,EAAIn1H,IAAI01I,EAAavgB,EAAIn7G,OAAO,KAAMqyY,EAAS,CAAC,EAAI,CAAE,iBAAkB,QAHxElyP,EAAMgyP,EACNh3R,EAAIj+D,OAAOw+E,GAIf,CACAE,EAAU0kB,OAAOH,EAAI,EAEjBqyP,GAAwBh3Q,IAC5B,MAAMrgB,EAAMqgB,EAAOrgB,IACbglC,EAAMjnG,GAAUsiF,EAAOI,UAAUwjC,UACvC5jC,EAAOI,UAAU0kB,OAAOH,GACxB,MAAMthB,EAAY1jB,EAAIwgB,UAAUwkB,EAAIiN,eAAgB0kP,IA3HnB,EAAC32R,EAAKglC,EAAKx8B,KAC5C,GAAInN,EAAcmN,GAEhB,OAAOA,IADSxI,EAAIwgB,UAAUwkB,EAAImN,aAAcwkP,KACrB/oB,GAAuBxsQ,GAAaS,QAAQ2G,GAAOw8B,GAE9E,OAAO,CACT,EAsHIsyP,CAA2Bt3R,EAAKglC,EAAKthB,GACvCqsQ,GAAmB1vQ,EAAQ2kB,EAAK5jC,GAAaS,QAAQ6hB,IAC5CshB,EAAIiN,iBAAmBjN,EAAImN,cAAgBnN,EAAIoN,UAAYpN,EAAIkN,cAAgB,GAAKohM,GAAStuM,EAAIiN,eAAexwC,WAAWujC,EAAIkN,cACxIlN,EAAIynP,iBAEJpsQ,EAAOwK,SAASujC,YAAY,UAAU,EACxC,EAcImpO,GAAoB,CAACl3Q,EAAQ7xI,EAAO+E,KACxC,IAAIyL,EAAI+/I,EACR,MAAMte,EAAYJ,EAAOI,UACnBzgB,EAAMqgB,EAAOrgB,IACbpjB,EAASyjC,EAAOzjC,OAChB3sF,EAAQ1c,EAAQ0c,MAChBq7H,EAAam4P,GAAe,CAAEn8R,UAAU,GAAQ+4B,EAAO5vI,QACvD+mZ,EAAe,iEAChBjkZ,EAAQkkZ,gBACXjpZ,EAAQwmX,GAAOxmX,KAEkB,IAA/BA,EAAMy6B,QAAQ,cAChBz6B,GAAS,YAEXA,EAAQA,EAAMa,QAAQ,cAAemoZ,GACrC,IAAIxyP,EAAMvkB,EAAUwjC,SACpB,MAAMyzO,EAAe1yP,EAAIiN,eACnBtwJ,EAAO0+H,EAAO5tC,UAChBilT,IAAiB/1Y,GAAQ8+H,EAAU+8C,eACjCx9D,EAAI2gB,QAAQh/H,EAAKsiH,aAjGD,EAACoc,EAAQhpI,IACxBgkH,EAAchkH,KAAUgpI,EAAO5vI,OAAO6wL,kBAAkBjqL,EAAK4oH,UAgG9B03R,CAAgBt3Q,EAAQ1+H,EAAKsiH,aAAejE,EAAI4uC,QAAQjtJ,EAAKsiH,cAC/F+gC,EAAMhlC,EAAIilC,YACVD,EAAIK,SAAS1jJ,EAAKsiH,WAAY,GAC9B+gC,EAAIM,OAAO3jJ,EAAKsiH,WAAY,GAC5Bwc,EAAU0kB,OAAOH,IAGhBvkB,EAAU+8C,eACb65N,GAAsBh3Q,GAExB,MAAMt4G,EAAa04G,EAAUyuC,UACvB0oO,EAAa,CACjB1jZ,QAAS6zB,EAAWk4F,SAASnwH,cAC7BoO,KAAM3K,EAAQ2K,KACdynI,QAAQ,GAEJq8C,EAAWplF,EAAO7oG,MAAMvF,EAAOopZ,GACrC,IAAsB,IAAlBrkZ,EAAQm4I,OAAkBwpQ,GAAe70Q,EAAO5vI,OAAQuxL,IAjRtC,EAAChiE,EAAK3oH,MACnBk+Y,GAAYv1R,EAAK3oH,GAgR+CwgZ,CAAgB73R,EAAKj4F,GAK5F,OAJAi9H,EAAM4wP,GAAgBtqQ,EAAYtrB,EAAKygB,EAAUwjC,SAAU+d,GACvDh9B,GACFvkB,EAAU0kB,OAAOH,GAEZx2J,GAEa,IAAlB+E,EAAQm4I,OA5MiB,EAAC1rB,EAAKgiE,EAAUj6J,EAAYof,KACzD,IAAInoC,EACJ,MAAMozX,EAAYpwM,EAAS/9D,WACrBwb,EAAWuiD,EAASvB,UAEpBq3N,EAAyB1lB,KADiB,aAAnC3yP,EAASve,KAAK,iBAAkCue,EAASlnF,KAAOknF,GAEvEs4Q,EAAmBr6R,EAAWg5R,GAA0BtkB,EAAU5/X,MACxE,GAAIslZ,GAA0BC,EAAkB,CAC9C,MAAM71Q,EAA0D,UAAtCkwP,EAAUlxQ,KAAK,mBACnC82R,GAAgF,QAAjDh5Y,EAAKghH,EAAIwgB,UAAUz4G,EAAYi4F,EAAI2gB,gBAA6B,IAAP3hI,OAAgB,EAASA,EAAGihH,SAASnwH,iBAAmBsiY,EAAU5/X,KAC1JylZ,EAA6Bl8R,EAASlwH,KAAK2mZ,GAAyBrrW,EAAMpf,IAAa40F,OAAOi3O,IACpG,OAAO1xN,GAAqB81Q,GAA8BC,CAC5D,CACE,OAAO,CACT,EA8L8BC,CAAuBl4R,EAAKgiE,EAAUj6J,EAAYs4G,EAAO5tC,aACtD,QAA9BzzF,EAAKgjL,EAAS/9D,kBAA+B,IAAPjlH,GAAyBA,EAAGulH,UA1I1Cy9D,KAC3B,IAAI3qL,EAAO2qL,EACX,KAAO3qL,EAAOA,EAAK04V,QACC,IAAd14V,EAAKV,MACPU,EAAK6pH,KAAK,oBAAqB,IAEnC,EAsIAi3R,CAAqBn2N,GACrB,IAAI3qL,EAAO2qL,EAASvB,UACpB,GAAIppL,GAA4B,eAApBA,EAAK6pH,KAAK,MAAwB,CAC5C,MAAMvjG,EAAStmB,EACf,IAAKA,EAAOA,EAAKkhD,KAAMlhD,GACH,UAAdA,EAAK7E,KADkB6E,EAAOA,EAAK04V,MAAK,GAI5C,GAAkB,IAAd14V,EAAKV,OAAeqpH,EAAI2gB,QAAQtpI,EAAK7E,MAAO,CAC1C6E,EAAKk+C,QAAU8qF,EAAO5vI,OAAOm0L,aAAavtL,EAAKk+C,OAAO/iD,KAAM,SAC9D6E,EAAKk+C,OAAOowF,OAAOhoH,EAAQtmB,EAAoB,OAAdA,EAAK7E,MAExC,KACF,CAEJ,CAEA,GADA6tI,EAAO+3Q,oBAAoBC,wBAAwBtwX,GAC9C6vX,EAAWvwP,SAnEW,EAACrnC,EAAK3oH,EAAM2qL,KACvC,IAAIhjL,EACJ,OAAO09G,EAAOslE,EAASx9D,WAAYwuR,KAA6G,aAAlD,QAA3Ch0Y,EAAKghH,EAAIwgB,UAAUnpI,EAAM2oH,EAAI2gB,gBAA6B,IAAP3hI,OAAgB,EAASA,EAAGihH,SAAuB,EAiE7Hq4R,CAAqBt4R,EAAKj4F,EAAYi6J,GAG3D,CACL3hD,EAAOI,UAAUouB,WAAW2oP,GAC5B,IACI9nG,EADA3nR,EAAa04G,EAAUyuC,UAE3B,MAAM42K,EAAWzlN,EAAO5tC,UAMxB,IALIghQ,GAAa1rU,GACfA,EAAa2nR,EAAWo2C,EAExBp2C,EAAW3nR,EAEN2nR,GAAYA,IAAao2C,GAC9B/9T,EAAa2nR,EACbA,EAAWA,EAAS3nR,WAEtBv5B,EAAQu5B,IAAe+9T,EAAWA,EAAShpU,UAAYkjG,EAAI2tP,aAAa5lV,GACxE,MAAMof,EAAOy1D,EAAO7oG,MAAMvF,GACpB+pZ,EA9FanjZ,KACrB,IAAK,IAAImjZ,EAAanjZ,EAAOmjZ,EAAYA,EAAaA,EAAWxoD,OAC/D,GAA8B,eAA1BwoD,EAAWr3R,KAAK,MAClB,OAAOnF,EAAS/iH,KAAKu/Y,GAGzB,OAAOx8R,EAASE,MAAM,EAwFDu8R,CAAerxW,GAC5BsxW,EAAcF,EAAWhkV,KAAK0/U,IAAwBr3R,MAAMz1E,GAClEoxW,EAAW78W,MAAK/d,GAAUA,EAAOtuB,QAAQ2yL,KACzC,MAAM02N,EAAY12N,EAASx9D,WACrBjvE,EAAoC,QAA1BwpG,EAAKijC,EAASzsI,cAA2B,IAAPwpG,EAAgBA,EAAK53G,EACvE66I,EAASz9D,SACT,MAAM0yO,EAAkBvJ,EAASgrD,GAAWrhZ,GAAQykR,GAAUz7I,EAAO5vI,OAAQ4G,EAAMk+C,KACnF8+V,GAAkBp9C,EAAiB52N,EAAO5vI,OAAQgoZ,GAClDr6R,GAASxhB,EAAO+7S,iBAAkB/7S,EAAOg8S,sBAAuBzxW,GAChE34C,EAAQ88I,EAAWC,UAAUpkG,GACzBpf,IAAe+9T,EACjB9lO,EAAIgsP,QAAQlmB,EAAUt3V,GAEtBwxH,EAAI4tP,aAAa7lV,EAAYv5B,EAEjC,MAjCEA,EAAQ88I,EAAWC,UAAUy2C,GAxMV,EAAC3hD,EAAQ7xI,EAAOu5B,KACrC,IAAI/oB,EACJ,GAAkD,QAA9C+oB,EAAWr0B,aAAa,kBACO,QAAhCsL,EAAK+oB,EAAWA,kBAA+B,IAAP/oB,GAAyBA,EAAG4kH,aAAayc,EAAOrgB,IAAIiiE,eAAezzL,GAAQu5B,OAC/G,CACL,MAAM1wB,EAAO0wB,EAAWk8F,WAClBukQ,EAAQzgW,EAAW04J,WACpBppL,GAAQA,IAASmxX,GAA2B,OAAlBnxX,EAAK4oH,SAClCogB,EAAOrgB,IAAIgsP,QAAQjkV,EAAYv5B,GAE/B6xI,EAAOI,UAAUouB,WAAWrgK,EAAO,CAAEi/J,WAAW,GAEpD,GA6LEorP,CAAex4Q,EAAQ7xI,EAAOu5B,GAvJHmhG,MA6L7B,MA9N+B,EAACmX,EAAQpwH,KACxC,MAAM6oY,EAAqBz4Q,EAAO5vI,OAAOslL,wBACnC/1D,EAAMqgB,EAAOrgB,IACnB,GAAI/vG,EAAO,CACT,MAAMk3B,EAAOk5F,EAAO5tC,UACdsmT,EAAepG,GAAatyQ,GAC5B24Q,EAAmB,uBACnBC,EAAYj5R,EAAIrsH,OAAOqlZ,GAC7Bp+R,GAAMl/E,KAAKu9W,GAAW5hZ,IACpB,MAAM6zL,EAAWsiE,GAAenyI,EAAcy9R,EAAmBtrJ,EAAYvtI,SAASnwH,gBAChFopZ,EAAc1rJ,GAAiD,IAAlCA,EAAY/rI,WAAW/lH,OAE1D,IADmDuoY,GAAwBjkR,EAAzCwtI,EACJn2P,KADkE8sY,GAAmCnkR,EAAKwtI,IACjGtiE,EAAS7zL,IAAS6hZ,EAAY7hZ,GAAO,CAC1E,MAAMoiD,EAASsqV,GAAc/jR,EAAK3oH,GAC5B8hZ,EAAe,CAACC,EAAWC,IAAc18R,GAAOy8R,GAAWj8X,GAASugG,EAAW27R,EAAWl8X,KAC1Fm8X,EAA0B7F,GAAayF,EAAY7hZ,IAAS2oH,EAAI2G,GAAG8sR,EAAWuF,IAAqB9tN,EAASuoN,KAAeA,EAAUxzR,WAAa5oH,EAAK4oH,UAAYk5R,EAAa1/V,EAAQsqV,GAAc/jR,EAAKyzR,KAAe6F,EAAwB7F,EAAUjvR,SAAS,KACrQ+0R,EAAoBxxX,GAAcszF,EAActzF,IAAeA,IAAeof,IAAS4xW,EAAaj7V,QAAQzmD,EAAM0wB,IAAewxX,EAAkBxxX,EAAW5kB,gBAC9Jq2Y,EAA6BzxX,GAAcszF,EAActzF,IAAeA,IAAeof,GAAQ64E,EAAI2G,GAAG5+F,EAAYixX,KAAsB3U,GAAiBrkR,EAAK3oH,EAAM0wB,IAAeyxX,EAA2BzxX,EAAW5kB,iBAC3Nm2Y,EAAwBjiZ,EAAKmtH,SAAS,KAAO+0R,EAAkBliZ,EAAK8L,iBAAmBq2Y,EAA2BniZ,EAAK8L,iBACzH68G,EAAIj+D,OAAO1qD,GAAM,EAErB,CAVkCm2P,KAUlC,GAEJ,GAkMAisJ,CAAyBp5Q,EAAQpwH,GACjC8mY,GAAsB12Q,EAAQrgB,EAAIjyH,IAAI,eAzLTm7H,EA0LNmX,EAAO5tC,UAzL9BmoB,GAAMl/E,KAAKwtF,EAAIlsG,qBAAqB,MAAMksG,IACxCA,EAAInjH,gBAAgB,oBAAoB,IAyL1C6wY,GAAqB52R,EAAKygB,EAAUC,WAAYL,EAAO5vI,QAtwVrC,EAACA,EAAQ02C,EAAMuyW,KACjC,MACMx2R,EAAU0tO,GAAUxvO,GAAaS,QAAQ63R,IADhCt9V,GAAMrwB,GAAGqwB,EAAIglE,GAAaS,QAAQ16E,MAEjD25E,GAAMoC,EAASA,EAAQxnH,OAAS,GAAGxJ,OAAOg+V,IAAa/zO,MAAK,IAAMq7O,GAAe/mW,EAAQ02C,KAAO/xC,GAASoiW,GAAe/mW,EAAQ2E,EAAM4qH,MAAK,EAowV3I25R,CAAYt5Q,EAAO5vI,OAAQ4vI,EAAO5tC,UAAWguC,EAAUC,YAChDlyI,CAAK,EAGRorZ,GAAajoZ,GAAWA,aAAmB+uY,GAW3CmZ,GAAgB,CAACx5Q,EAAQ/e,EAAMw4R,KACnCz5Q,EAAOrgB,IAAIgsP,QAAQ3rO,EAAO5tC,UAAW6uB,IACjB,IAAhBw4R,GAXgBz5Q,KAChByyC,GAASzyC,IACX6qP,GAAgB7qP,EAAO5tC,WAAW/2D,MAAKge,IACrC,MAAMriD,EAAOqiD,EAAIw1H,UACX6vN,EAAW3rC,GAAU/7V,GAAQ6zX,GAAgB7zX,GAAMulH,MAAMljE,GAAOA,EACtE2mF,EAAOI,UAAU0kB,OAAO45O,EAAShlB,UAAU,GAE/C,EAKEiyB,CAAc3rQ,EAChB,EAgDI05Q,GAAqB,CAAC15Q,EAAQ1uI,EAAS0R,IACpC04G,EAASlwH,KAAKw0I,EAAO5tC,WAAWxlG,KAAI0U,GACrCi4Y,GAAWjoZ,GAZI,EAAC0uI,EAAQ1+H,EAAMhQ,EAAS0R,KAC7C+6G,GAASiiB,EAAOzjC,OAAO+7S,iBAAkBt4Q,EAAOzjC,OAAOg8S,sBAAuBjnZ,GAC9E,MAAM2vH,EAAOmiR,GAAe,CAAEn8R,UAAU,GAAS+4B,EAAO5vI,QAAQ86I,UAAU55I,GACpEqoZ,EAAchlC,GAAOT,GAAoBnzP,GAAaS,QAAQlgH,IAAS2/G,EAAO1G,GAAMxpH,KAAKkwH,IAE/F,OADAu4R,GAAcx5Q,EAAQ25Q,EAAa32Y,EAAK4oY,cACjC,CACLt6Y,UACA2vH,KAAM04R,EACP,EAKUC,CAAe55Q,EAAQ1+H,EAAMhQ,EAAS0R,GAjD1B,EAACg9H,EAAQ1+H,EAAMhQ,EAAS0R,KAE/C,GAAuB,KADvB1R,EAAUqjX,GAAOrjX,IACL+J,QAAgB,QAAQjK,KAAKE,GAAU,CACjD,MAAMuoZ,EAAO,0BACS,UAAlBv4Y,EAAKs+G,SACPtuH,EAAU,WAAauoZ,EAAO,aACrB,YAAYzoZ,KAAKkQ,EAAKs+G,YAC/BtuH,EAAU,OAASuoZ,EAAO,SAE5B,MAAMC,EAAsBx4N,GAAmBthD,GAQ/C,OAPIA,EAAO5vI,OAAOm0L,aAAajjL,EAAKs+G,SAASnwH,cAAeqqZ,EAAoBrqZ,gBAC9E6B,EAAUuoZ,EACVvoZ,EAAU0uI,EAAOrgB,IAAI02D,WAAWyjO,EAAqBv4N,GAAwBvhD,GAAS1uI,IAC5EA,IACVA,EAAUuoZ,GAEZL,GAAcx5Q,EAAQ1uI,EAAS0R,EAAK4oY,cAC7B,CACLt6Y,UACA2vH,KAAM3vH,EAEV,CAAO,CACe,QAAhB0R,EAAK4iC,SACPt0C,EAAU8xY,GAAe,CAAEn8R,UAAU,GAAS+4B,EAAO5vI,QAAQ86I,UAAUlL,EAAOzjC,OAAO7oG,MAAMpC,EAAS,CAClGyoZ,eAAe,EACfz0Q,QAAQ,MAGZ,MAAMq0Q,EAAczlC,GAAoBnzP,GAAaS,QAAQlgH,IAAShQ,EAAUipH,GAAMxpH,KAAKO,GAE3F,OADAkoZ,GAAcx5Q,EAAQ25Q,EAAa32Y,EAAK4oY,cACjC,CACLt6Y,QAASqoZ,EACT14R,KAAM04R,EAEV,GAiBWK,CAAiBh6Q,EAAQ1+H,EAAMhQ,EAAS0R,KAEhDu5G,MAAM,CACPjrH,UACA2vH,KAAMs4R,GAAWv2Y,EAAK1R,SAAW,GAAK0R,EAAK1R,UAIzCyuM,GAAej9E,GAAUtzG,EAAWszG,GAAUA,EAAStH,EAgBvDsL,GAAY,CAAC/xH,EAAOy0K,EAAW1mD,KACnC,MAAMzmF,EAAUmtI,EAAUz0K,GACpBvI,EAAOuzM,GAAaj9E,GAC1B,OAAOzmF,EAAQugF,SAAQ,IAAMpwH,EAAKuI,GAAS2mH,EAASE,OAlBrC,EAAC7mH,EAAOy0K,EAAW1mD,KAClC,IAAIt0H,EAAUuG,EAAM4qH,IACpB,MAAMnzH,EAAOuzM,GAAaj9E,GAC1B,KAAOt0H,EAAQk5B,YAAY,CACzBl5B,EAAUA,EAAQk5B,WAClB,MAAMq0B,EAAKglE,GAAaS,QAAQhzH,GAC1BwxM,EAAcx2B,EAAUztH,GAC9B,GAAIikJ,EAAY/jF,SACd,OAAO+jF,EACF,GAAIxzM,EAAKuvD,GACd,KAEJ,CACA,OAAO2/D,EAASE,MAAM,EAKuC2K,CAASxxH,EAAOy0K,EAAWh9K,IAAM,EAG1FytZ,GAAS5qB,GACT6qB,GAAmC,CAACnwG,EAAI/yS,EAAM7E,KAClD,MAAMi/X,EAAarnF,EAAG9rR,UAAUvwB,IAAIyE,GACpC,GAAIi/X,EACF,IAAK,IAAItgX,EAAI,EAAGA,EAAIsgX,EAAW/1X,OAAQyV,IAAK,CAC1C,MAAM80B,EAASwrV,EAAWtgX,GAC1B,GAAI48R,GAAiB9nQ,KAA8B,IAAnBA,EAAOu0W,SAAqBpwG,EAAGpqL,IAAI2G,GAAGtvH,EAAM4uC,EAAO9tC,UACjF,OAAO,CAEX,CAEF,OAAO,CAAK,EAERsiZ,GAAe,CAACp6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,KAC9C,MAAMvzW,EAAOk5F,EAAOrgB,IAAIyhE,UACxB,GAAIpqL,IAAS8vC,EACX,OAAO,EAET,MAAMwzW,EAAct6Q,EAAOrgB,IAAIwgB,UAAUnpI,GAAM6xH,KACzCqxR,GAAiCl6Q,EAAQnX,EAAK12H,KAG3C02H,EAAInhG,aAAeof,KAAUyzW,GAAUv6Q,EAAQnX,EAAK12H,EAAMi9X,GAAM,MAEzE,QAASmrB,GAAUv6Q,EAAQs6Q,EAAanoZ,EAAMi9X,EAAMirB,EAAQ,EAExDG,GAAY,CAAC76R,EAAK3oH,EAAM4uC,OACxB4nQ,GAAe5nQ,KAAWq0W,GAAOjjZ,EAAM4uC,EAAO+mI,cAG9C8gI,GAAc7nQ,KAAWq0W,GAAOjjZ,EAAM4uC,EAAOgmJ,WAG7C8hH,GAAiB9nQ,KACZ8sT,GAAY17V,IAAS2oH,EAAI2G,GAAGtvH,EAAM4uC,EAAO9tC,YAI9C2iZ,GAAa,CAAC96R,EAAK3oH,EAAM4uC,EAAQsiR,EAAUmyF,EAASjrB,KACxD,MAAMjuV,EAAQyE,EAAOsiR,GACfwyF,EAA+B,eAAbxyF,EACxB,GAAI14S,EAAWo2B,EAAO+0W,SACpB,OAAO/0W,EAAO+0W,QAAQ3jZ,EAAM4uC,EAAQsiR,GAEtC,GAAI/mR,EACF,GAAK0sT,GAAY1sT,IAkBf,IAAK,IAAIrwB,EAAI,EAAGA,EAAIqwB,EAAM9lC,OAAQyV,IAChC,GAAI4pY,EAAkB/6R,EAAI6iB,UAAUxrI,EAAMmqC,EAAMrwB,IAAMmrC,GAAS0jE,EAAK3oH,EAAMmqC,EAAMrwB,IAC9E,OAAO,OAnBX,IAAK,MAAM/iB,KAAOozC,EAChB,GAAIuyJ,GAAMvyJ,EAAOpzC,GAAM,CACrB,MAAMI,EAAQusZ,EAAkB/6R,EAAI6iB,UAAUxrI,EAAMjJ,GAAOkuD,GAAS0jE,EAAK3oH,EAAMjJ,GACzE6sZ,EAAgBzrB,GAAYhuV,EAAMpzC,GAAMqhY,GACxCyrB,EAAe5/R,EAAW9sH,IAAUkgW,GAAUlgW,GACpD,GAAI0sZ,GAAgB5/R,EAAW2/R,GAC7B,SAEF,GAAIP,GAAWQ,IAAiBj1W,EAAOusH,MACrC,OAAO,EAET,KAAMkoP,GAAWz0W,EAAOusH,SAAW8nP,GAAO9rZ,EAAOsgL,GAAoBmsO,EAAe7sZ,IAClF,OAAO,CAEX,CAUN,OAAO,CAAI,EAEPwsZ,GAAY,CAACxwG,EAAI/yS,EAAM7E,EAAMi9X,EAAMirB,KACvC,MAAMjpB,EAAarnF,EAAG9rR,UAAUvwB,IAAIyE,GAC9BwtH,EAAMoqL,EAAGpqL,IACf,GAAIyxQ,GAAc1+B,GAAY17V,GAC5B,IAAK,IAAI8Z,EAAI,EAAGA,EAAIsgX,EAAW/1X,OAAQyV,IAAK,CAC1C,MAAM80B,EAASwrV,EAAWtgX,GAC1B,GAAI0pY,GAAUzwG,EAAGpqL,IAAK3oH,EAAM4uC,IAAW60W,GAAW96R,EAAK3oH,EAAM4uC,EAAQ,aAAcy0W,EAASjrB,IAASqrB,GAAW96R,EAAK3oH,EAAM4uC,EAAQ,SAAUy0W,EAASjrB,GAAO,CAC3J,MAAMxnX,EAAUg+B,EAAOh+B,QACvB,GAAIA,EACF,IAAK,IAAImO,EAAI,EAAGA,EAAInO,EAAQvM,OAAQ0a,IAClC,IAAKg0R,EAAGpqL,IAAIytP,SAASp2W,EAAMm4X,GAAYvnX,EAAQmO,GAAIq5W,IACjD,OAIN,OAAOxpV,CACT,CACF,CAEc,EAEZk1W,GAAU,CAAC96Q,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,KACzC,GAAIrjZ,EACF,OAAOojZ,GAAap6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,GAGhD,GADArjZ,EAAOgpI,EAAOI,UAAUyuC,UACpBurO,GAAap6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,GACzC,OAAO,EAET,MAAM3uN,EAAY1rD,EAAOI,UAAUC,WACnC,QAAIqrD,IAAc10L,IACZojZ,GAAap6Q,EAAQ0rD,EAAWv5L,EAAMi9X,EAAMirB,GAItC,EAiBRxyY,GAAU,CAACm4H,EAAQvoG,KACvB,MAAMqrF,EAAS+F,GAAOn9F,GAAGm9F,EAAK9H,GAAaS,QAAQwe,EAAO5tC,YAE1D,OAAOspB,EAASlwH,KAAKw0I,EAAOI,UAAUC,UAAS,IAAOnsE,MAAK6mV,GAAUj0R,GAAU/F,GAAaS,QAAQu5R,IAASlyR,GAAOlK,GAAQlnF,GAAOtlC,GADrH,EAAC02H,EAAK12H,IAASooZ,GAAUv6Q,EAAQnX,EAAIlJ,IAAKxtH,GAAQupH,EAAS/iH,KAAKxG,GAAQupH,EAASE,OAC4C5qH,CAAM63H,EAAK12H,MAAQ2wH,KAAShG,WAAW,EAsB9Kk+R,GAAiB,CAACh7Q,EAAQhpI,EAAMikZ,IAAgB/8R,EAAM+8R,GAAa,CAAC35V,EAAKnvD,KAC7E,MAAM+oZ,EApiJqB,EAACl7Q,EAAQgwB,IAW7B2/N,GAAkB3vP,EAAQgwB,GAVPpqH,IACxB,MAAMu1W,EAAkBnhX,GAAOxqB,EAAWwqB,IAAQA,EAAI3+B,OAAS,GAAuB,MAAlB2+B,EAAI1qC,OAAO,GAC/E,OAAO+sH,EAAO,CACZ,SACA,eACCtuH,GAAO65H,GAAMhiF,EAAQ73C,GAAKsuH,QAAOxnC,IAClC,MAAMumU,EAAcpuD,EAAUn4Q,GAASA,EAAQpoF,GAAOooF,GACtD,OAAOwnC,EAAO++R,EAAaD,EAAgB,KAC1C,IA2hJgBE,CAAqBr7Q,EAAQ7tI,GAClD,OAAI6tI,EAAO/hH,UAAUs8X,UAAUvjZ,EAAM7E,EAAM,CAAC,EAAG+oZ,GACtC55V,EAAIz0D,OAAO,CAACsF,IAEZmvD,CACT,GACC,IAEGg6V,GAAO5mC,GAIP6mC,GAAoBvkZ,IACxB,GAAIA,EAAM,CACR,MAAMm9K,EAAS,IAAIg9K,GAAcn6V,EAAMA,GACvC,IAAK,IAAIq4S,EAAWl7H,EAAO93I,UAAWgzQ,EAAUA,EAAWl7H,EAAO/9H,OAChE,GAAI68S,GAAS5jD,GACX,OAAOA,CAGb,CACA,OAAO,IAAI,EAEPmsG,GAAuBliY,IAC3B,MAAMm8V,EAAiB10P,GAAaM,QAAQ,QAS5C,OARAd,GAASk1P,EAAgB,CACvB,GAAMsV,GACN,iBAAkB,IAClB,gBAAiB,iBAEfzxW,GACFmqG,GAASgyP,EAAgB10P,GAAaO,SAASg6R,KAE1C7lC,CAAc,EASjBgmC,GAA2B,CAACz7Q,EAAQhpI,EAAMozY,KAC9C,MAAMzqR,EAAMqgB,EAAOrgB,IAAKygB,EAAYJ,EAAOI,UAC3C,GAAIkwP,GAAsBt5X,GACxBmzY,GAAgBnqQ,GAAQ,EAAOjf,GAAaS,QAAQxqH,GAAOozY,GAAW,OACjE,CACL,MAAMzlP,EAAMvkB,EAAUwjC,SAChBgoB,EAAQjsE,EAAIwgB,UAAUnpI,EAAM2oH,EAAI2gB,SAChCsxB,EAAiBjN,EAAIiN,eACrBC,EAAclN,EAAIkN,YAClBC,EAAenN,EAAImN,aACnBC,EAAYpN,EAAIoN,UAChBm0N,EAlByBhB,KACjC,MAAMgB,EAAWq1B,GAAkBr2B,GAInC,OAHIgB,GAAYA,EAASroX,KAAKvO,OAAO,KAAOgsZ,IAC1Cp1B,EAASzB,WAAW,EAAG,GAElByB,CAAQ,EAaIw1B,CAA2B1kZ,GAC5C2oH,EAAIj+D,OAAO1qD,GAAM,GACb46J,IAAmBs0N,GAAYr0N,EAAc,GAC/ClN,EAAIK,SAASkhO,EAAUr0N,EAAc,GAEnCC,IAAiBo0N,GAAYn0N,EAAY,GAC3CpN,EAAIM,OAAOihO,EAAUn0N,EAAY,GAE/B65B,GAASjsE,EAAI4uC,QAAQq9B,IACvB6oL,GAAkB1zP,GAAaS,QAAQoqE,IAEzCxrD,EAAU0kB,OAAOH,EACnB,GAEIg3P,GAAuB,CAAC37Q,EAAQhpI,EAAMozY,KAC1C,MAAMzqR,EAAMqgB,EAAOrgB,IAAKygB,EAAYJ,EAAOI,UAC3C,GAAKppI,EAQHykZ,GAAyBz7Q,EAAQhpI,EAAMozY,QANvC,KADApzY,EAAOi0X,GAAwBjrP,EAAO5tC,UAAWguC,EAAUC,aAEzD,KAAOrpI,EAAO2oH,EAAIjyH,IAAIq9X,KACpB0wB,GAAyBz7Q,EAAQhpI,EAAMozY,EAK7C,EAiBIwR,GAAa,CAACl0X,EAAY1wB,KAC9B0wB,EAAWP,YAAYnwB,GAChBA,GAEH6kZ,GAAsC,CAACC,EAAarmC,KACxD,IAAI92W,EACJ,MAAMo9Y,EAAsB/9R,EAAM89R,GAAa,CAACp0X,EAAYs0X,IACnDJ,GAAWl0X,EAAYs0X,EAAW13R,WAAU,KAClDmxP,GACG/vP,EAAmD,QAA5C/mH,EAAKo9Y,EAAoB/iW,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,SACtF,OAAO8sZ,GAAWG,EAAqBr2R,EAAInE,eAAe+5R,IAAM,EAkB5DW,GAAiBjlZ,GAAQpJ,GAAIoJ,EAAMinK,GAAMjnK,GAAMhI,QAAQ,IAAIkD,OAAO,GAAIu/V,OAAW,MACjFyqD,GAAwB,CAACl8Q,EAAQy1O,KACrC,MAAM37S,EAAU,KACS,OAAnB27S,GAA4Bz1O,EAAOrgB,IAAI4uC,QAAQknN,IACjDzyP,GAAYjC,GAAaS,QAAQi0P,IAAiBp6U,MAAKrkC,IACjD84V,GAAS94V,GACXilZ,GAAejlZ,GAEf85V,GAAa95V,GAAM5D,GAAK08V,GAAS18V,KAAIioC,MAAK6qV,IACpCp2B,GAASo2B,IACX+1B,GAAe/1B,EACjB,GAEJ,GAEJ,EAEFlmP,EAAO+kI,KAAK,SAAS3xQ,IACfA,EAAEyK,OAASgvX,GAAaz5X,EAAEyK,QACvBzK,EAAE+oZ,YAGLn8Q,EAAO+kI,KAAK,kBAAkB,KAC5BjrM,GAAS,IAHXA,IAMJ,GACA,EAqCEsiV,GAAoB,CAACp8Q,EAAQ7tI,EAAMi9X,EAAMirB,KAC7C,MAAM16R,EAAMqgB,EAAOrgB,IACbygB,EAAYJ,EAAOI,UACzB,IAAIi8Q,GAAkB,EACtB,MAAMjrB,EAAapxP,EAAO/hH,UAAUvwB,IAAIyE,GACxC,IAAKi/X,EACH,OAEF,MAAMzsO,EAAMvkB,EAAUwjC,SAChB/oH,EAAY8pG,EAAIiN,eAChB9nH,EAAS66G,EAAIkN,YACnB,IAAI76J,EAAO6jD,EACPo4S,GAASp4S,KACP/Q,IAAW+Q,EAAUh9C,KAAKxC,SAC5BghZ,GAAkB,GAEpBrlZ,EAAOA,EAAK0wB,YAEd,MAAMm7F,EAAU,GAChB,IAAIm5R,EACJ,KAAOhlZ,GAAM,CACX,GAAIujZ,GAAUv6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,GAAU,CAChD2B,EAAahlZ,EACb,KACF,CACIA,EAAKksH,cACPm5R,GAAkB,GAEpBx5R,EAAQ70H,KAAKgJ,GACbA,EAAOA,EAAK0wB,UACd,CACA,GAAKs0X,EAGL,GAAIK,EAAiB,CACnB,MAAM9kO,EAAWn3C,EAAUo3C,cAC3B7yB,EAAIuF,UAAS,GACb,IAAIoyP,EAAc1qB,GAAUjyQ,EAAKglC,EAAKysO,GAAY,GAClDkrB,EAAcprZ,GAAMorZ,GACpBt8Q,EAAO/hH,UAAUyjC,OAAOvvD,EAAMi9X,EAAMktB,EAAajC,GACjDj6Q,EAAUw3C,eAAeL,EAC3B,KAAO,CACL,MAAMk+L,EAAiBwV,GAAwBjrP,EAAO5tC,UAAW4pT,GAC3DO,EAAevhS,EAAcy6P,GAAkB91P,EAAImvD,WAAWktO,EAAWt0X,WAAY+zF,EAAQg6P,GAAkB,GAC/G+mC,EAAoBhB,IAAqB,GAAO77R,IAvJzB,EAACqgB,EAAQy1O,EAAgBumC,KACxD,IAAIr9Y,EAAI+/I,EACR,MAAM/+B,EAAMqgB,EAAOrgB,IACbisE,EAAQjsE,EAAIwgB,UAAU67Q,EAAY5gS,EAAMyzQ,GAAe7uP,EAAO5vI,SAChEw7L,GAASjsE,EAAI4uC,QAAQq9B,GACU,QAAhCjtL,EAAKq9Y,EAAWt0X,kBAA+B,IAAP/oB,GAAyBA,EAAGotW,aAAa0J,EAAgBumC,IAElG7nC,GAAiBpzP,GAAaS,QAAQw6R,IAClCr8R,EAAI4uC,QAAQytP,GACmB,QAAhCt9P,EAAKs9P,EAAWt0X,kBAA+B,IAAPg3H,GAAyBA,EAAGqtN,aAAa0J,EAAgBumC,GAElGr8R,EAAI8iE,YAAYgzL,EAAgBumC,GAEpC,EA2IES,CAAyBz8Q,EAAQw8Q,EAAsC,OAAnB/mC,QAA8C,IAAnBA,EAA4BA,EAAiBumC,GAC5H,MAAMU,EA9Hc,EAAC18Q,EAAQy1O,EAAgBumC,EAAY7pZ,EAAMi9X,EAAMirB,KACvE,MAAMp8X,EAAY+hH,EAAO/hH,UACnB0hG,EAAMqgB,EAAOrgB,IACbg9R,EAAetvD,EAASv/V,GAAKmwB,EAAUvwB,QAAQsiK,GAAcA,IAAe79J,IAASowH,GAAWytC,EAAY,kBAC5G4sP,EAAiB5B,GAAeh7Q,EAAQg8Q,EAAYW,GAE1D,GADsBtvD,EAASuvD,GAAgBC,IAAYjtB,GAAkB5vP,EAAQ68Q,EAAS1qZ,KAC5EkJ,OAAS,EAAG,CAC5B,MAAMyhZ,EAAmBd,EAAW13R,WAAU,GAI9C,OAHA3E,EAAIn1H,IAAIirX,EAAgBqnC,GACxB7+X,EAAUyjC,OAAOvvD,EAAMi9X,EAAM0tB,EAAkBzC,GAC/C16R,EAAIj+D,OAAOo7V,GACJphS,EAAS/iH,KAAKmkZ,EACvB,CACE,OAAOphS,EAASE,MAClB,EAgH4BmhS,CAAgB/8Q,EAAQw8Q,EAAmBR,EAAY7pZ,EAAMi9X,EAAMirB,GACvF2C,EAAgBnB,GAAoC,IACrDh5R,KACA65R,EAAkBz/R,aAClBs/R,GACFC,GACC/mC,GACFgmC,GAAyBz7Q,EAAQy1O,EAAgBz6P,EAAcy6P,IAEjEr1O,EAAUquB,kBAAkBuuP,EAAe,GAC3Cd,GAAsBl8Q,EAAQw8Q,GAC1B78R,EAAI4uC,QAAQytP,IACdr8R,EAAIj+D,OAAOs6V,EAEf,GAaIiB,GAAUj9Q,IACdA,EAAO8K,GAAG,mBAAmB13I,IAFV5E,MAVS,EAACwxI,EAAQg/C,EAASorN,KAC9C,MAAMhqQ,EAAYJ,EAAOI,UAAW9+H,EAAO0+H,EAAO5tC,UAClDupT,GAAqB37Q,EAAQ,KAAMoqQ,GAClB,IAAZprN,GAA6B,KAAZA,IAAmB5+C,EAAU+8C,eAAiB/8C,EAAUC,WAAW5jH,YAAc6+X,IACrGK,GAAqB37Q,EAAQirP,GAAwB3pX,EAAM8+H,EAAUC,aAAa,GAEpE,KAAZ2+C,GAA8B,KAAZA,GACpB28N,GAAqB37Q,EAAQirP,GAAwB3pX,EAAM8+H,EAAUC,aAAa,EACpF,EAKE68Q,CAAsBl9Q,EAAQ5sI,EAAE4rL,SAHfxwL,EAGqCwxI,EAAOI,UAAUwjC,SAAS9R,aAHpDmhM,GAASzkW,IAAY2sC,GAAS3sC,EAAQqP,KAAM4zV,KAGsB,GAC9F,EAEE0rD,GAAoBrB,IACxB,MAAMrmC,EAAiB+lC,IAAqB,GACtC4B,EAAYvB,GAAoCC,EAAarmC,EAAe91P,KAClF,MAAO,CACL81P,iBACAziR,cAAeymR,GAAc2jC,EAAW,GACzC,EAEGC,GAAyB,CAAC36N,EAAYo5N,KAC1C,MAAM,eAACrmC,EAAc,cAAEziR,GAAiBmqT,GAAkBrB,GAG1D,OAFAx4R,GAASvC,GAAaS,QAAQkhE,GAAa+yL,GAC3C7tK,GAAS7mF,GAAaS,QAAQkhE,IACvB1vF,CAAa,EAOhBsqT,GAAkB,CAACt9Q,EAAQxxI,KAC/B,GAAIw8X,GAAYx8X,EAAQmxH,KACtB,OAAO,EAET,MAAM49R,EAAiBv9Q,EAAO5vI,OAAOslL,wBACrC,OAAOge,GAAM6pN,EAAgBprZ,GAAK3D,MAAcw8X,GAAYx8X,EAAQmxH,OAASmzO,GAAUtkW,EAAQmxH,IAAI,EAG/F69R,GAAmB,CAAC,EACpBC,GAAQvvO,GAAe,CAAC,QACH,EAAC/7K,EAAMm+E,KAClBktU,GAAiBrrZ,KAE7BqrZ,GAAiBrrZ,GAAQ,IAE3BqrZ,GAAiBrrZ,GAAMnE,KAAKsiF,EAAK,EASnCotU,CAAmB,OAAO19Q,IACxB,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SAe7B,IAAKjf,EAAI0N,UAAW,CAClB,MAAMogK,EAASzyL,EAAOI,UAAUwjD,oBAC1B+5N,EAAYtwD,EAASA,EAAS56B,EAAQgrF,IAhBxBhrF,IAAU5+S,IAC9B,MAAMqkC,EAAOrkC,EAAIovG,gBACjB,OAAOw6R,GAAMvlW,IAASmlE,EAAWo1M,EAAQv6Q,EAAK,EAcM0lW,CAAcnrF,IAClE06B,EAAOwwD,GAAW9pY,IAbJ,EAACgqY,EAAMC,KACrB,MAAMC,EAAQh9R,GAAaS,QAAQs8R,GAC7Bp4R,EAAM/C,GAAgBo7R,GAAOp+R,IACnCioF,GAASm2M,GACTh6R,GAAOhD,GAAaS,QAAQq8R,GAAO,CACjC98R,GAAaM,QAAQ,KAAMqE,GAC3B3E,GAAaM,QAAQ,KAAMqE,MACxBQ,GAAW63R,IACd,EAMAC,CAAQnqY,EAAIovG,gBAAiBpvG,EAAI,GAErC,KAGF,MAAMoqY,GAAiB,CACrB,aACA,YACA,QACA,WACA,cAGIC,GAA6B/kV,GAAWk9H,GAAOl9H,GAASulC,GAAO8uM,GAAe9uM,IAAuB,SAAfA,EAAIiuE,QAD1EjuE,IAAO9jE,EAAS8jE,EAAItlD,SAAWijE,EAAOvuH,GAAK4wG,EAAItlD,SAASjnD,GAAQkrH,EAAW4gS,GAAgB9rZ,KACIgsZ,CAAcz/S,KAC7H0/S,GAA4B,CAACngY,EAAW2nB,KAC5C,MAAMwrV,EAAanzW,EAAUvwB,IAAIk4C,GACjC,OAAOonT,EAAUokC,GAAc8sB,GAA2B9sB,GAAc11Q,EAASE,MAAM,EAEnFyiS,GAA6B,CAAC15P,EAAK97B,IAAQ+hQ,GAAa/hQ,EAAK4wP,GAAcG,eAAej1N,IAAMzoC,SAChGoiS,GAAyB,CAAC35P,EAAK97B,KACoG,IAAhI8hQ,GAAa9hQ,EAAK4wP,GAAcI,aAAal1N,IAAMtoC,QAAOhjE,IAAQg6S,GAAOh6S,EAAIw1H,YAAc87M,GAAa9hQ,EAAKxvE,GAAK4iE,WAErHsiS,GAAqB5+R,GAAOkJ,GAAO+qO,GAAa/qO,IAAQlJ,EAAI4+B,WAAW11B,GAgBvE21R,GAA4Bp+Q,GAAaitN,EAfhBjtN,KAC7B,MAAMqyL,EAASryL,EAAUwjD,oBACnBj/B,EAAMvkB,EAAUwjC,SACtB,GAAIxjC,EAAU+8C,cACZ,MAAO,GAET,GAAsB,IAAlBs1I,EAAOp3T,OACT,OAAOgjZ,GAA2B15P,EAAK8tK,EAAO,KAAO6rF,GAAuB35P,EAAK8tK,EAAO,IAAMA,EAAS,GAClG,CACL,MAAM1vP,EAAQ73D,GAAKunT,GAAQ5gU,QAAOg3H,GAAOw1R,GAA2B15P,EAAK97B,KAAM5L,UACzEv8E,EAAOg+E,GAAO+zM,GAAQ5gU,QAAOg3H,GAAOy1R,GAAuB35P,EAAK97B,KAAM5L,UACtEm+B,EAASq3K,EAAOljU,MAAM,GAAI,GAChC,OAAOwzE,EAAMl2E,OAAOuuJ,GAAQvuJ,OAAO6zC,EACrC,GAEsD+9W,CAAuBr+Q,GAAYm+Q,GAAmBn+Q,EAAUzgB,MAClH++R,GAAgCt+Q,GAAaitN,EAASjtN,EAAUwjD,oBAAqB26N,GAAmBn+Q,EAAUzgB,MAElHg/R,GAASpkS,GAAMl/E,KACfujX,GAAgB5nZ,GAAQ07V,GAAY17V,KAAU01X,GAAiB11X,KAAUg0X,GAAYh0X,KAAU87V,GAAU97V,GACzG6nZ,GAAqB,CAAC7nZ,EAAMu6V,KAChC,IAAK,IAAIn+L,EAAUp8J,EAAMo8J,EAASA,EAAUA,EAAQm+L,GAAc,CAChE,GAAI0B,GAAS7/L,IAAY9rC,GAAW8rC,EAAQv1J,MAC1C,OAAO7G,EAET,GAAI07V,GAAYt/L,KAAas5N,GAAiBt5N,GAC5C,OAAOA,CAEX,CACA,OAAOp8J,CAAI,EAEP8nZ,GAAqB,CAAC9+Q,EAAQ9nF,EAAM9B,KACxC,MAAMsiW,EAAepG,GAAatyQ,GAC5B++Q,EAAiBh/R,GAAc7nE,IAAS8nF,EAAOrgB,IAAI4+B,WAAWrmG,GAC9D8mW,EAAiBj/R,GAAc3pE,IAAS4pF,EAAOrgB,IAAI4+B,WAAWnoG,GACpE,GAAI2oW,GAAkBC,EAAgB,CACpC,MAAMh8R,EAAc67R,GAAmB3mW,EAAM,mBACvCgrE,EAAc27R,GAAmBzoW,EAAM,eAC7C,GAAIsiW,EAAaj7V,QAAQulE,EAAaE,GAAc,CAClD,IAAK,IAAIkwC,EAAUpwC,EAAYE,YAAakwC,GAAWA,IAAYlwC,GAAc,CAC/E,MAAM+7R,EAAa7rP,EACnBA,EAAUA,EAAQlwC,YAClBF,EAAY77F,YAAY83X,EAC1B,CAKA,OAJAj/Q,EAAOrgB,IAAIj+D,OAAOwhE,GAClB3I,GAAMl/E,KAAKk/E,GAAM+6D,KAAKpyD,EAAY9B,aAAapqH,IAC7CgsH,EAAY77F,YAAYnwB,EAAK,IAExBgsH,CACT,CACF,CACA,OAAO5sE,CAAI,EAEP8oW,GAAgB,CAACl/Q,EAAQp6F,EAAQwpV,EAAMp4X,KAC3C,IAAI2H,EACJ,GAAI3H,IAAkC,IAA1B4uC,EAAOu5W,eAA0B,CAC3C,MAAMjW,EAAqF,QAA1EvqY,EAAKmgZ,GAAmB9+Q,EAAQ0uP,GAAwB13X,GAAOA,UAA0B,IAAP2H,EAAgBA,EAAK3H,EACxH8nZ,GAAmB9+Q,EAAQkpQ,EAASxa,GAAwBwa,GAAS,GACvE,GAcIkW,GAAuB,CAACpoZ,EAAMnF,EAAQ8mK,KAC1CgmP,GAAO3nZ,EAAKoqH,YAAYpqH,IAClB4nZ,GAAc5nZ,KACZnF,EAAOmF,IACT2hK,EAAQ3hK,GAENA,EAAKmqH,iBACPi+R,GAAqBpoZ,EAAMnF,EAAQ8mK,GAEvC,GACA,EAOE0mP,GAAW,CAAC1/R,EAAKxtH,IAAS6E,MAAWA,IAAQilD,GAAS0jE,EAAK3oH,EAAM7E,IACjEmtZ,GAAa,CAAC3/R,EAAKxtH,EAAMhE,IAAU6I,IACvC2oH,EAAIliC,SAASzmF,EAAM7E,EAAMhE,GACU,KAA/B6I,EAAK3D,aAAa,UACpB2D,EAAK0O,gBAAgB,SATD,EAACi6G,EAAK3oH,KACN,SAAlBA,EAAK4oH,UAAuD,IAAhCD,EAAIqrP,WAAWh0W,GAAMqE,QACnDskH,EAAIj+D,OAAO1qD,GAAM,EACnB,EAQAuoZ,CAAgB5/R,EAAK3oH,EAAK,EAGtBwoZ,GAAejlQ,GAAa,CAChC,CAAE+hO,KAAM,IACR,CAAEjwL,OAAQ,CAAC,SACX,CAAEv+H,QAAS,MAEP2xV,GAAc,qBACdC,GAASnlS,GAAMl/E,KACfskX,GAAStwB,GAETuwB,GAAwB,CAACjgS,EAAK3oH,EAAMk+C,IAAWyqE,EAAI4uD,UAAUv3K,EAAMk+C,IAAWl+C,IAASk+C,IAAWyqE,EAAI2gB,QAAQprF,GAC9Gi9H,GAAe,CAAC43H,EAAIplJ,EAAKv4J,KAC7B,IAAIyuD,EAAY8pG,EAAIv4J,EAAQ,iBAAmB,gBAC3C09C,EAAS66G,EAAIv4J,EAAQ,cAAgB,aACzC,GAAIsmW,GAAY73S,GAAY,CAC1B,MAAMglW,EAAUhlW,EAAUumE,WAAW/lH,OAAS,GACzCjP,GAAS09C,GACZA,IAEF+Q,EAAYA,EAAUumE,WAAWt3E,EAAS+1W,EAAUA,EAAU/1W,EAChE,CAOA,OANImpT,GAASp4S,IAAczuD,GAAS09C,GAAU+Q,EAAUh9C,KAAKxC,SAC3Dw/C,EAAY,IAAIs2S,GAAct2S,EAAWkvP,EAAG33M,WAAWh8C,QAAUyE,GAE/Do4S,GAASp4S,KAAezuD,GAAoB,IAAX09C,IACnC+Q,EAAY,IAAIs2S,GAAct2S,EAAWkvP,EAAG33M,WAAWl6C,QAAU2C,GAE5DA,CAAS,EAEZilW,GAA0B,CAAC9oZ,EAAM5K,KACrC,MAAMmlD,EAAOnlD,EAAQ,aAAe,YAC9BgnZ,EAAYp8Y,EAAKu6C,GACvB,MAvBuBv6C,IAAQ,eAAe5F,KAAK4F,EAAK4oH,UAuBpDmgS,CAAiB/oZ,IAASo8Y,EACN,OAAlBp8Y,EAAK4oH,UACAwzR,EAAU7hW,IAEV6hW,EAGJp8Y,CAAI,EAEPqoM,GAAS,CAAC1/E,EAAK3oH,EAAM7E,EAAMquH,KAC/B,IAAI7hH,EACJ,MAAMklH,EAAUlE,EAAIn7G,OAAOrS,EAAMquH,GAGjC,OAF2B,QAA1B7hH,EAAK3H,EAAK0wB,kBAA+B,IAAP/oB,GAAyBA,EAAG4kH,aAAaM,EAAS7sH,GACrF6sH,EAAQ18F,YAAYnwB,GACb6sH,CAAO,EAEVm8R,GAAmB,CAACrgS,EAAK3oH,EAAMo/C,EAAMjkD,EAAMquH,KAC/C,MAAMp0H,EAAQ20H,GAAaS,QAAQxqH,GAC7B6sH,EAAU9C,GAAaS,QAAQ7B,EAAIn7G,OAAOrS,EAAMquH,IAChDqrE,EAAWz1I,EAAOq6S,GAAarkW,GAASokW,GAAapkW,GAS3D,OARA23H,GAAOF,EAASgoE,GACZz1I,GACFktE,GAASl3H,EAAOy3H,GAChBH,GAAQG,EAASz3H,KAEjB03H,GAAQ13H,EAAOy3H,GACfJ,GAASI,EAASz3H,IAEby3H,EAAQlE,GAAG,EAGdwpR,GAAa,CAACp/F,EAAI/yS,EAAM4uC,KAC5B,MAAMle,EAAa1wB,EAAK0wB,WACxB,IAAIu4X,EACJ,MAAMtgS,EAAMoqL,EAAGpqL,IACTugS,EAAkB5+N,GAAmByoH,GACvC0D,GAAc7nQ,IACZle,IAAei4F,EAAIyhE,YAChBx7I,EAAOu6W,YAAeR,GAAO3oZ,EAAM4uC,EAAOu6W,aAC7ChzD,EAAO3hW,GAAKwL,EAAKoqH,aAAapqH,IACxB45G,GAAQm5L,EAAIm2G,EAAiBlpZ,EAAK4oH,SAASnwH,eACxCwwZ,EAIHA,EAAa94X,YAAYnwB,IAHzBipZ,EAAe5gN,GAAO1/E,EAAK3oH,EAAMkpZ,GACjCvgS,EAAI62D,WAAWypO,EAAc1+N,GAAwBwoH,KAKvDk2G,EAAe,IACjB,KAjhKYr6W,IAAU8nQ,GAAiB9nQ,IAAW4nQ,GAAe5nQ,IAAWg8E,GAAKgG,GAAMhiF,EAAQ,UAAU,GAshK7Gw6W,CAAcx6W,KAAY+5W,GAAO/5W,EAAO+mI,OAAQ31K,IAGpD2oH,EAAIj+D,OAAO1qD,GAAM,EAAK,EAElBqpZ,GAA2B,CAACluZ,EAAMhE,EAAOihY,IACzC17W,EAASvhB,GACJ,CACLA,KAAMhE,EACNA,MAAO,MAGF,CACLgE,OACAhE,MAAOghY,GAAYhhY,EAAOihY,IAI1BkxB,GAAoC,CAAC3gS,EAAKkJ,KACV,KAAhClJ,EAAI6iB,UAAU3Z,EAAK,WACrBA,EAAInjH,gBAAgB,SACpBmjH,EAAInjH,gBAAgB,kBACtB,EAEI4mL,GAAe,CAAC3sE,EAAKkJ,EAAKjjF,EAAQwpV,EAAMmxB,KAC5C,IAAIC,GAAiB,EACrBd,GAAO95W,EAAOwT,QAAQ,CAACjrD,EAAOgE,KAC5B,MACEA,KAAMsuZ,EACNtyZ,MAAOyqD,GACLynW,GAAyBluZ,EAAMhE,EAAOihY,GACpCsxB,EAAuBjyO,GAAoB71H,EAAY6nW,IACzD76W,EAAO+6W,gBAAkB9lS,EAAOjiE,KAAgB85S,GAAY6tD,IAAgBZ,GAAO1jW,GAAS0jE,EAAK4gS,EAAaE,GAAYC,KAC5H/gS,EAAIliC,SAASorC,EAAK43R,EAAW,IAE/BD,GAAiB,CAAI,IAEnBA,GACFF,GAAkC3gS,EAAKkJ,EACzC,EAcI+3R,GAA2B,CAAC72G,EAAInkQ,EAAQwpV,EAAMp4X,EAAMupZ,KACxD,MAAM5gS,EAAMoqL,EAAGpqL,IACT+4R,EAAepG,GAAavoG,GAC5B35S,EAAS25S,EAAG35S,OAClB,GAAIo9S,GAAe5nQ,IAAW6xT,GAAyBrnW,EAAQw1C,EAAO+mI,SAAWyqL,GAAmBhnW,EAAQ4G,IAASA,EAAK8L,gBAAkBinS,EAAG33M,UAE7I,OADA+2S,GAAWp/F,EAAI/yS,EAAM4uC,GACd45W,GAAa1xV,UAEtB,IAAKloB,EAAOi7W,iBAAmB7pZ,GAA+C,UAAvC2oH,EAAIkuP,yBAAyB72W,GAClE,OAAOwoZ,GAAaljC,OAEtB,GAAItlX,IAASwjZ,GAAU76R,EAAK3oH,EAAM4uC,KAxFL,EAAC5uC,EAAM4uC,IAAWA,EAAO01I,OAA2B,MAAlBtkL,EAAK4oH,SAwFtBkhS,CAAuB9pZ,EAAM4uC,GACzE,OAAO45W,GAAaljC,OAEtB,MAAMzzP,EAAM7xH,EACN+pZ,EAAqBn7W,EAAOo7W,oBAClC,GAAIxzG,GAAe5nQ,IAA6B,QAAlBA,EAAO8b,QAAoBsrS,EAAU+zD,GAAqB,CACtF,MAAME,EAAkB5zD,EAAS1tO,EAAIqrP,WAAWniP,IAAMhI,GAAQxD,EAAW0jS,EAAoBlgS,EAAK1uH,KAAK1C,iBAGvG,GAFAkwH,EAAIktP,iBAAiBhkP,GACrBskO,EAAO8zD,GAAiBpgS,GAAQlB,EAAIyxE,UAAUvoE,EAAKhI,EAAK1uH,KAAM0uH,EAAK1yH,SAC/D8yZ,EAAgB5lZ,OAAS,EAC3B,OAAOmkZ,GAAanzN,OAAO,OAE/B,CACA,GAAsB,QAAlBzmJ,EAAO8b,OAAkB,CAC3B4qI,GAAa3sE,EAAKkJ,EAAKjjF,EAAQwpV,EAAMmxB,GACrCb,GAAO95W,EAAOxzC,YAAY,CAACjE,EAAOgE,KAChC,MACEA,KAAM+7P,EACN//P,MAAOggQ,GACLkyJ,GAAyBluZ,EAAMhE,EAAOihY,GAC1C,GAAIxpV,EAAO+6W,gBAAkB9lS,EAAOszI,KAAeukG,GAAY6tD,IAAgBZ,GAAOhgS,EAAI6iB,UAAU+9Q,EAAaryJ,GAAWC,GAAY,CACtI,GAAiB,UAAbD,EAAsB,CACxB,MAAMjsM,EAAe09D,EAAI6iB,UAAU3Z,EAAKqlI,GACxC,GAAIjsM,EAAc,CAChB,IAAIi/V,EAAW,GAMf,GALA/zD,EAAOlrS,EAAa/wD,MAAM,QAAQ0lL,IAC5B,WAAWxlL,KAAKwlL,KAClBsqO,IAAaA,EAAW,IAAM,IAAMtqO,EACtC,IAEEsqO,EAEF,YADAvhS,EAAIyxE,UAAUvoE,EAAKqlI,EAAUgzJ,EAGjC,CACF,CAIA,GAHIzB,GAAYruZ,KAAK88P,IACnBrlI,EAAInjH,gBAAgB,YAAcwoP,GAEnB,UAAbA,GAAwBhgF,GAAe,CAAC,MAAhBA,CAAuBrlD,IAAiD,SAAzClJ,EAAI1jE,SAAS4sE,EAAK,mBAG3E,OAFAA,EAAInjH,gBAAgBwoP,QACpBvuI,EAAIliC,SAASorC,EAAK,kBAAmB,QAGtB,UAAbqlI,GACFrlI,EAAInjH,gBAAgB,aAEtBmjH,EAAInjH,gBAAgBwoP,EACtB,KAEFwxJ,GAAO95W,EAAOh+B,SAASzZ,IACrBA,EAAQghY,GAAYhhY,EAAOihY,GACtB18B,GAAY6tD,KAAgB5gS,EAAIytP,SAASmzC,EAAapyZ,IACzDwxH,EAAI23M,YAAYzuM,EAAK16H,EACvB,IAEF,MAAMqyH,EAAQb,EAAIqrP,WAAWniP,GAC7B,IAAK,IAAI/3G,EAAI,EAAGA,EAAI0vG,EAAMnlH,OAAQyV,IAAK,CACrC,MAAMo9O,EAAW1tI,EAAM1vG,GAAG8uG,SAC1B,IAAK84R,EAAalG,oBAAoBtkJ,GACpC,OAAOsxJ,GAAaljC,MAExB,CACF,CACA,MAAsB,SAAlB12U,EAAO8b,QACTynV,GAAWp/F,EAAIlhL,EAAKjjF,GACb45W,GAAa1xV,WAEf0xV,GAAaljC,MAAM,EAgBtB6kC,GAA4B,CAACnhR,EAAQp6F,EAAQwpV,EAAM92V,IAAUsoX,GAAyB5gR,EAAQp6F,EAAQwpV,EAAM92V,EAAOA,GAAOwjF,KAAK9uG,EAASsrB,IAAQ8oX,IACnIphR,EAAOrgB,IAAIiiE,iBACnBz6J,YAAYmR,GACd0nG,EAAOrgB,IAAI0sE,OAAO/zJ,EAAO8oX,KAC/Bp0Y,EAAS,OAuCNq0Y,GAAuB,CAACt3G,EAAI53S,EAAMi9X,EAAMp4X,EAAMqjZ,KAClD,MAAMjpB,EAAarnF,EAAG9rR,UAAUvwB,IAAIyE,GAC9ByzC,EAASwrV,EAAW,GACpBzxQ,EAAMoqL,EAAGpqL,IACTygB,EAAY2pK,EAAG3pK,UACfkhR,EAAoBzmW,IACxB,MAAM0mW,EA/Da,EAACvhR,EAAQnlF,EAAW1oD,EAAMi9X,EAAMirB,KACrD,IAAIkH,EAWJ,OAVI1mW,EAAUnzB,YACZylU,EAAOuiC,GAAa1vP,EAAOrgB,IAAK9kE,EAAUnzB,YAAYjoB,WAAWy1C,IAC/D,IAAKqsW,GAAc7uD,GAAYx9S,IAAyB,WAAdA,EAAOp2B,IAAiC,SAAdo2B,EAAOp2B,GAAe,CACxF,MAAM8mB,EAAS20W,GAAUv6Q,EAAQ9qF,EAAQ/iD,EAAMi9X,EAAMirB,GACjDz0W,IAA2B,IAAjBA,EAAO10C,QACnBqwZ,EAAarsW,EAEjB,KAGGqsW,CAAU,EAmDIC,CAAez3G,EAAIlvP,EAAW1oD,EAAMi9X,EAAMirB,GAC7D,MA7CiB,EAACr6Q,EAAQoxP,EAAYmwB,EAAY1mW,EAAWpsD,EAAQyC,EAAO00C,EAAQwpV,KACtF,IAAIzwX,EAAI+/I,EACR,IAAI+iQ,EACAC,EACJ,MAAM/hS,EAAMqgB,EAAOrgB,IACnB,GAAI4hS,EAAY,CACd,MAAMI,EAAmBJ,EAAW75X,WACpC,IAAK,IAAIwtB,EAAS2F,EAAUnzB,WAAYwtB,GAAUA,IAAWysW,EAAkBzsW,EAASA,EAAOxtB,WAAY,CACzG,IAAI4Q,EAAQqnF,EAAIrnF,MAAM4c,GAAQ,GAC9B,IAAK,IAAIpkC,EAAI,EAAGA,EAAIsgX,EAAW/1X,SAC7Bi9B,EAAQ6oX,GAA0BnhR,EAAQoxP,EAAWtgX,GAAIs+W,EAAM92V,GACjD,OAAVA,GAFiCxnB,KAMnCwnB,IACEmpX,GACFnpX,EAAMnR,YAAYs6X,GAEfC,IACHA,EAAappX,GAEfmpX,EAAYnpX,EAEhB,EACIpnC,GAAW00C,EAAOg8W,OAAUjiS,EAAI2gB,QAAQihR,KAC1C1mW,EAAwD,QAA3Cl8C,EAAKghH,EAAIzuH,MAAMqwZ,EAAY1mW,UAA+B,IAAPl8C,EAAgBA,EAAKk8C,GAEnF4mW,GAAaC,IACc,QAA5BhjQ,EAAKjwJ,EAAOi5B,kBAA+B,IAAPg3H,GAAyBA,EAAGn7B,aAAak+R,EAAWhzZ,GACzFizZ,EAAWv6X,YAAY14B,GACnB++S,GAAe5nQ,IACjBs5W,GAAcl/Q,EAAQp6F,EAAQwpV,EAAMqyB,GAG1C,CACA,OAAO5mW,CAAS,EASPgnW,CAAa93G,EAAIqnF,EAAYmwB,EAAY1mW,EAAWA,GAAW,EAAMjV,EAAQwpV,EAAK,EAGrF0yB,EAAqB9qZ,GAAQqlH,EAAO+0Q,GAAY1yR,GAAOqjT,GAAiBh4G,EAAIrrM,EAAK0wR,EAAMp4X,EAAMA,KAC7F2hK,EAAU3hK,IACd,MAAMmtH,EAAW34H,GAAKwL,EAAKoqH,YAErB4gS,EADUF,EAAmB9qZ,IACGqlH,EAAO+0Q,GAAY7lW,GAAKivX,GAAU76R,EAAK3oH,EAAMu0B,KAC7E7D,EAAa1wB,EAAK0wB,WAIxB,IAHKs6X,GAAsBhnS,EAActzF,IAAe2oW,GAAuBzqV,IAC7Ek8W,EAAmBp6X,GAEjBke,EAAO4+E,MACLL,EAAS9oH,OACX,IAAK,IAAIyV,EAAI,EAAGA,EAAIqzG,EAAS9oH,OAAQyV,IACnC6nJ,EAAQx0C,EAASrzG,IASvBq8U,EALwB,CACtB,YACA,eACA,aAEsBsiC,IAClB/8B,GAAY17V,IAAS+yS,EAAGpqL,IAAI1jE,SAASjlD,EAAM,qBAAuBy4X,GAAcz4X,EAAK0wB,YAAc8nW,GAAkB7vQ,EAAK3oH,EAAK0wB,cAAgB+nW,GACjJsyB,GAAiBh4G,EAAI,CACnBvlL,MAAM,EACN2tC,OAAO,EACPwa,OAAQ,OACRvzH,OAAQ,CAAE6oW,eAAgBxyB,SACzB7/X,EAAWoH,EAChB,GACA,EAEEktH,EAAS93H,IACb,MAAM4K,EAAO2oH,EAAIjyH,IAAItB,EAAQ,SAAW,QACxC,GAAI4K,EAAM,CACR,IAAIi7I,EAAMj7I,EAAK5K,EAAQ,aAAe,aAQtC,MA5CyB4K,IAAQ01X,GAAiB11X,IAAS07V,GAAY17V,KAAsB,WAAZA,EAAK8nB,IAA+B,SAAZ9nB,EAAK8nB,IAqC1GojY,CAAqBjwQ,KACvBA,EAAMA,EAAI7lJ,EAAQ,aAAe,cAE/B6mW,GAAShhN,IAA4B,IAApBA,EAAIp0I,KAAKxC,SAC5B42I,EAAM7lJ,EAAQ4K,EAAKisH,iBAAmBjsH,EAAKksH,YAAclsH,EAAKksH,aAAelsH,EAAKisH,iBAEpFtD,EAAIj+D,OAAO1qD,GAAM,GACVi7I,CACT,CACE,OAAO,IACT,EAEIkwQ,EAAiBx9P,IACrB,IAAIiN,EACAE,EACAwqP,EAAc1qB,GAAUjyQ,EAAKglC,EAAKysO,EAAYzsO,EAAI0N,WACtD,GAAIzsH,EAAO10C,MAAO,CAIhB,GAHAorZ,EAAcprZ,GAAMorZ,GACpB1qP,EAAiBugB,GAAa43H,EAAIuyG,GAAa,GAC/CxqP,EAAeqgB,GAAa43H,EAAIuyG,GAC5B1qP,IAAmBE,EAAc,CAGnC,GAFAF,EAAiBkuP,GAAwBluP,GAAgB,GACzDE,EAAeguP,GAAwBhuP,GAAc,GACjD8tP,GAAsBjgS,EAAKiyC,EAAgBE,GAAe,CAC5D,MAAMx0I,EAASo+F,EAASlwH,KAAKomK,EAAehuC,YAAYrH,MAAMq1C,GAM9D,OALA0vP,EAAkBtB,GAAiBrgS,EAAKriG,GAAQ,EAAM,OAAQ,CAC5D,GAAM,SACN,gBAAiB,mBAEnB4mG,GAAO,EAET,CACA,GAAI07R,GAAsBjgS,EAAKmyC,EAAcF,GAAiB,CAC5D,MAAMt0I,EAASo+F,EAASlwH,KAAKsmK,EAAasuB,WAAW7jE,MAAMu1C,GAM3D,OALAwvP,EAAkBtB,GAAiBrgS,EAAKriG,GAAQ,EAAO,OAAQ,CAC7D,GAAM,OACN,gBAAiB,mBAEnB4mG,GAAO,EAET,CACA0tC,EAAiBytC,GAAO1/E,EAAKiyC,EAAgB,OAAQ,CACnD,GAAM,SACN,gBAAiB,aAEnBE,EAAeutC,GAAO1/E,EAAKmyC,EAAc,OAAQ,CAC/C,GAAM,OACN,gBAAiB,aAEnB,MAAMmnN,EAASt5P,EAAIilC,YACnBq0N,EAAOhoN,cAAcW,GACrBqnN,EAAO/nN,aAAaY,GACpBggO,GAAOnyQ,EAAKs5P,GAAQliX,IAClBo2V,EAAOp2V,GAAOqT,IACPsiX,GAAiBtiX,IAAOsiX,GAAiBtiX,EAAEsd,aAC9C45X,EAAkBl3Y,EACpB,GACA,IAEJk3Y,EAAkB1vP,GAClB0vP,EAAkBxvP,GAClBF,EAAiB1tC,GAAO,GACxB4tC,EAAe5tC,GACjB,MACE0tC,EAAiBE,EAAewvP,EAAkB1vP,GAEpD0qP,EAAY1qP,eAAiBA,EAAelqI,WAAakqI,EAAelqI,WAAakqI,EACrF0qP,EAAYzqP,YAAclyC,EAAI6qE,UAAU54B,GACxC0qP,EAAYxqP,aAAeA,EAAapqI,WAAaoqI,EAAapqI,WAAaoqI,EAC/EwqP,EAAYvqP,UAAYpyC,EAAI6qE,UAAU14B,GAAgB,CACxD,CACAggO,GAAOnyQ,EAAK28R,GAAavlZ,IACvBo2V,EAAOp2V,EAAO4hK,EAAQ,GACtB,EAEJ,GAAI3hK,EAAJ,CACE,GAAIg3X,GAAOh3X,GAAO,CAChB,MAAM2tJ,EAAMhlC,EAAIilC,YAChBD,EAAIqM,eAAeh6J,GACnB2tJ,EAAIwM,YAAYn6J,GAChBmrZ,EAAex9P,EACjB,MACEw9P,EAAenrZ,GAEjB+9X,GAAiBhrF,EAAI53S,EAAM6E,EAAMo4X,EAEnC,MACKhvP,EAAU+8C,eAAkBqwH,GAAe5nQ,KAAWsnV,GAAmBnjF,GAAI1uS,OAIhF+gZ,GAAkBryG,EAAI53S,EAAMi9X,EAAMirB,IAHlCnsB,GAAkBnkF,GAAI,IAAM6jF,GAAY7jF,EAAIo4G,KAAiBz2N,GAAa8hH,GAAe5nQ,IAAWk1W,GAAQ/wG,EAAI53S,EAAMi9X,EAAM1jM,KAC5Hq+G,EAAGr7I,eA7RwB,EAAC1uB,EAAQ7tI,EAAMi9X,KAC/B,iBAATj9X,EACFg7V,EAAOuxD,GAA8B1+Q,EAAOI,YAAYgiD,IACtD+qK,EAAO8wD,IAAgB9rZ,GAAQ6tI,EAAOrgB,IAAIliC,SAAS2kG,EAAIjwL,EAAM,MAC7DmuZ,GAAkCtgR,EAAOrgB,IAAKyiE,EAAG,IAGnDg8N,GAA0Bp+Q,EAAO/hH,UAAW9rB,GAAMkpC,MAAK+mX,IACrDj1D,EAAOuxD,GAA8B1+Q,EAAOI,YAAYgiD,GAAMkK,GAAatsD,EAAOrgB,IAAKyiE,EAAIggO,EAAOhzB,EAAM,OAAM,GAElH,EAuRAizB,CAAuBt4G,EAAI53S,EAAMi9X,GACjC2F,GAAiBhrF,EAAI53S,EAAM6E,EAAMo4X,EAAK,EAElCkzB,GAAiB,CAACv4G,EAAI53S,EAAMi9X,EAAMp4X,EAAMqjZ,MACxCrjZ,GAAQ+yS,EAAG3pK,UAAUme,eACvB8iQ,GAAqBt3G,EAAI53S,EAAMi9X,EAAMp4X,EAAMqjZ,EAC7C,EAEI0H,GAAmB,CAAC/hR,EAAQp6F,EAAQwpV,EAAMp4X,EAAMupZ,IAC7CK,GAAyB5gR,EAAQp6F,EAAQwpV,EAAMp4X,EAAMupZ,GAAazkS,KAAKN,GAAO4lS,IACnFphR,EAAOrgB,IAAI0sE,OAAOr1L,EAAMoqZ,IACjB,IACN3lS,GAGC8mS,GAAShoS,GAAMl/E,KA+BfmnX,GAAoB,CAACxiR,EAAQoxP,EAAYhC,EAAMp4X,KACnDurZ,GAAOnxB,GAAYxrV,IACb4nQ,GAAe5nQ,IACjB28W,GAAOviR,EAAOrgB,IAAIrsH,OAAOsyC,EAAO+mI,OAAQ31K,IAAO2vH,IACzCi4R,GAAcj4R,IAChBo7R,GAAiB/hR,EAAQp6F,EAAQwpV,EAAMzoQ,EAAO/gF,EAAOusH,MAAQxrC,EAAQ,KACvE,IAzfiB,EAAChH,EAAK/5E,EAAQ5uC,KACrC,GAAI4uC,EAAO68W,mBAAoB,CAC7B,MAAM3qZ,EAAW8tC,EAAO01I,MAAQ,WAAa,IAC7CqjO,GAAOh/R,EAAIrsH,OAAOwE,EAAUd,IAAOo8Y,IAC7BwL,GAAcxL,IAAczzR,EAAI4+B,WAAW60P,IAC7CuL,GAAO/4W,EAAOwT,QAAQ,CAAC2uD,EAAQ51G,KAC7BwtH,EAAIliC,SAAS21T,EAAWjhZ,EAAM,GAAG,GAErC,GAEJ,GAkfEuwZ,CAAiB1iR,EAAOrgB,IAAK/5E,EAAQ5uC,EAAK,GAC1C,EAqBE2rZ,GAASpoS,GAAMl/E,KAafunX,GAAc,CAACjjS,EAAKkJ,EAAKjjF,EAAQwpV,KAIrC,GAHAuzB,GAAO/8W,EAAOwT,QAAQ,CAACjrD,EAAOgE,KAC5BwtH,EAAIliC,SAASorC,EAAK12H,EAAMg9X,GAAYhhY,EAAOihY,GAAM,IAE/CxpV,EAAOwT,OAAQ,CACjB,MAAMypW,EAAWljS,EAAI6iB,UAAU3Z,EAAK,SAChCg6R,GACFljS,EAAIyxE,UAAUvoE,EAAK,iBAAkBg6R,EAEzC,GAEIC,GAAoB,CAAC/4G,EAAI53S,EAAMi9X,EAAMp4X,KACzC,MAAMo6X,EAAarnF,EAAG9rR,UAAUvwB,IAAIyE,GAC9ByzC,EAASwrV,EAAW,GACpBj0M,GAAenmL,GAAQ+yS,EAAG3pK,UAAU+8C,cACpCx9D,EAAMoqL,EAAGpqL,IACTygB,EAAY2pK,EAAG3pK,UACf2iR,EAAmB,CAACl6R,EAAKnqB,EAAM94D,KAC/Bp2B,EAAWkvF,EAAIskT,WACjBtkT,EAAIskT,SAASn6R,EAAKnqB,EAAK0wR,EAAMp4X,GAE/B4rZ,GAAYjjS,EAAKkJ,EAAKnqB,EAAK0wR,GAC3BuzB,GAAOjkT,EAAItsG,YAAY,CAACjE,EAAOgE,KAC7BwtH,EAAIyxE,UAAUvoE,EAAK12H,EAAMg9X,GAAYhhY,EAAOihY,GAAM,IAEpDuzB,GAAOjkT,EAAI92F,SAASzZ,IAClB,MAAM2iO,EAAWq+J,GAAYhhY,EAAOihY,GAC/BzvQ,EAAIytP,SAASvkP,EAAKioG,IACrBnxG,EAAIytD,SAASvkD,EAAKioG,EACpB,GACA,EAEEmyL,EAAiB,CAAC7xB,EAAYp6X,KAClC,IAAI0tD,GAAQ,EAkBZ,OAjBAi+V,GAAOvxB,GAAYxrV,KACZ8nQ,GAAiB9nQ,KAGe,UAAjC+5E,EAAI4rE,mBAAmBv0L,KAAsB4uC,EAAOi7W,qBAGpD7lS,EAAcp1E,EAAOysH,YAAczsH,EAAOysH,YAAc8qB,OAGxDx9D,EAAI2G,GAAGtvH,EAAM4uC,EAAO9tC,YAAckzX,GAAYh0X,MAChD+rZ,EAAiB/rZ,EAAM4uC,GACvB8e,GAAQ,GACD,QAIJA,CAAK,EAERw+V,EAAoB7wB,IACxB,GAAIz3Q,EAASy3Q,GAAW,CACtB,MAAM8wB,EAAUxjS,EAAIn7G,OAAO6tX,GAE3B,OADA0wB,EAAiBI,GACVA,CACT,CACE,OAAO,IACT,EAEIC,EAAgB,CAACzjS,EAAKglC,EAAK0+P,KAC/B,MAAMhwB,EAAc,GACpB,IAAIrxP,GAAkB,EACtB,MAAMqwP,EAAWzsV,EAAO+mI,QAAU/mI,EAAOgmJ,MACnCu3N,EAAUD,EAAkB7wB,GAC5BixB,EAA0BtsZ,GAjgLN4uC,IAAU6nQ,GAAc7nQ,KAA8B,IAAnBA,EAAOi+E,QAigL5B0/R,CAAsB39W,IAAW20W,GAAUxwG,EAAI/yS,EAAM7E,EAAMi9X,GAC7Fo0B,EAAiB,CAACxsZ,EAAM0yH,EAAY+5R,KACxC,MAAMC,EAlgLqB99W,IAAU6nQ,GAAc7nQ,KAA8B,IAAnBA,EAAOi+E,QAkgLnC8/R,CAAyB/9W,IAAWipV,GAAc9kF,EAAG35S,OAAQ4G,IAAS45G,GAAQm5L,EAAIrgL,EAAY2oQ,GAChI,OAAOoxB,GAAwBC,CAAyB,EAU1D5xB,GAAOnyQ,EAAKglC,GAAK5tJ,IACf,IAAI6sZ,EACJ,MAAMjrP,EAAU3hK,IACd,IAAIg4S,GAA0B,EAC1B60G,EAAsB7hR,EACtB8hR,GAA4B,EAChC,MAAMp8X,EAAa1wB,EAAK0wB,WAClBgiG,EAAahiG,EAAWk4F,SAASnwH,cACjCs0Z,EAAuBpkS,EAAI4rE,mBAAmBv0L,GAChDgkH,EAAc+oS,KAChBF,EAAsB7hR,EACtBA,EAA2C,SAAzB+hR,EAClB/0G,GAA0B,EAC1B80G,EAA4B/0B,GAAuBhlF,EAAI/yS,IAEzD,MAAMysZ,EAAuBzhR,IAAoBgtK,EACjD,GAAIqkD,GAAOr8V,KA5GC,EAACgpI,EAAQp6F,EAAQ5uC,EAAM0yH,KACzC,GAAIi3P,GAAoB3gP,IAAWwtK,GAAe5nQ,IAAW5uC,EAAK0wB,WAAY,CAC5E,MAAMs8X,EAAwB7kD,GAAyBn/N,EAAO5vI,QACxD6zZ,EAAsB7wP,GAAQryC,GAAaS,QAAQxqH,IAAOo8J,GAAW43N,GAAY53N,EAAQzzC,OAC/F,OAAOsS,GAAkB+xR,EAAuBt6R,IAAeqrO,GAAY/0N,EAAO5vI,OAAQ4G,EAAK0wB,WAAY,CACzGssU,WAAW,EACXC,aAAa,MACRgwD,CACT,CACE,OAAO,CACT,EAkG2BC,CAAYn6G,EAAInkQ,EAAQ5uC,EAAM0yH,GAKjD,OAJAk6R,EAAiB,UACbn2G,GAAc7nQ,IAChB+5E,EAAIj+D,OAAO1qD,IAIf,GAAIssZ,EAAwBtsZ,GAC1B4sZ,EAAiB,SADnB,CAIA,GAAIJ,EAAexsZ,EAAM0yH,EAAY+5R,GAAuB,CAC1D,MAAM56R,EAAMlJ,EAAI0sE,OAAOr1L,EAAMq7X,GAI7B,OAHA0wB,EAAiBl6R,GACjBwqQ,EAAYrlY,KAAK66H,QACjB+6R,EAAiB,KAEnB,CACA,GAAIl2G,GAAiB9nQ,GAAS,CAC5B,IAAI8e,EAAQu+V,EAAe7xB,EAAYp6X,GAIvC,IAHK0tD,GAASs2D,EAActzF,IAAe2oW,GAAuBzqV,KAChE8e,EAAQu+V,EAAe7xB,EAAY1pW,KAEhC8lR,GAAe5nQ,IAAW8e,EAE7B,YADAk/V,EAAiB,KAGrB,CACI5oS,EAAcmoS,IApDF,EAACnsZ,EAAM0yH,EAAY+5R,EAAsBK,KAC3D,MAAMlkS,EAAW5oH,EAAK4oH,SAASnwH,cACzB00Z,EAAkBvzS,GAAQm5L,EAAIsoF,EAAUzyQ,IAAahP,GAAQm5L,EAAIrgL,EAAY2oQ,GAC7E59B,GAAY4uD,GAAgBpwD,GAASj8V,IAASkzL,GAAOlzL,EAAK6G,MAC1DumZ,EAAUp5B,GAAYh0X,GACtBqtZ,GAA0B72G,GAAe5nQ,KAAY+5E,EAAI2gB,QAAQtpI,GACvE,OAAQysZ,GAAwBK,IAA8BK,IAAoB1vD,IAAa2vD,GAAWC,CAAsB,EA8ChGC,CAAYttZ,EAAM0yH,EAAY+5R,EAAsBK,IAC3EF,IACHA,EAAiBjkS,EAAIrnF,MAAM6qX,GAAS,GACpCz7X,EAAW67F,aAAaqgS,EAAgB5sZ,GACxCq8X,EAAYrlY,KAAK41Z,IAEfE,GAA6B90G,IAC/BhtK,EAAkB6hR,GAEpBD,EAAez8X,YAAYnwB,KAE3B4sZ,EAAiB,KACjBz2D,EAAO3hW,GAAKwL,EAAKoqH,YAAau3C,GAC1Bq2I,IACFhtK,EAAkB6hR,GAEpBD,EAAiB,KAlCnB,CAmCA,EAEFz2D,EAAOp2V,EAAO4hK,EAAQ,KAEH,IAAjB/yH,EAAO01I,OACT6xK,EAAOkmC,GAAar8X,IAClB,MAAM2hK,EAAU3hK,IACQ,MAAlBA,EAAK4oH,UACPmjS,EAAiB/rZ,EAAM4uC,GAEzBunT,EAAO3hW,GAAKwL,EAAKoqH,YAAau3C,EAAQ,EAExCA,EAAQ3hK,EAAK,IAGjBm2V,EAAOkmC,GAAar8X,IAClB,MAmBMutZ,EAnBgBvtZ,KACpB,IAAI8qC,EAAQ,EAMZ,OALAqrT,EAAOn2V,EAAKoqH,YAAYpqH,IAnsLNA,IACjBgkH,EAAchkH,IAASi8V,GAASj8V,IAAyB,IAAhBA,EAAKqE,OAmsLxCmpZ,CAAkBxtZ,IAAU01X,GAAiB11X,IAChD8qC,GACF,IAEKA,CAAK,EAYK2iX,CAAcztZ,KAC5Bq8X,EAAYh4X,OAAS,IAAMskH,EAAI2gB,QAAQtpI,IAAyB,IAAfutZ,GAIlD/2G,GAAe5nQ,IAAW6nQ,GAAc7nQ,IAAWA,EAAOi+E,WACvDj+E,EAAOusH,OAAwB,IAAfoyP,IACnBvtZ,EAjBgBA,KAClB,MAAM0tZ,EAAeruN,GAAOr/L,EAAKoqH,WAAY6sQ,IAAiBp8X,QAAO80H,GAA2C,UAAlChH,EAAI4rE,mBAAmB5kE,IAAsB6zR,GAAU76R,EAAKgH,EAAO/gF,KACjJ,OAAO8+W,EAAa93Z,KAAI+5H,IACtB,MAAMruF,EAAQqnF,EAAIrnF,MAAMquF,GAAO,GAI/B,OAHAo8R,EAAiBzqX,GACjBqnF,EAAI3wH,QAAQspC,EAAOthC,GAAM,GACzB2oH,EAAIj+D,OAAOilE,GAAO,GACXruF,CAAK,IACXikF,MAAMvlH,EAAK,EASL2tZ,CAAY3tZ,IAErBwrZ,GAAkBz4G,EAAIqnF,EAAYhC,EAAMp4X,GAzNvB,EAACgpI,EAAQp6F,EAAQzzC,EAAMi9X,EAAMp4X,KACpD,MAAM0wB,EAAa1wB,EAAK0wB,WACpB6yX,GAAUv6Q,EAAQt4G,EAAYv1B,EAAMi9X,IAClC2yB,GAAiB/hR,EAAQp6F,EAAQwpV,EAAMp4X,IAIzC4uC,EAAOg/W,oBAAsBl9X,GAC/Bs4G,EAAOrgB,IAAIwgB,UAAUz4G,GAAYwtB,KAC3BqlW,GAAUv6Q,EAAQ9qF,EAAQ/iD,EAAMi9X,KAClC2yB,GAAiB/hR,EAAQp6F,EAAQwpV,EAAMp4X,IAChC,IAKb,EA0MM6tZ,CAAiB96G,EAAInkQ,EAAQzzC,EAAMi9X,EAAMp4X,GApPT,EAAC2oH,EAAK/5E,EAAQwpV,EAAMp4X,KAC1D,GAAI4uC,EAAOwT,QAAUxT,EAAOwT,OAAO//B,gBAAiB,CAClD,MAAMyrY,EAAczF,GAAS1/R,EAAK,YAClCy/R,GAAqBpoZ,GAAM6xH,GAAOi8R,EAAYj8R,IAAQlJ,EAAI4+B,WAAW11B,IAAMy2R,GAAW3/R,EAAK,kBAAmBwvQ,GAAYvpV,EAAOwT,OAAO//B,gBAAiB+1W,IAC3J,GAiPM21B,CAAgCplS,EAAK/5E,EAAQwpV,EAAMp4X,GArQtB,EAAC2oH,EAAK/5E,EAAQwpV,EAAMp4X,KACvD,MAAMguZ,EAAiC56Y,IACrC,GAAI21G,GAAc31G,IAAMsoV,GAAYtoV,EAAEsd,aAAei4F,EAAI4+B,WAAWn0I,GAAI,CACtE,MAAM66Y,EAAuBz1B,GAAkB7vQ,EAAKv1G,EAAEsd,YAClDi4F,EAAI1jE,SAAS7xC,EAAG,UAAY66Y,EAC9BtlS,EAAIliC,SAASrzE,EAAG,kBAAmB66Y,GAC1BtlS,EAAI1jE,SAAS7xC,EAAG,qBAAuB66Y,GAChDtlS,EAAIliC,SAASrzE,EAAG,kBAAmB,KAEvC,GAEEw7B,EAAOwT,SAAWxT,EAAOwT,OAAO7jC,OAASqwB,EAAOwT,OAAO6oW,kBACzD1nS,GAAMm1O,KAAK14V,EAAMguZ,EAAgC,cACjDA,EAA+BhuZ,GACjC,EAwPMkuZ,CAA6BvlS,EAAK/5E,EAAQwpV,EAAMp4X,GAhPpC,EAAC2oH,EAAK/5E,EAAQwpV,EAAMp4X,KACtC,GAAIw2S,GAAe5nQ,KAA8B,QAAlBA,EAAO+mI,QAAsC,QAAlB/mI,EAAO+mI,QAAmB,CAClF,MAAMm4O,EAAczF,GAAS1/R,EAAK,YAClCy/R,GAAqBpoZ,GAAM6xH,GAAOi8R,EAAYj8R,IAAQlJ,EAAI4+B,WAAW11B,IAAMy2R,GAAW3/R,EAAK,WAAY,KACvG,MAAMwlS,EAAwB93D,EAAS1tO,EAAIrsH,OAAyB,QAAlBsyC,EAAO+mI,OAAmB,MAAQ,MAAO31K,GAAO2oH,EAAI4+B,YACtG5+B,EAAIj+D,OAAOyjW,GAAuB,EACpC,GA2OMC,CAAYzlS,EAAK/5E,EAAQwpV,EAAMp4X,GAC/BkoZ,GAAcn1G,EAAInkQ,EAAQwpV,EAAMp4X,IAZhC2oH,EAAIj+D,OAAO1qD,GAAM,EAanB,GACA,EAEE0rL,EAAasrM,GAAOh3X,GAAQA,EAAOopI,EAAUyuC,UACnD,GAA2C,UAAvClvD,EAAI4rE,mBAAmB7I,KAA4BqsM,GAAuBhlF,EAAIrnH,GAIhF,OAFAugO,EAAe7xB,EADfp6X,EAAO0rL,QAEPoyM,GAAgB/qF,EAAI53S,EAAM6E,EAAMo4X,GAGlC,GAAIxpV,EAAQ,CACV,GAAI5uC,EACF,GAAIg3X,GAAOh3X,IACT,IAAKisZ,EAAe7xB,EAAYp6X,GAAO,CACrC,MAAM2tJ,EAAMhlC,EAAIilC,YAChBD,EAAIqM,eAAeh6J,GACnB2tJ,EAAIwM,YAAYn6J,GAChBosZ,EAAczjS,EAAKiyQ,GAAUjyQ,EAAKglC,EAAKysO,IAAa,EACtD,OAEAgyB,EAAczjS,EAAK3oH,GAAM,QAGtBmmL,GAAgBqwH,GAAe5nQ,KAAWsnV,GAAmBnjF,GAAI1uS,OAx/BnD,EAAC2kI,EAAQ7tI,EAAMi9X,KACtC,IAAI3Z,EACJ,MAAMr1O,EAAYJ,EAAOI,UACnBgxP,EAAapxP,EAAO/hH,UAAUvwB,IAAIyE,GACxC,IAAKi/X,EACH,OAEF,MAAM5lN,EAAeprC,EAAUwjC,SAC/B,IAAI95H,EAAS0hI,EAAa3Z,YAC1B,MACMt7I,EADYi1J,EAAa5Z,eACRp0B,UACvBi4O,EAAiBwV,GAAwBjrP,EAAO5tC,UAAWguC,EAAUC,YACrE,MAAMglR,EAAgB,gCACtB,GAAI9uY,GAAQuzB,EAAS,GAAKA,EAASvzB,EAAKlb,QAAUgqZ,EAAcj0Z,KAAKmlB,EAAKjnB,OAAOw6C,KAAYu7W,EAAcj0Z,KAAKmlB,EAAKjnB,OAAOw6C,EAAS,IAAK,CACxI,MAAMytI,EAAWn3C,EAAUo3C,cAC3BhM,EAAathB,UAAS,GACtB,IAAIvF,EAAMitO,GAAU5xP,EAAOrgB,IAAK6rD,EAAc4lN,GAC9CzsO,EAAMzzJ,GAAMyzJ,GACZ3kB,EAAO/hH,UAAU6L,MAAM33B,EAAMi9X,EAAMzqO,GACnCvkB,EAAUw3C,eAAeL,EAC3B,KAAO,CACL,IAAI2uM,EAAWzQ,EAAiB8lC,GAAkB9lC,GAAkB,KAC/DA,IAAgC,OAAbyQ,QAAkC,IAAbA,OAAsB,EAASA,EAASroX,QAAUy9Y,KArK/EtiW,EAsKcgnF,EAAOwK,SAtKNxzI,EAsKgBwkZ,IAAqB,GAAM77R,IAAxE81P,EArKGz8T,EAAc2uM,WAAW3wP,GAAM,GAsKlCkvX,EAAWzQ,EAAe7xP,WAC1B4nD,EAAa4uM,WAAW3E,GACxB3rU,EAAS,EACToyW,GAAsBl8Q,EAAQy1O,IAG9Bz1O,EAAO/hH,UAAU6L,MAAM33B,EAAMi9X,EAAM3Z,GAErCr1O,EAAUquB,kBAAkBy3N,EAAUp8U,EACxC,CAhLiB,IAACkP,EAAehiD,CAgLjC,EAi+BMsuZ,CAAiBv7G,EAAI53S,EAAMi9X,IAT3BhvP,EAAU0kB,OAAOpnG,GAAU0iF,EAAUwjC,WACrCsqN,GAAkBnkF,GAAI,KACpB6jF,GAAY7jF,GAAI,CAACv+H,EAAc+5O,KAC7B,MAAMjJ,EAAciJ,EAAO/5O,EAAeomN,GAAUjyQ,EAAK6rD,EAAc4lN,GACvEgyB,EAAczjS,EAAK28R,GAAa,EAAM,GACtC,GACD7gS,GACHsuL,EAAGr7I,eAIL0vP,GAA0Br0G,EAAG9rR,UAAW9rB,GAAMkpC,MAAK+mX,IACjDj1D,EAAOqxD,GAA0Bz0G,EAAG3pK,YAAYgiD,GAAMwgO,GAAYjjS,EAAKyiE,EAAIggO,EAAOhzB,IAAM,IAh3B1E,EAACj9X,EAAM6tI,KACvB0zD,GAAM8pN,GAAkBrrZ,IAC1Bg7V,EAAOqwD,GAAiBrrZ,IAAOm+E,IAC7BA,EAAK0vD,EAAO,GAEhB,EA82BEwlR,CAAcrzZ,EAAM43S,EACtB,CACA+qF,GAAgB/qF,EAAI53S,EAAM6E,EAAMo4X,EAAK,EAEjCq2B,GAAgB,CAACzlR,EAAQ7tI,EAAMi9X,EAAMp4X,MACrCA,GAAQgpI,EAAOI,UAAUme,eAC3BukQ,GAAkB9iR,EAAQ7tI,EAAMi9X,EAAMp4X,EACxC,EAGI0uZ,GAAUv3Z,GAASulM,GAAMvlM,EAAO,QAWhCw3Z,GAAkB3lR,GAAUA,EAAOI,UAAUC,WAC7CulR,GAAe,CAAC5lR,EAAQnd,EAASj9E,EAAQy0W,EAASjrB,IAgB/C9hC,EAAYzqO,GAfI7rH,IACrB,MAAM6uZ,EAAiB7lR,EAAO/hH,UAAUs8X,UAAUvjZ,EAAM4uC,EAAiB,OAATwpV,QAA0B,IAATA,EAAkBA,EAAO,CAAC,EAAGirB,GAC9G,OAAQt/R,EAAY8qS,EAAe,IAEb7uZ,KAClBkjZ,GAAiCl6Q,EAAQhpI,EAAM4uC,KAG5Cy0W,GACIr/R,EAAcglB,EAAO/hH,UAAUs8X,UAAUvjZ,EAAM4uC,EAAQwpV,GAAM,MAQtEtgN,GAAa,CAAC9uC,EAAQnX,KAC1B,MAAMr6H,EAAkB,OAARq6H,QAAwB,IAARA,EAAiBA,EAAM88R,GAAgB3lR,GACvE,OAAOqtN,EAASqiC,GAAa1vP,EAAOrgB,IAAKnxH,IAAUwI,GAAQ07V,GAAY17V,KAAU87V,GAAU97V,IAAM,EAE7F8uZ,GAA+B,CAAC9lR,EAAQnX,EAAKk9R,KACjD,MAAMljS,EAAUisD,GAAW9uC,EAAQnX,GACnC6kO,GAAOq4D,GAAqB,CAACloZ,EAAM+nC,KACjC,MAAMogX,EAAerpO,IACnB,MAAM3rL,EAAQ40Z,GAAa5lR,EAAQnd,EAASj9E,EAAQ+2I,EAAK09N,QAASqL,GAAQ/oO,GAAQA,EAAKyyM,UAAOx/X,GACxFyxI,EAAQrwI,EAAMirH,SACpB,GAAI0gE,EAAKvL,MAAM1jL,QAAU2zI,EAAO,CAC9Bs7C,EAAKvL,MAAMxjL,IAAIyzI,GACf,MAAMrqI,EAAOhG,EAAMurH,MAAMsM,GACrB68R,GAAQ/oO,GACVA,EAAK7mL,SAASurI,EAAO,CACnBrqI,OACA4uC,SACAi9E,YAGFsqO,EAAOxwK,EAAKtnK,WAAWvf,GAAYA,EAASurI,EAAO,CACjDrqI,OACA4uC,SACAi9E,aAGN,GAEFsqO,EAAO,CACLtvV,EAAKooZ,YACLpoZ,EAAKqoZ,gBACJF,GACH74D,EAAOtvV,EAAKsoZ,SAAUH,EAAa,GACnC,EA4DEI,GAAwB,CAACpmR,EAAQqmR,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,KA1DzE,EAACpvP,EAAQqmR,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,KACnF,MAAMk3B,EAAoBD,EAA0B34Z,MACpDy/V,EAAOh0R,EAAQjoE,MAAM,MAAM00C,IACzB,MAAM6jF,EAAQ7B,GAAM0+R,EAAmB1gX,GAAQ82E,YAAW,KACxD,MAAMxzD,EAAO,CACX+8V,YAAa,CACX70O,MAAOxX,IAAK,GACZygP,SAAS,EACThlY,UAAW,IAEb6wY,eAAgB,CACd90O,MAAOxX,IAAK,GACZygP,SAAS,EACThlY,UAAW,IAEb8wY,SAAU,IAGZ,OADAG,EAAkB1gX,GAAUsjB,EACrBA,CAAI,IAEP2xK,EAAa,KACjB,MAAMh4G,EAAUisD,GAAW9uC,GAC3B,OAAO4lR,GAAa5lR,EAAQnd,EAASj9E,EAAQy0W,EAASjrB,GAAMnzQ,QAAQ,EAEtE,GAAIlB,EAAYq0Q,GAAO,CACrB,MAAMm3B,EAAalM,EAAU5wR,EAAMw8R,YAAcx8R,EAAMy8R,eACvDK,EAAWlxY,UAAUrnB,KAAK8H,GACU,IAAhCywZ,EAAWlxY,UAAUha,QACvBkrZ,EAAWn1O,MAAMxjL,IAAIitO,IAEzB,MACEpxG,EAAM08R,SAASn4Z,KAAK,CAClBojL,MAAOxX,GAAKihE,KACZw/K,UACAjrB,OACAt5X,YAEJ,IAEFuwZ,EAA0Bz4Z,IAAI04Z,EAAkB,EAoBhDE,CAAaxmR,EAAQqmR,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,GACrE,CAAExtN,OAAQ,IAnBK,EAACykP,EAA2BltV,EAASrjE,KAC3D,MAAMwwZ,EAAoBD,EAA0B34Z,MACpDy/V,EAAOh0R,EAAQjoE,MAAM,MAAM00C,GAAUgiF,GAAM0+R,EAAmB1gX,GAAQvK,MAAKouF,IACzE68R,EAAkB1gX,GAAU,CAC1BqgX,YAAa,IACRx8R,EAAMw8R,YACT5wY,UAAWg4U,EAAS5jO,EAAMw8R,YAAY5wY,WAAW2M,GAAMA,IAAOlsB,KAEhEowZ,eAAgB,IACXz8R,EAAMy8R,eACT7wY,UAAWg4U,EAAS5jO,EAAMy8R,eAAe7wY,WAAW2M,GAAMA,IAAOlsB,KAEnEqwZ,SAAU94D,EAAS5jO,EAAM08R,UAAUjpX,GAAQA,EAAKpnC,WAAaA,IAC9D,MAEHuwZ,EAA0Bz4Z,IAAI04Z,EAAkB,EAIzBG,CAAgBJ,EAA2BltV,EAASrjE,KAcvE4wZ,GAAYnsS,GAAM+yK,QAClBq5H,GAAW,KACf,MAAMj1Z,EAAU,CAAC,EA8BjB,MAAO,CACLk1Z,UA9BgB,CAACz0Z,EAAM2D,KACvBq3V,EAAOu5D,GAAUv0Z,IAAOA,IACjBuhM,GAAMhiM,EAASS,KAClBT,EAAQS,GAAQ,CACdA,OACAkjB,UAAW,KAGf3jB,EAAQS,GAAMkjB,UAAUrnB,KAAK8H,EAAS,GACtC,EAsBF+wZ,WApBiB,IAAMp6Z,GAAOiF,GAqB9Bo1Z,aApBmB,CAAC30Z,EAAM2D,KAC1Bq3V,EAAOu5D,GAAUv0Z,IAAOA,IACtB,GAAIuhM,GAAMhiM,EAASS,GACjB,GAAI6oH,EAAcllH,GAAW,CAC3B,MAAMjE,EAASH,EAAQS,GACjB40Z,EAAe15D,EAASx7V,EAAOwjB,WAAWlL,GAAKA,IAAMrU,IACvDixZ,EAAa1rZ,OAAS,EACxBxJ,EAAOwjB,UAAY0xY,SAEZr1Z,EAAQS,EAEnB,aACST,EAAQS,EAEnB,GACA,EAMH,EAQG60Z,GAAuB,CAACC,EAAW7tW,EAAQ8tW,KAC/CD,EAAU50N,cAAc,QAAQt7L,IAC9Bo2V,EAAOp2V,GAAOC,IACZ,MAAMq6C,EAAQ+H,EAAO1lD,MAAMsD,EAAK6pH,KAAK,UAC/BtrG,EAAQve,EAAK6pH,KAAK,SAClBsmS,EAAOnwZ,EAAK6pH,KAAK,QACjBv1H,EAAO0L,EAAK6pH,KAAK,QACnBtrG,IACF87B,EAAM97B,MAAQA,GAEZ4xY,IACF91W,EAAM,eAAiB81W,GAErB77Z,GACFgjW,GAAMhjW,GAAM+vC,MAAK7mB,IACf68B,EAAM,aAAe61W,EAAU1yY,EAAM,EAAE,IAG3Cxd,EAAK7E,KAAO,OACZ6E,EAAK6pH,KAAK,QAASznE,EAAO8xF,UAAU75F,IAxBtB,EAACr6C,EAAMygC,KACzB01T,EAAO11T,GAAOtlC,IACZ6E,EAAK6pH,KAAK1uH,EAAM,KAAK,GACrB,EAsBEi1Z,CAAYpwZ,EAAM,CAChB,QACA,OACA,QACA,GACF,GACF,EAiBEqwZ,GAAa,CAACJ,EAAWjhP,EAAU51K,KACvC,IAAIuO,EACJ,MAAMy6C,EAAS2rT,KACX/+L,EAASshP,wBACXN,GAAqBC,EAAW7tW,EAAQmhE,GAAM+yK,QAAoD,QAA3C3uR,EAAKqnK,EAASuhP,+BAA4C,IAAP5oZ,EAAgBA,EAAK,KAnB3G,EAACsoZ,EAAW72Z,EAAQgpD,KAC1C6tW,EAAU50N,cAAc,UAAUt7L,IAChC,MAAMywZ,EAAgC,UAAhBp3Z,EAAOkG,KAC7B62V,EAAOp2V,GAAOC,IACZ,GAAIwwZ,EACFxwZ,EAAK7E,KAAO,QACP,CACL,MAAMk/C,EAAQ+H,EAAO1lD,MAAMsD,EAAK6pH,KAAK,UACrCxvE,EAAM,mBAAqB,eAC3Br6C,EAAK7E,KAAO,OACZ6E,EAAK6pH,KAAK,QAASznE,EAAO8xF,UAAU75F,GACtC,IACA,GACF,EAQFo2W,CAAgBR,EAAW72Z,EAAQgpD,EAAO,EAgBtCsuW,GAAeC,IACnB,MAAOrxZ,KAAS6U,GAAQw8Y,EAAIz2Z,MAAM,KAC5B2M,EAAOsN,EAAKld,KAAK,KACjB6C,EAAU,4BAA4BkmB,KAAK1gB,GACjD,GAAIxF,EAAS,CACX,MAAM82Z,EAA+B,YAAf92Z,EAAQ,GACxB+2Z,EAAgBD,EAVA/pZ,KACxB,MAAM/M,EAAU,qBAAqBkmB,KAAKnZ,GAC1C,OAAO/M,EAAUA,EAAQ,GAAK,EAAE,EAQQg3Z,CAAkBjqZ,GAAQkqZ,mBAAmBlqZ,GACnF,OAAO69G,EAAS/iH,KAAK,CACnBrC,KAAMxF,EAAQ,GACd+M,KAAMgqZ,EACND,iBAEJ,CACE,OAAOlsS,EAASE,MAClB,EAEIosS,GAAY,CAAC1xZ,EAAMuH,EAAM+pZ,GAAgB,KAC7C,IAAIj3Y,EAAM9S,EACV,GAAI+pZ,EACF,IACEj3Y,EAAMs3Y,KAAKpqZ,EACb,CAAE,MAAOzK,GACP,OAAOsoH,EAASE,MAClB,CAEF,MAAM/qG,EAAM,IAAIq3Y,WAAWv3Y,EAAItV,QAC/B,IAAK,IAAIyV,EAAI,EAAGA,EAAID,EAAIxV,OAAQyV,IAC9BD,EAAIC,GAAKH,EAAI4/K,WAAWz/K,GAE1B,OAAO4qG,EAAS/iH,KAAK,IAAI49G,KAAK,CAAC1lG,GAAM,CAAEva,SAAQ,EAO3C6xZ,GAAYnjY,IAChB,OAAI+jB,GAAW/jB,EAAK,SA7CAA,IAAO5sB,MAAM4sB,GAAK++B,MAAKhB,GAAOA,EAAIlrB,GAAKkrB,EAAI40J,OAAS/sM,QAAQ+vK,WAAUwyL,OAAM,IAAMviW,QAAQ+vK,OAAO,CACrHxtL,QAAS,kBAAmB63B,0DAC5BojY,QAAS,WA4CAC,CAAcrjY,GACZ+jB,GAAW/jB,EAAK,UARP2iY,EASG3iY,EARhB,IAAIpa,SAAQ,CAACC,EAAS8vK,KAC3B+sO,GAAaC,GAAKzzV,MAAK,EAAE59D,OAAMuH,OAAM+pZ,mBAAmBI,GAAU1xZ,EAAMuH,EAAM+pZ,KAAgB9rS,MAAK,IAAM6+D,EAAO,qBAAqB9vK,EAAQ,KAStID,QAAQ+vK,OAAO,sBAXJgtO,KAYpB,EAEIW,GAAgB3wM,GACb,IAAI/sM,SAAQ,CAACC,EAAS8vK,KAC3B,MAAMz8K,EAAS,IAAI05G,WACnB15G,EAAO25G,UAAY,KACjBhtG,EAAQ3M,EAAO2Q,OAAO,EAExB3Q,EAAOqN,QAAU,KACf,IAAI5M,EACJg8K,EAA+B,QAAvBh8K,EAAKT,EAAOhR,aAA0B,IAAPyR,OAAgB,EAASA,EAAGxR,QAAQ,EAE7E+Q,EAAO45G,cAAc6/F,EAAK,IAI9B,IAAI4wM,GAAU,EACd,MAGMC,GAAiB,CAACC,EAASC,EAAYC,IACpCjB,GAAae,GAASv0V,MAAK,EAAEr2D,OAAMvH,OAAMsxZ,oBAC9C,GAAIc,IAAed,EACjB,OAAOlsS,EAASE,OACX,CACL,MAAMgtS,EAAShB,EAAgB/pZ,EAAOgrZ,KAAKhrZ,GAC3C,OAAO8qZ,EAAiBC,EAAQtyZ,EAClC,KAGEwyZ,GAAmB,CAACC,EAAWpxM,EAAMixM,KACzC,MAAMI,EAAWD,EAAUvkZ,QAbnB4J,GAAU,UAAYm6Y,KAakB5wM,EAAMixM,GAdrCx6Y,MAgBjB,OADA26Y,EAAUv+Z,IAAIw+Z,GACPA,CAAQ,EAEXC,GAAoB,CAACF,EAAWN,EAASC,GAAa,IACnDF,GAAeC,EAASC,GAAY,CAACE,EAAQtyZ,IAASolH,EAASlwH,KAAKu9Z,EAAUG,UAAUN,EAAQtyZ,IAAOsmH,SAAQ,IAAMorS,GAAU1xZ,EAAMsyZ,GAAQh8Z,KAAI+qN,GAAQmxM,GAAiBC,EAAWpxM,EAAMixM,SAwB9LO,GAAmB,mRACnBC,GAAcpkY,GAAO02F,EAASlwH,KAAKw5B,EAAIh0B,MAAMm4Z,KAAmBj1V,MAAKm1V,GAAM5oS,GAAM4oS,EAAI,KAAIz8Z,KAAI+9B,GAAKoe,GAAWpe,EAAG,QAAUA,EAAE7O,UAAU,GAAK6O,IAE3I2+X,GAAgB,CAACC,EAAYC,KAC7B9tS,EAASlwH,KAAK+9Z,EAAW1oS,KAAK,QAAQ3sD,KAAKk1V,IAAa9sS,QAAO5jE,IAAS2kE,EAAWmsS,EAAY9wW,MACjG6wW,EAAW1oS,KAAK,UAAW,GAC7B,EAEI4oS,GAAa,CAACC,EAAMpzZ,IAASyyC,GAAW2gX,EAAM,GAAIpzZ,MAclDqzZ,GAAkB,EAAErzZ,OAAM0wB,MAAKnM,QAAOyF,UAAU,CAAC,EAAGspY,EAAgBC,KACxE,MAAM13Z,EAdamE,IACfykH,EAAYzkH,GACP,SACEmzZ,GAAWnzZ,EAAM,SACnB,MACEmzZ,GAAWnzZ,EAAM,SACnB,QACEmzZ,GAAWnzZ,EAAM,SACnB,QAEA,SAIIwzZ,CAAaxzZ,GACpByzZ,EAAQ,IAAI1pB,GAAQluY,EAAM,GAYhC,OAXA43Z,EAAMlpS,KAAc,UAAT1uH,EAAmB,CAAE60B,OAAQ,CACtCA,MACAnM,QACAyF,WAEW,UAATnuB,GAA6B,UAATA,GACtB43Z,EAAMlpS,KAAK,WAAY,IAEZ,WAAT1uH,GAAqBy3Z,GACvBN,GAAcS,EAAOF,GAEhBE,CAAK,EAKRC,GAA4B,CAACztT,EAAQypE,KACzC,MAAOikP,WAAYlB,GAAa/iP,EAChC,GAAI+iP,EAAW,CACb,MAAMmB,EAAelyO,IACnB,MAAMmyO,EAAWnyO,EAAIn3D,KAAK,OALFm3D,IAAOA,EAAIn3D,KAAK,SAAWguO,GAAIC,gBAAkB9zO,EAAcg9D,EAAIn3D,KAAK,yBAM5FupS,CAAsBpyO,IAPXA,IAAOh9D,EAAcg9D,EAAIn3D,KAAK,mBAOXwpS,CAAaryO,IAAQ/8D,EAAWkvS,IAGlElB,GAAkBF,EAAWoB,GAAU,GAAM9uX,MAAK2tX,IAChDhxO,EAAIn3D,KAAK,MAAOmoS,EAASsB,UAAU,GACnC,EAEJ/tT,EAAO63R,mBAAmB,OAAOr9X,GAASo2V,EAAOp2V,EAAOmzZ,IAC1D,IAsHI,QACJ11Z,GAAO,eACPiQ,GAAc,SACd0+O,GAAQ,eACR3jP,GAAc,yBACdgE,IACEzY,OACJ,IAAI,OACFqhE,GAAM,KACNg3L,GACA5+O,OAAQ+lZ,IACNx/Z,QACA,MACF++B,GAAK,UACLxlB,IACqB,qBAAZD,SAA2BA,QACjC+nD,KACHA,GAAS,SAAgBr2C,GACvB,OAAOA,CACT,GAEGqtO,KACHA,GAAO,SAAcrtO,GACnB,OAAOA,CACT,GAEG+T,KACHA,GAAQ,SAAeu5N,EAAKC,EAAWtgP,GACrC,OAAOqgP,EAAIv5N,MAAMw5N,EAAWtgP,EAC9B,GAEGsB,KACHA,GAAY,SAAmBi/O,EAAMvgP,GACnC,OAAO,IAAIugP,KAAQvgP,EACrB,GAEF,MAAMwgP,GAAeC,GAAQl4P,MAAMwE,UAAUzD,SACvCo3P,GAAWD,GAAQl4P,MAAMwE,UAAUkxD,KACnC0iM,GAAYF,GAAQl4P,MAAMwE,UAAU/B,MACpC41P,GAAoBH,GAAQ/1O,OAAO3d,UAAUN,aAC7Co0P,GAAiBJ,GAAQ/1O,OAAO3d,UAAUwB,UAC1CuyP,GAAcL,GAAQ/1O,OAAO3d,UAAUiB,OACvC+yP,GAAgBN,GAAQ/1O,OAAO3d,UAAUf,SACzCg1P,GAAgBP,GAAQ/1O,OAAO3d,UAAU64B,SACzCq7N,GAAaR,GAAQ/1O,OAAO3d,UAAUgB,MACtCmzP,GAAuBT,GAAQ14P,OAAOgF,UAAUC,gBAChDm0P,GAAaV,GAAQvxP,OAAOnC,UAAUqB,MACtCgzP,IAuBengO,GAvBe9lB,UAwB3B,WACL,IAAK,IAAIkmP,EAAQ9/O,UAAUlJ,OAAQ2H,EAAO,IAAIzX,MAAM84P,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFthP,EAAKshP,GAAS//O,UAAU+/O,GAE1B,OAAOhgP,GAAU2f,GAAMjhB,EACzB,GANF,IAAqBihB,GAfrB,SAASw/N,GAAQx/N,GACf,OAAO,SAAUmX,GACf,IAAK,IAAImpN,EAAOhgP,UAAUlJ,OAAQ2H,EAAO,IAAIzX,MAAMg5P,EAAO,EAAIA,EAAO,EAAI,GAAIzrP,EAAO,EAAGA,EAAOyrP,EAAMzrP,IAClGkK,EAAKlK,EAAO,GAAKyL,UAAUzL,GAE7B,OAAOgxB,GAAM7F,EAAMmX,EAASp4B,EAC9B,CACF,CAyBA,SAASwhP,GAAS52P,EAAKyc,GACrB,IAAIo6O,EAAoBlgP,UAAUlJ,OAAS,QAAsBzL,IAAjB2U,UAAU,GAAmBA,UAAU,GAAKq/O,GACxFn/O,IAIFA,GAAe7W,EAAK,MAEtB,IAAI88B,EAAIrgB,EAAMhP,OACd,KAAOqvB,KAAK,CACV,IAAIl8B,EAAU6b,EAAMqgB,GACpB,GAAuB,kBAAZl8B,EAAsB,CAC/B,MAAMk2P,EAAYD,EAAkBj2P,GAChCk2P,IAAcl2P,IAEX20P,GAAS94O,KACZA,EAAMqgB,GAAKg6N,GAEbl2P,EAAUk2P,EAEd,CACA92P,EAAIY,IAAW,CACjB,CACA,OAAOZ,CACT,CAQA,SAAS+2P,GAAWt6O,GAClB,IAAK,IAAIxe,EAAQ,EAAGA,EAAQwe,EAAMhP,OAAQxP,IAAS,CACzBq4P,GAAqB75O,EAAOxe,KAElDwe,EAAMxe,GAAS,KAEnB,CACA,OAAOwe,CACT,CAQA,SAASiuB,GAAM3oC,GACb,MAAMi1P,EAAY2lK,GAAS,MAC3B,IAAK,MAAOz6Z,EAAU3B,KAAUqG,GAAQ7E,GAAS,CACvBu0P,GAAqBv0P,EAAQG,KAE/CvE,MAAM4T,QAAQhR,GAChBy2P,EAAU90P,GAAY60P,GAAWx2P,GACxBA,GAA0B,kBAAVA,GAAsBA,EAAMxE,cAAgBoB,OACrE65P,EAAU90P,GAAYwoC,GAAMnqC,GAE5By2P,EAAU90P,GAAY3B,EAG5B,CACA,OAAOy2P,CACT,CASA,SAASC,GAAal1P,EAAQ4hD,GAC5B,KAAkB,OAAX5hD,GAAiB,CACtB,MAAMmtM,EAAOt5L,GAAyB7T,EAAQ4hD,GAC9C,GAAIurJ,EAAM,CACR,GAAIA,EAAKpvM,IACP,OAAO+1P,GAAQ3mD,EAAKpvM,KAEtB,GAA0B,oBAAfovM,EAAK3uM,MACd,OAAOs1P,GAAQ3mD,EAAK3uM,MAExB,CACAwB,EAAS6P,GAAe7P,EAC1B,CAIA,OAHA,WACE,OAAO,IACT,CAEF,CAEA,MAAMm1P,GAAS14L,GAAO,CAAC,IAAK,OAAQ,UAAW,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,MAAO,MAAO,MAAO,QAAS,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,SAAU,OAAQ,OAAQ,MAAO,WAAY,UAAW,OAAQ,WAAY,KAAM,YAAa,MAAO,UAAW,MAAO,SAAU,MAAO,MAAO,KAAM,KAAM,UAAW,KAAM,WAAY,aAAc,SAAU,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,MAAO,QAAS,MAAO,MAAO,QAAS,SAAU,KAAM,OAAQ,MAAO,OAAQ,UAAW,OAAQ,WAAY,QAAS,MAAO,OAAQ,KAAM,WAAY,SAAU,SAAU,IAAK,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,UAAW,SAAU,SAAU,QAAS,SAAU,SAAU,OAAQ,SAAU,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,WAAY,QAAS,KAAM,QAAS,OAAQ,KAAM,QAAS,KAAM,IAAK,KAAM,MAAO,QAAS,QAGn+B24L,GAAQ34L,GAAO,CAAC,MAAO,IAAK,WAAY,cAAe,eAAgB,eAAgB,gBAAiB,mBAAoB,SAAU,WAAY,OAAQ,OAAQ,UAAW,SAAU,OAAQ,IAAK,QAAS,WAAY,QAAS,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,QAAS,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,QAAS,SAAU,SAAU,OAAQ,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAC3c44L,GAAa54L,GAAO,CAAC,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,iBAMhY64L,GAAgB74L,GAAO,CAAC,UAAW,gBAAiB,SAAU,UAAW,YAAa,mBAAoB,iBAAkB,gBAAiB,gBAAiB,gBAAiB,QAAS,YAAa,OAAQ,eAAgB,YAAa,UAAW,gBAAiB,SAAU,MAAO,aAAc,UAAW,QAChT84L,GAAW94L,GAAO,CAAC,OAAQ,WAAY,SAAU,UAAW,QAAS,SAAU,KAAM,aAAc,gBAAiB,KAAM,KAAM,QAAS,UAAW,WAAY,QAAS,OAAQ,KAAM,SAAU,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAU,MAAO,QAAS,MAAO,SAAU,aAAc,gBAIxS+4L,GAAmB/4L,GAAO,CAAC,UAAW,cAAe,aAAc,WAAY,YAAa,UAAW,UAAW,SAAU,SAAU,QAAS,YAAa,aAAc,iBAAkB,cAAe,SAC3M71C,GAAO61C,GAAO,CAAC,UAEf60D,GAAO70D,GAAO,CAAC,SAAU,SAAU,QAAS,MAAO,iBAAkB,eAAgB,uBAAwB,WAAY,aAAc,UAAW,SAAU,UAAW,cAAe,cAAe,UAAW,OAAQ,QAAS,QAAS,QAAS,OAAQ,UAAW,WAAY,eAAgB,SAAU,cAAe,WAAY,WAAY,UAAW,MAAO,WAAY,0BAA2B,wBAAyB,WAAY,YAAa,UAAW,eAAgB,OAAQ,MAAO,UAAW,SAAU,SAAU,OAAQ,OAAQ,WAAY,KAAM,YAAa,YAAa,QAAS,OAAQ,QAAS,OAAQ,OAAQ,UAAW,OAAQ,MAAO,MAAO,YAAa,QAAS,SAAU,MAAO,YAAa,WAAY,QAAS,OAAQ,QAAS,UAAW,aAAc,SAAU,OAAQ,UAAW,UAAW,cAAe,cAAe,UAAW,gBAAiB,sBAAuB,SAAU,UAAW,UAAW,aAAc,WAAY,MAAO,WAAY,MAAO,WAAY,OAAQ,OAAQ,UAAW,aAAc,QAAS,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAAW,QAAS,MAAO,SAAU,OAAQ,QAAS,UAAW,WAAY,QAAS,YAAa,OAAQ,SAAU,SAAU,QAAS,QAAS,OAAQ,QAAS,SAC5tCi5L,GAAMj5L,GAAO,CAAC,gBAAiB,aAAc,WAAY,qBAAsB,YAAa,SAAU,gBAAiB,gBAAiB,UAAW,gBAAiB,iBAAkB,QAAS,OAAQ,KAAM,QAAS,OAAQ,gBAAiB,YAAa,YAAa,QAAS,sBAAuB,8BAA+B,gBAAiB,kBAAmB,KAAM,KAAM,IAAK,KAAM,KAAM,kBAAmB,YAAa,UAAW,UAAW,MAAO,WAAY,YAAa,MAAO,WAAY,OAAQ,eAAgB,YAAa,SAAU,cAAe,cAAe,gBAAiB,cAAe,YAAa,mBAAoB,eAAgB,aAAc,eAAgB,cAAe,KAAM,KAAM,KAAM,KAAM,aAAc,WAAY,gBAAiB,oBAAqB,SAAU,OAAQ,KAAM,kBAAmB,KAAM,MAAO,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,UAAW,YAAa,aAAc,WAAY,OAAQ,eAAgB,iBAAkB,eAAgB,mBAAoB,iBAAkB,QAAS,aAAc,aAAc,eAAgB,eAAgB,cAAe,cAAe,mBAAoB,YAAa,MAAO,OAAQ,QAAS,SAAU,OAAQ,MAAO,OAAQ,aAAc,SAAU,WAAY,UAAW,QAAS,SAAU,cAAe,SAAU,WAAY,cAAe,OAAQ,aAAc,sBAAuB,mBAAoB,eAAgB,SAAU,gBAAiB,sBAAuB,iBAAkB,IAAK,KAAM,KAAM,SAAU,OAAQ,OAAQ,cAAe,YAAa,UAAW,SAAU,SAAU,QAAS,OAAQ,kBAAmB,QAAS,mBAAoB,mBAAoB,eAAgB,cAAe,eAAgB,cAAe,aAAc,eAAgB,mBAAoB,oBAAqB,iBAAkB,kBAAmB,oBAAqB,iBAAkB,SAAU,eAAgB,QAAS,eAAgB,iBAAkB,WAAY,cAAe,UAAW,UAAW,YAAa,mBAAoB,cAAe,kBAAmB,iBAAkB,aAAc,OAAQ,KAAM,KAAM,UAAW,SAAU,UAAW,aAAc,UAAW,aAAc,gBAAiB,gBAAiB,QAAS,eAAgB,OAAQ,eAAgB,mBAAoB,mBAAoB,IAAK,KAAM,KAAM,QAAS,IAAK,KAAM,KAAM,IAAK,eAC5zEk5L,GAASl5L,GAAO,CAAC,SAAU,cAAe,QAAS,WAAY,QAAS,eAAgB,cAAe,aAAc,aAAc,QAAS,MAAO,UAAW,eAAgB,WAAY,QAAS,QAAS,SAAU,OAAQ,KAAM,UAAW,SAAU,gBAAiB,SAAU,SAAU,iBAAkB,YAAa,WAAY,cAAe,UAAW,UAAW,gBAAiB,WAAY,WAAY,OAAQ,WAAY,WAAY,aAAc,UAAW,SAAU,SAAU,cAAe,gBAAiB,uBAAwB,YAAa,YAAa,aAAc,WAAY,iBAAkB,iBAAkB,YAAa,UAAW,QAAS,UACrpBm5L,GAAMn5L,GAAO,CAAC,aAAc,SAAU,cAAe,YAAa,gBAGlEo5L,GAAgBpC,GAAK,6BACrBqC,GAAWrC,GAAK,yBAChBsC,GAActC,GAAK,iBACnBuC,GAAYvC,GAAK,8BACjBwC,GAAYxC,GAAK,kBACjByC,GAAiBzC,GAAK,6FAEtB0C,GAAoB1C,GAAK,yBACzB2C,GAAkB3C,GAAK,+DAEvB4C,GAAe5C,GAAK,WACpB6C,GAAiB7C,GAAK,4BAE5B,IAAI8C,GAA2Bn7P,OAAOqhE,OAAO,CAC3CriC,UAAW,KACXy7N,cAAeA,GACfC,SAAUA,GACVC,YAAaA,GACbC,UAAWA,GACXC,UAAWA,GACXC,eAAgBA,GAChBC,kBAAmBA,GACnBC,gBAAiBA,GACjBC,aAAcA,GACdC,eAAgBA,KAIlB,MAAME,GACK,EADLA,GAGE,EAHFA,GASoB,EATpBA,GAUK,EAVLA,GAWM,EAKNC,GAAY,WAChB,MAAyB,qBAAXv3P,OAAyB,KAAOA,MAChD,EAwxCA,IAAIw3P,GA/uCJ,SAASC,IACP,IAAIz3P,EAAS0V,UAAUlJ,OAAS,QAAsBzL,IAAjB2U,UAAU,GAAmBA,UAAU,GAAK6hP,KACjF,MAAMG,EAAYz/M,GAAQw/M,EAAgBx/M,GAa1C,GAPAy/M,EAAUh7H,QAAU,QAMpBg7H,EAAUz4L,QAAU,IACfj/D,IAAWA,EAAOC,UAAYD,EAAOC,SAASwI,WAAa6uP,GAI9D,OADAI,EAAUh/H,aAAc,EACjBg/H,EAET,IAAI,SACFz3P,GACED,EACJ,MAAM23P,EAAmB13P,EACnB23P,EAAgBD,EAAiBC,eACjC,iBACJC,EAAgB,oBAChBC,EAAmB,KACnBpvP,EAAI,QACJ1C,EAAO,WACP+xP,EAAU,aACVC,EAAeh4P,EAAOg4P,cAAgBh4P,EAAOi4P,gBAAe,gBAC5DC,EAAe,UACfC,EAAS,aACTC,GACEp4P,EACEq4P,EAAmBryP,EAAQ9E,UAC3Bu0H,EAAYugI,GAAaqC,EAAkB,aAC3CxlM,EAASmjM,GAAaqC,EAAkB,UACxCC,EAAiBtC,GAAaqC,EAAkB,eAChDE,EAAgBvC,GAAaqC,EAAkB,cAC/CG,EAAgBxC,GAAaqC,EAAkB,cAQrD,GAAmC,oBAAxBP,EAAoC,CAC7C,MAAMW,EAAWx4P,EAAS+3B,cAAc,YACpCygO,EAASh2P,SAAWg2P,EAASh2P,QAAQ0nD,gBACvClqD,EAAWw4P,EAASh2P,QAAQ0nD,cAEhC,CACA,IAAIuuM,EACAC,EAAY,GAChB,MAAM,eACJC,EAAc,mBACdC,EAAkB,uBAClBpiE,EAAsB,qBACtB3oK,GACE7tB,GACE,WACJ64P,GACEnB,EACJ,IAAIoB,EAAQ,CAAC,EAKbrB,EAAUh/H,YAAiC,oBAAZ/yH,IAAmD,oBAAlB6yP,GAAgCI,QAAwD73P,IAAtC63P,EAAeI,mBACjI,MAAM,cACJrC,EAAa,SACbC,EAAQ,YACRC,EAAW,UACXC,EAAS,UACTC,EAAS,kBACTE,EAAiB,gBACjBC,EAAe,eACfE,GACEC,GACJ,IACEL,eAAgBiC,GACd5B,GAQA6B,EAAe,KACnB,MAAMC,EAAuBxD,GAAS,CAAC,EAAG,IAAIM,MAAWC,MAAUC,MAAeE,MAAa3uO,KAG/F,IAAI0xO,EAAe,KACnB,MAAMC,EAAuB1D,GAAS,CAAC,EAAG,IAAIvjI,MAASokI,MAAQC,MAAWC,KAQ1E,IAAI4C,EAA0Bp9P,OAAOq4P,KAAKmnK,GAAS,KAAM,CACvDniK,aAAc,CACZ3/M,UAAU,EACVmM,cAAc,EACdlM,YAAY,EACZv6C,MAAO,MAETk6P,mBAAoB,CAClB5/M,UAAU,EACVmM,cAAc,EACdlM,YAAY,EACZv6C,MAAO,MAETm6P,+BAAgC,CAC9B7/M,UAAU,EACVmM,cAAc,EACdlM,YAAY,EACZv6C,OAAO,MAKPo6P,EAAc,KAGdC,EAAc,KAGdC,GAAkB,EAGlBC,GAAkB,EAGlBC,GAA0B,EAI1BC,GAA2B,EAK3BC,GAAqB,EAKrBC,GAAe,EAGfC,GAAiB,EAGjBC,GAAa,EAIbC,GAAa,EAMbC,IAAa,EAIbC,IAAsB,EAItBC,IAAsB,EAKtBC,IAAe,EAefC,IAAuB,EAIvBC,IAAe,EAIfC,IAAW,EAGXC,GAAe,CAAC,EAGhBC,GAAkB,KACtB,MAAMC,GAA0BnF,GAAS,CAAC,EAAG,CAAC,iBAAkB,QAAS,WAAY,OAAQ,gBAAiB,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,QAAS,UAAW,WAAY,WAAY,YAAa,SAAU,QAAS,MAAO,WAAY,QAAS,QAAS,QAAS,QAG1R,IAAIoF,GAAgB,KACpB,MAAMC,GAAwBrF,GAAS,CAAC,EAAG,CAAC,QAAS,QAAS,MAAO,SAAU,QAAS,UAGxF,IAAIsF,GAAsB,KAC1B,MAAMC,GAA8BvF,GAAS,CAAC,EAAG,CAAC,MAAO,QAAS,MAAO,KAAM,QAAS,OAAQ,UAAW,cAAe,OAAQ,UAAW,QAAS,QAAS,QAAS,UAClKwF,GAAmB,qCACnBC,GAAgB,6BAChBC,GAAiB,+BAEvB,IAAIC,GAAYD,GACZE,IAAiB,EAGjBC,GAAqB,KACzB,MAAMC,GAA6B9F,GAAS,CAAC,EAAG,CAACwF,GAAkBC,GAAeC,IAAiBrG,IAGnG,IAAI0G,GAAoB,KACxB,MAAMC,GAA+B,CAAC,wBAAyB,aAE/D,IAAI/F,GAAoB,KAGpBgG,GAAS,KAKb,MAAMC,GAAc57P,EAAS+3B,cAAc,QACrC8jO,GAAoB,SAA2BC,GACnD,OAAOA,aAAqB14P,QAAU04P,aAAqBn7O,QAC7D,EAQMo7O,GAAe,WACnB,IAAI7oM,EAAMz9C,UAAUlJ,OAAS,QAAsBzL,IAAjB2U,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/E,IAAIkmP,IAAUA,KAAWzoM,EAAzB,CAyIA,GApIKA,GAAsB,kBAARA,IACjBA,EAAM,CAAC,GAITA,EAAM1pB,GAAM0pB,GACZuoM,IAEiE,IAAjEC,GAA6B5hO,QAAQo5B,EAAIuoM,mBAnCT,YAmCiEvoM,EAAIuoM,kBAGrG9F,GAA0C,0BAAtB8F,GAAgD1G,GAAiBD,GAGrFmE,EAAe7D,GAAqBliM,EAAK,gBAAkBwiM,GAAS,CAAC,EAAGxiM,EAAI+lM,aAActD,IAAqBuD,EAC/GC,EAAe/D,GAAqBliM,EAAK,gBAAkBwiM,GAAS,CAAC,EAAGxiM,EAAIimM,aAAcxD,IAAqByD,EAC/GmC,GAAqBnG,GAAqBliM,EAAK,sBAAwBwiM,GAAS,CAAC,EAAGxiM,EAAIqoM,mBAAoBxG,IAAkByG,GAC9HR,GAAsB5F,GAAqBliM,EAAK,qBAAuBwiM,GAASlsN,GAAMyxN,IAEtF/nM,EAAI8oM,kBAEJrG,IAEEsF,GACFH,GAAgB1F,GAAqBliM,EAAK,qBAAuBwiM,GAASlsN,GAAMuxN,IAEhF7nM,EAAI+oM,kBAEJtG,IAEEoF,GACFH,GAAkBxF,GAAqBliM,EAAK,mBAAqBwiM,GAAS,CAAC,EAAGxiM,EAAI0nM,gBAAiBjF,IAAqBkF,GACxHpB,EAAcrE,GAAqBliM,EAAK,eAAiBwiM,GAAS,CAAC,EAAGxiM,EAAIumM,YAAa9D,IAAqB,CAAC,EAC7G+D,EAActE,GAAqBliM,EAAK,eAAiBwiM,GAAS,CAAC,EAAGxiM,EAAIwmM,YAAa/D,IAAqB,CAAC,EAC7GgF,KAAevF,GAAqBliM,EAAK,iBAAkBA,EAAIynM,aAC/DhB,GAA0C,IAAxBzmM,EAAIymM,gBACtBC,GAA0C,IAAxB1mM,EAAI0mM,gBACtBC,EAA0B3mM,EAAI2mM,0BAA2B,EACzDC,GAA4D,IAAjC5mM,EAAI4mM,yBAC/BC,EAAqB7mM,EAAI6mM,qBAAsB,EAC/CC,GAAoC,IAArB9mM,EAAI8mM,aACnBC,EAAiB/mM,EAAI+mM,iBAAkB,EACvCG,GAAalnM,EAAIknM,aAAc,EAC/BC,GAAsBnnM,EAAImnM,sBAAuB,EACjDC,GAAsBpnM,EAAIonM,sBAAuB,EACjDH,EAAajnM,EAAIinM,aAAc,EAC/BI,IAAoC,IAArBrnM,EAAIqnM,aACnBC,GAAuBtnM,EAAIsnM,uBAAwB,EACnDC,IAAoC,IAArBvnM,EAAIunM,aACnBC,GAAWxnM,EAAIwnM,WAAY,EAC3B1B,EAAmB9lM,EAAIgpM,oBAAsBnF,GAC7CsE,GAAYnoM,EAAImoM,WAAaD,GAC7B/B,EAA0BnmM,EAAImmM,yBAA2B,CAAC,EACtDnmM,EAAImmM,yBAA2BwC,GAAkB3oM,EAAImmM,wBAAwBC,gBAC/ED,EAAwBC,aAAepmM,EAAImmM,wBAAwBC,cAEjEpmM,EAAImmM,yBAA2BwC,GAAkB3oM,EAAImmM,wBAAwBE,sBAC/EF,EAAwBE,mBAAqBrmM,EAAImmM,wBAAwBE,oBAEvErmM,EAAImmM,yBAAiG,mBAA/DnmM,EAAImmM,wBAAwBG,iCACpEH,EAAwBG,+BAAiCtmM,EAAImmM,wBAAwBG,gCAEnFO,IACFH,GAAkB,GAEhBS,KACFD,IAAa,GAIXO,KACF1B,EAAevD,GAAS,CAAC,EAAGjuO,IAC5B0xO,EAAe,IACW,IAAtBwB,GAAaxoI,OACfujI,GAASuD,EAAcjD,IACvBN,GAASyD,EAAchnI,MAEA,IAArBwoI,GAAapE,MACfb,GAASuD,EAAchD,IACvBP,GAASyD,EAAc5C,IACvBb,GAASyD,EAAc1C,MAEO,IAA5BkE,GAAazE,aACfR,GAASuD,EAAc/C,IACvBR,GAASyD,EAAc5C,IACvBb,GAASyD,EAAc1C,MAEG,IAAxBkE,GAAanE,SACfd,GAASuD,EAAc7C,IACvBV,GAASyD,EAAc3C,IACvBd,GAASyD,EAAc1C,MAKvBvjM,EAAIipM,WACFlD,IAAiBC,IACnBD,EAAezvN,GAAMyvN,IAEvBvD,GAASuD,EAAc/lM,EAAIipM,SAAUxG,KAEnCziM,EAAIkpM,WACFjD,IAAiBC,IACnBD,EAAe3vN,GAAM2vN,IAEvBzD,GAASyD,EAAcjmM,EAAIkpM,SAAUzG,KAEnCziM,EAAI8oM,mBACNtG,GAASsF,GAAqB9nM,EAAI8oM,kBAAmBrG,IAEnDziM,EAAI0nM,kBACFA,KAAoBC,KACtBD,GAAkBpxN,GAAMoxN,KAE1BlF,GAASkF,GAAiB1nM,EAAI0nM,gBAAiBjF,KAI7C8E,KACFxB,EAAa,UAAW,GAItBgB,GACFvE,GAASuD,EAAc,CAAC,OAAQ,OAAQ,SAItCA,EAAa3nN,QACfokN,GAASuD,EAAc,CAAC,iBACjBQ,EAAY59F,OAEjB3oG,EAAImpM,qBAAsB,CAC5B,GAAmD,oBAAxCnpM,EAAImpM,qBAAqB90E,WAClC,MAAM+tE,GAAgB,+EAExB,GAAwD,oBAA7CpiM,EAAImpM,qBAAqBC,gBAClC,MAAMhH,GAAgB,oFAIxBmD,EAAqBvlM,EAAImpM,qBAGzB3D,EAAYD,EAAmBlxE,WAAW,GAC5C,WAE6BzmL,IAAvB23P,IACFA,EA1b0B,SAAmCN,EAAcoE,GACjF,GAA4B,kBAAjBpE,GAAkE,oBAA9BA,EAAaqE,aAC1D,OAAO,KAMT,IAAIv3O,EAAS,KACb,MAAMw3O,EAAY,wBACdF,GAAqBA,EAAkBtzP,aAAawzP,KACtDx3O,EAASs3O,EAAkBh4P,aAAak4P,IAE1C,MAAMC,EAAa,aAAez3O,EAAS,IAAMA,EAAS,IAC1D,IACE,OAAOkzO,EAAaqE,aAAaE,EAAY,CAC3C,UAAAn1E,CAAWp1D,GACT,OAAOA,CACT,EACA,eAAAmqI,CAAgBK,GACd,OAAOA,CACT,GAEJ,CAAE,MAAOx8P,GAKP,OADAqa,QAAQxD,KAAK,uBAAyB0lP,EAAa,0BAC5C,IACT,CACF,CA4Z6BE,CAA0BzE,EAAcR,IAIpC,OAAvBc,GAAoD,kBAAdC,IACxCA,EAAYD,EAAmBlxE,WAAW,KAM1CjqH,IACFA,GAAOpK,GAETyoM,GAASzoM,CArKT,CAsKF,EACM2pM,GAAiCnH,GAAS,CAAC,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,UACvEoH,GAA0BpH,GAAS,CAAC,EAAG,CAAC,mBAMxCqH,GAA+BrH,GAAS,CAAC,EAAG,CAAC,QAAS,QAAS,OAAQ,IAAK,WAK5EsH,GAAetH,GAAS,CAAC,EAAG,IAAIO,MAAUC,MAAeC,KACzD8G,GAAkBvH,GAAS,CAAC,EAAG,IAAIU,MAAaC,KA8FhD6G,GAAe,SAAsBh1P,GACzC2sP,GAAU4C,EAAUz4L,QAAS,CAC3Bt/D,QAASwI,IAEX,IAEEqwP,EAAcrwP,GAAM2wB,YAAY3wB,EAClC,CAAE,MAAO/H,GACPyyD,EAAO1qD,EACT,CACF,EAQMi1P,GAAmB,SAA0B95P,EAAM6E,GACvD,IACE2sP,GAAU4C,EAAUz4L,QAAS,CAC3BzzD,UAAWrD,EAAKk1P,iBAAiB/5P,GACjC3G,KAAMwL,GAEV,CAAE,MAAO/H,GACP00P,GAAU4C,EAAUz4L,QAAS,CAC3BzzD,UAAW,KACX7O,KAAMwL,GAEV,CAIA,GAHAA,EAAK0O,gBAAgBvT,GAGR,OAATA,IAAkB81P,EAAa91P,GACjC,GAAI+2P,IAAcC,GAChB,IACE6C,GAAah1P,EACf,CAAE,MAAO/H,GAAI,MAEb,IACE+H,EAAKyO,aAAatT,EAAM,GAC1B,CAAE,MAAOlD,GAAI,CAGnB,EAQMk9P,GAAgB,SAAuBhlE,GAE3C,IAAIzhE,EAAM,KACN0mI,EAAoB,KACxB,GAAInD,EACF9hE,EAAQ,oBAAsBA,MACzB,CAEL,MAAMr2L,EAAUgzP,GAAY38D,EAAO,eACnCilE,EAAoBt7P,GAAWA,EAAQ,EACzC,CAC0B,0BAAtBy5P,IAAiDJ,KAAcD,KAEjE/iE,EAAQ,iEAAmEA,EAAQ,kBAErF,MAAMklE,EAAe9E,EAAqBA,EAAmBlxE,WAAW8Q,GAASA,EAKjF,GAAIgjE,KAAcD,GAChB,IACExkI,GAAM,IAAIshI,GAAYsF,gBAAgBD,EAAc9B,GACtD,CAAE,MAAOt7P,GAAI,CAIf,IAAKy2H,IAAQA,EAAIz9G,gBAAiB,CAChCy9G,EAAM+hI,EAAe8E,eAAepC,GAAW,WAAY,MAC3D,IACEzkI,EAAIz9G,gBAAgBwU,UAAY2tO,GAAiB5C,EAAY6E,CAC/D,CAAE,MAAOp9P,GAET,CACF,CACA,MAAMqS,EAAOokH,EAAIpkH,MAAQokH,EAAIz9G,gBAM7B,OALIk/K,GAASilE,GACX9qP,EAAKiiH,aAAaz0H,EAASyyH,eAAe6qI,GAAoB9qP,EAAK8/G,WAAW,IAAM,MAIlF+oI,KAAcD,GACTvtO,EAAqBzxB,KAAKw6H,EAAKqjI,EAAiB,OAAS,QAAQ,GAEnEA,EAAiBrjI,EAAIz9G,gBAAkB3G,CAChD,EAQMkrP,GAAsB,SAA6B1lN,GACvD,OAAO4gN,EAAmBx8P,KAAK47C,EAAKkS,eAAiBlS,EAAMA,EAE3D8/M,EAAW6F,aAAe7F,EAAW8F,aAAe9F,EAAW+F,UAAY/F,EAAWgG,4BAA8BhG,EAAWiG,mBAAoB,KACrJ,EAQMC,GAAe,SAAsBjkI,GACzC,OAAOA,aAAek+H,IAA4C,kBAAjBl+H,EAAIjJ,UAAoD,kBAApBiJ,EAAIjjG,aAAuD,oBAApBijG,EAAIlhG,eAAgCkhG,EAAIz2H,sBAAsBy0P,IAAgD,oBAAxBh+H,EAAInjH,iBAA8D,oBAArBmjH,EAAIpjH,cAA2D,kBAArBojH,EAAIkkI,cAAyD,oBAArBlkI,EAAItF,cAA4D,oBAAtBsF,EAAI1H,cACjY,EAQM6rI,GAAU,SAAiBr9P,GAC/B,MAAuB,oBAAT4H,GAAuB5H,aAAkB4H,CACzD,EAUM01P,GAAe,SAAsBC,EAAYC,EAAatvP,GAC7D+pP,EAAMsF,IAGX1J,GAAaoE,EAAMsF,IAAa58K,IAC9BA,EAAKplF,KAAKq7P,EAAW4G,EAAatvP,EAAM4sP,GAAO,GAEnD,EAYM2C,GAAoB,SAA2BD,GACnD,IAAI77P,EAAU,KAMd,GAHA27P,GAAa,yBAA0BE,EAAa,MAGhDL,GAAaK,GAEf,OADAnB,GAAamB,IACN,EAIT,MAAM98P,EAAUo0P,GAAkB0I,EAAYvtI,UAS9C,GANAqtI,GAAa,sBAAuBE,EAAa,CAC/C98P,UACAg9P,YAAatF,IAIXoF,EAAYhsI,kBAAoB6rI,GAAQG,EAAYG,oBAAsBnJ,GAAW,UAAWgJ,EAAY1wO,YAAc0nO,GAAW,UAAWgJ,EAAYvnO,aAE9J,OADAomO,GAAamB,IACN,EAIT,GAAIA,EAAY71P,WAAa6uP,GAE3B,OADA6F,GAAamB,IACN,EAIT,GAAIrE,GAAgBqE,EAAY71P,WAAa6uP,IAAqBhC,GAAW,UAAWgJ,EAAYtvP,MAElG,OADAmuP,GAAamB,IACN,EAIT,IAAKpF,EAAa13P,IAAYk4P,EAAYl4P,GAAU,CAElD,IAAKk4P,EAAYl4P,IAAYk9P,GAAsBl9P,GAAU,CAC3D,GAAI83P,EAAwBC,wBAAwBl2P,QAAUiyP,GAAWgE,EAAwBC,aAAc/3P,GAC7G,OAAO,EAET,GAAI83P,EAAwBC,wBAAwB34O,UAAY04O,EAAwBC,aAAa/3P,GACnG,OAAO,CAEX,CAGA,GAAIk5P,KAAiBG,GAAgBr5P,GAAU,CAC7C,MAAMq3B,EAAa2/N,EAAc8F,IAAgBA,EAAYzlO,WACvD05F,EAAagmI,EAAc+F,IAAgBA,EAAY/rI,WAC7D,GAAIA,GAAc15F,EAAY,CAE5B,IAAK,IAAI5W,EADUswG,EAAW/lH,OACJ,EAAGyV,GAAK,IAAKA,EAAG,CACxC,MAAM08O,EAAalpI,EAAUlD,EAAWtwG,IAAI,GAC5C08O,EAAWC,gBAAkBN,EAAYM,gBAAkB,GAAK,EAChE/lO,EAAW67F,aAAaiqI,EAAYrG,EAAegG,GACrD,CACF,CACF,CAEA,OADAnB,GAAamB,IACN,CACT,CAGA,OAAIA,aAAuBt4P,IAzTA,SAA8BrG,GACzD,IAAI0mD,EAASmyM,EAAc74P,GAItB0mD,GAAWA,EAAO7kD,UACrB6kD,EAAS,CACP63M,aAAc5C,GACd95P,QAAS,aAGb,MAAMA,EAAUuzP,GAAkBp1P,EAAQ6B,SACpCq9P,EAAgB9J,GAAkB1uM,EAAO7kD,SAC/C,QAAKg6P,GAAmB77P,EAAQu+P,gBAG5Bv+P,EAAQu+P,eAAiB9C,GAIvB/0M,EAAO63M,eAAiB7C,GACP,QAAZ75P,EAML6kD,EAAO63M,eAAiB/C,GACP,QAAZ35P,IAAwC,mBAAlBq9P,GAAsC/B,GAA+B+B,IAK7FlgP,QAAQs+O,GAAaz7P,IAE1B7B,EAAQu+P,eAAiB/C,GAIvB90M,EAAO63M,eAAiB7C,GACP,SAAZ75P,EAKL6kD,EAAO63M,eAAiB9C,GACP,SAAZ55P,GAAsBu7P,GAAwB8B,GAKhDlgP,QAAQu+O,GAAgB17P,IAE7B7B,EAAQu+P,eAAiB7C,KAIvBh1M,EAAO63M,eAAiB9C,KAAkB2B,GAAwB8B,OAGlEx4M,EAAO63M,eAAiB/C,KAAqB2B,GAA+B+B,MAMxE3B,GAAgB17P,KAAaw7P,GAA6Bx7P,KAAay7P,GAAaz7P,MAIpE,0BAAtBk6P,KAAiDF,GAAmB77P,EAAQu+P,eASlF,CA0OyCY,CAAqBR,IAC1DnB,GAAamB,IACN,GAIQ,aAAZ98P,GAAsC,YAAZA,GAAqC,aAAZA,IAA2B8zP,GAAW,8BAA+BgJ,EAAY1wO,YAMrIosO,GAAsBsE,EAAY71P,WAAa6uP,KAEjD70P,EAAU67P,EAAYvnO,YACtB49N,GAAa,CAACgC,EAAeC,EAAUC,IAAckI,IACnDt8P,EAAUyyP,GAAczyP,EAASs8P,EAAM,IAAI,IAEzCT,EAAYvnO,cAAgBt0B,IAC9BqyP,GAAU4C,EAAUz4L,QAAS,CAC3Bt/D,QAAS2+P,EAAY7oI,cAEvB6oI,EAAYvnO,YAAct0B,IAK9B27P,GAAa,wBAAyBE,EAAa,OAC5C,IArBLnB,GAAamB,IACN,EAqBX,EAWMU,GAAoB,SAA2BC,EAAOC,EAAQ5/P,GAElE,GAAIk7P,KAA4B,OAAX0E,GAA8B,SAAXA,KAAuB5/P,KAASW,GAAYX,KAASu8P,IAC3F,OAAO,EAOT,GAAIhC,IAAoBF,EAAYuF,IAAW5J,GAAWwB,EAAWoI,SAAgB,GAAItF,GAAmBtE,GAAWyB,EAAWmI,SAAgB,IAAK9F,EAAa8F,IAAWvF,EAAYuF,IACzL,KAIAR,GAAsBO,KAAW3F,EAAwBC,wBAAwBl2P,QAAUiyP,GAAWgE,EAAwBC,aAAc0F,IAAU3F,EAAwBC,wBAAwB34O,UAAY04O,EAAwBC,aAAa0F,MAAY3F,EAAwBE,8BAA8Bn2P,QAAUiyP,GAAWgE,EAAwBE,mBAAoB0F,IAAW5F,EAAwBE,8BAA8B54O,UAAY04O,EAAwBE,mBAAmB0F,KAGve,OAAXA,GAAmB5F,EAAwBG,iCAAmCH,EAAwBC,wBAAwBl2P,QAAUiyP,GAAWgE,EAAwBC,aAAcj6P,IAAUg6P,EAAwBC,wBAAwB34O,UAAY04O,EAAwBC,aAAaj6P,KAClS,OAAO,OAGJ,GAAI27P,GAAoBiE,SAAgB,GAAI5J,GAAW2D,EAAkB/D,GAAc51P,EAAO43P,EAAiB,WAAa,GAAgB,QAAXgI,GAA+B,eAAXA,GAAsC,SAAXA,GAAgC,WAAVD,GAAwD,IAAlC9J,GAAc71P,EAAO,WAAkBy7P,GAAckE,IAAe,GAAInF,IAA4BxE,GAAW2B,EAAmB/B,GAAc51P,EAAO43P,EAAiB,WAAa,GAAI53P,EAC1Z,OAAO,OAET,OAAO,CACT,EAUMo/P,GAAwB,SAA+Bl9P,GAC3D,MAAmB,mBAAZA,GAAgCyzP,GAAYzzP,EAAS41P,EAC9D,EAYM+H,GAAsB,SAA6Bb,GAEvDF,GAAa,2BAA4BE,EAAa,MACtD,MAAM,WACJ/6P,GACE+6P,EAGJ,IAAK/6P,EACH,OAEF,MAAM67P,EAAY,CAChBC,SAAU,GACVC,UAAW,GACXC,UAAU,EACVC,kBAAmBpG,GAErB,IAAIv9N,EAAIt4B,EAAWiJ,OAGnB,KAAOqvB,KAAK,CACV,MAAMm2F,EAAOzuH,EAAWs4B,IAClB,KACJv4B,EAAI,aACJ46P,EACA5+P,MAAOggQ,GACLttI,EACEktI,EAAStJ,GAAkBtyP,GACjC,IAAIhE,EAAiB,UAATgE,EAAmBg8P,EAAYlK,GAAWkK,GACtD,MAAM9vE,EAAYlwL,EAWlB,GARA8/P,EAAUC,SAAWH,EACrBE,EAAUE,UAAYhgQ,EACtB8/P,EAAUG,UAAW,EACrBH,EAAUK,mBAAgB1+P,EAC1Bq9P,GAAa,wBAAyBE,EAAac,GACnD9/P,EAAQ8/P,EAAUE,UAGdF,EAAUK,cACZ,SAMF,IAAKL,EAAUG,SAAU,CACvBnC,GAAiB95P,EAAMg7P,GACvB,QACF,CAGA,IAAKvE,GAA4BzE,GAAW,OAAQh2P,GAAQ,CAC1D89P,GAAiB95P,EAAMg7P,GACvB,QACF,CAGItE,GACFrF,GAAa,CAACgC,EAAeC,EAAUC,IAAckI,IACnDz/P,EAAQ41P,GAAc51P,EAAOy/P,EAAM,IAAI,IAK3C,MAAME,EAAQrJ,GAAkB0I,EAAYvtI,UAC5C,GAAKiuI,GAAkBC,EAAOC,EAAQ5/P,GAiBtC,IATIm7P,IAAoC,OAAXyE,GAA8B,SAAXA,IAE9C9B,GAAiB95P,EAAMg7P,GAGvBh/P,EA5tB8B,gBA4tBQA,GAIpC26P,GAAgB3E,GAAW,gCAAiCh2P,GAC9D89P,GAAiB95P,EAAMg7P,OADzB,CAMA,GAAI5F,GAA8C,kBAAjBN,GAAsE,oBAAlCA,EAAasH,iBAChF,GAAIxB,QACF,OAAQ9F,EAAasH,iBAAiBT,EAAOC,IAC3C,IAAK,cAED5/P,EAAQo5P,EAAmBlxE,WAAWloL,GACtC,MAEJ,IAAK,mBAEDA,EAAQo5P,EAAmB6D,gBAAgBj9P,GAQrD,GAAIA,IAAUkwL,EACZ,IACM0uE,EACFI,EAAYqB,eAAezB,EAAc56P,EAAMhE,GAG/Cg/P,EAAY1nP,aAAatT,EAAMhE,GAE7B2+P,GAAaK,GACfnB,GAAamB,GAEbzJ,GAAS6C,EAAUz4L,QAEvB,CAAE,MAAO7+D,GAAI,CAlCf,MAnBEg9P,GAAiB95P,EAAMg7P,EAuD3B,CAGAF,GAAa,0BAA2BE,EAAa,KACvD,EAOMsB,GAAqB,SAASA,EAAmB9sE,GACrD,IAAI+sE,EAAa,KACjB,MAAMC,EAAiBnC,GAAoB7qE,GAI3C,IADAsrE,GAAa,0BAA2BtrE,EAAU,MAC3C+sE,EAAaC,EAAeC,YAEjC3B,GAAa,yBAA0ByB,EAAY,MAG/CtB,GAAkBsB,KAKlBA,EAAWp9P,mBAAmBo1P,GAChC+H,EAAmBC,EAAWp9P,SAIhC08P,GAAoBU,IAItBzB,GAAa,yBAA0BtrE,EAAU,KACnD,EA0PA,OAhPA4kE,EAAUhuE,SAAW,SAAU4O,GAC7B,IAAInlI,EAAMz9C,UAAUlJ,OAAS,QAAsBzL,IAAjB2U,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC3EjD,EAAO,KACPutP,EAAe,KACf1B,EAAc,KACd2B,EAAa,KAUjB,GANA1E,IAAkBjjE,EACdijE,KACFjjE,EAAQ,eAIW,kBAAVA,IAAuB6lE,GAAQ7lE,GAAQ,CAChD,GAA8B,oBAAnBA,EAAM51L,SAMf,MAAM6yP,GAAgB,8BAJtB,GAAqB,kBADrBj9D,EAAQA,EAAM51L,YAEZ,MAAM6yP,GAAgB,kCAK5B,CAGA,IAAKmC,EAAUh/H,YACb,OAAO4/D,EAeT,GAXK6hE,GACH6B,GAAa7oM,GAIfukM,EAAUz4L,QAAU,GAGC,kBAAVq5H,IACTqiE,IAAW,GAETA,IAEF,GAAIriE,EAAMvnE,SAAU,CAClB,MAAMvvH,EAAUo0P,GAAkBt9D,EAAMvnE,UACxC,IAAKmoI,EAAa13P,IAAYk4P,EAAYl4P,GACxC,MAAM+zP,GAAgB,0DAE1B,OACK,GAAIj9D,aAAiB5vL,EAG1B+J,EAAO6qP,GAAc,iBACrB0C,EAAevtP,EAAK03C,cAAc2uM,WAAWxgE,GAAO,GAChD0nE,EAAav3P,WAAa6uP,IAA+C,SAA1B0I,EAAajvI,UAG3B,SAA1BivI,EAAajvI,SADtBt+G,EAAOutP,EAKPvtP,EAAK6lB,YAAY0nO,OAEd,CAEL,IAAK3F,KAAeL,IAAuBE,IAEnB,IAAxB5hE,EAAMv+J,QAAQ,KACZ,OAAO2+N,GAAsB6B,GAAsB7B,EAAmBlxE,WAAW8Q,GAASA,EAO5F,GAHA7lL,EAAO6qP,GAAchlE,IAGhB7lL,EACH,OAAO4nP,GAAa,KAAOE,GAAsB5B,EAAY,EAEjE,CAGIlmP,GAAQ2nP,GACV+C,GAAa1qP,EAAKsiH,YAIpB,MAAMmrI,EAAevC,GAAoBhD,GAAWriE,EAAQ7lL,GAG5D,KAAO6rP,EAAc4B,EAAaH,YAE5BxB,GAAkBD,KAKlBA,EAAY77P,mBAAmBo1P,GACjC+H,GAAmBtB,EAAY77P,SAIjC08P,GAAoBb,IAItB,GAAI3D,GACF,OAAOriE,EAIT,GAAI+hE,GAAY,CACd,GAAIC,GAEF,IADA2F,EAAaxpE,EAAuBp6L,KAAKoW,EAAK03C,eACvC13C,EAAKsiH,YAEVkrI,EAAW3nO,YAAY7lB,EAAKsiH,iBAG9BkrI,EAAaxtP,EAYf,OAVI2mP,EAAa+G,YAAc/G,EAAagH,kBAQ1CH,EAAanH,EAAWz8P,KAAKs7P,EAAkBsI,GAAY,IAEtDA,CACT,CACA,IAAII,EAAiBnG,EAAiBznP,EAAK6tP,UAAY7tP,EAAKmb,UAa5D,OAVIssO,GAAkBhB,EAAa,aAAezmP,EAAK03C,eAAiB13C,EAAK03C,cAAco2M,SAAW9tP,EAAK03C,cAAco2M,QAAQj9P,MAAQgyP,GAAW6B,GAAc1kP,EAAK03C,cAAco2M,QAAQj9P,QAC3L+8P,EAAiB,aAAe5tP,EAAK03C,cAAco2M,QAAQj9P,KAAO,MAAQ+8P,GAIxErG,GACFrF,GAAa,CAACgC,EAAeC,EAAUC,IAAckI,IACnDsB,EAAiBnL,GAAcmL,EAAgBtB,EAAM,IAAI,IAGtDrG,GAAsB6B,GAAsB7B,EAAmBlxE,WAAW64E,GAAkBA,CACrG,EAQA3I,EAAU8I,UAAY,WAEpBxE,GADUtmP,UAAUlJ,OAAS,QAAsBzL,IAAjB2U,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAE/EykP,GAAa,CACf,EAOAzC,EAAU+I,YAAc,WACtB7E,GAAS,KACTzB,GAAa,CACf,EAYAzC,EAAUgJ,iBAAmB,SAAU5zI,EAAKkF,EAAM1yH,GAE3Cs8P,IACHI,GAAa,CAAC,GAEhB,MAAMiD,EAAQrJ,GAAkB9oI,GAC1BoyI,EAAStJ,GAAkB5jI,GACjC,OAAOgtI,GAAkBC,EAAOC,EAAQ5/P,EAC1C,EASAo4P,EAAUiJ,QAAU,SAAUtC,EAAYuC,GACZ,oBAAjBA,IAGX7H,EAAMsF,GAActF,EAAMsF,IAAe,GACzCvJ,GAAUiE,EAAMsF,GAAauC,GAC/B,EAUAlJ,EAAUmJ,WAAa,SAAUxC,GAC/B,GAAItF,EAAMsF,GACR,OAAOxJ,GAASkE,EAAMsF,GAE1B,EAQA3G,EAAUoJ,YAAc,SAAUzC,GAC5BtF,EAAMsF,KACRtF,EAAMsF,GAAc,GAExB,EAMA3G,EAAUqJ,eAAiB,WACzBhI,EAAQ,CAAC,CACX,EACOrB,CACT,CACaD,GAEb,MAAMkkK,GAASjwS,GAAMl/E,KAAMtqC,GAAOwpH,GAAMxpH,KAClC05Z,GAAa,CACjB,SACA,WACA,YACA,WACA,OACA,WACA,OACA,OACA,WACA,OACA,YACA,OACA,QACA,UAEIC,GAAgB,CACpBC,IAAK,GACLC,KAAM,GACNC,MAAO,IACPC,OAAQ,IAEJC,GAAyB,CAC7B,MACA,SAgBIC,GAAe,CAAChlP,EAAU2hP,EAAKt3Z,KACnC,MAAM46Z,EARUC,KAChB,IACE,OAAOnD,mBAAmBmD,EAC5B,CAAE,MAAOjzQ,GACP,OAAOkzQ,SAASD,EAClB,GAGmBE,CAAUzD,GAAK34Z,QAAQ,MAAO,IACjD,OAAIg3K,EAASiR,sBAEF,4BAA4B7lL,KAAK65Z,KAEjCjlP,EAASgR,uBAET,iBAAiB5lL,KAAK65Z,GAtBV,EAACI,EAAkBh7Z,IACtC2qH,EAAcqwS,IACRA,GAEDrwS,EAAc3qH,KAAYgtH,EAAW0tS,GAAwB16Z,GAmB7Di7Z,CAAiBtlP,EAASkR,oBAAqB7mL,IAAY,yBAAyBe,KAAK65Z,GAEzF,UAAU75Z,KAAK65Z,IACxB,EAEF,MAAMM,GACJ,mBAAO7D,CAAaC,GAClB,IAAIrxZ,EACJ,MAAMk1Z,EAAgBzD,mBAAmBJ,GAAKz2Z,MAAM,KAC9CJ,EAAU,eAAekmB,KAAKw0Y,EAAc,IAIlD,OAHI16Z,IACFwF,EAAOxF,EAAQ,IAEV,CACLwF,OACAuH,KAAM2tZ,EAAc,GAExB,CACA,gBAAOr0O,CAAUwwO,EAAK9zZ,EAAS1C,EAAU,CAAC,GACxC,GAAIA,EAAQ8lL,kBACV,OAAO,EACF,CACL,MAAMg0O,EAAaxvD,GAASO,OAAO2rD,GAAK34Z,QAAQ,sBAAuB,IACvE,OAAQg8Z,GAAa75Z,EAAS85Z,EAAYp3Z,EAC5C,CACF,CACA,yBAAOoqX,CAAmBxnL,GACxB,IAAI93L,EACJ,IAAIwyW,EAYJ,OAVEA,EADmC,IAAjC16K,EAAI2yJ,SAASxgU,QAAQ,SAAkC,UAAjB6tK,EAAI2yJ,SACd,QAAnBzqV,EAAK83L,EAAIlvK,YAAyB,IAAP5oB,EAAgBA,EAAK,GAEjD83L,EAAI2yJ,SAAW,KAAO3yJ,EAAI/9I,KAAO+9I,EAAIg1N,SAE7C,yBAAyBr6Z,KAAK+/W,KAChCA,EAAUA,EAAQniX,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9D,UAAUoC,KAAK+/W,KAClBA,GAAW,MAGRA,CACT,CACA,WAAAxnX,CAAYq7B,EAAKghJ,EAAW,CAAC,GAC3Bj8K,KAAKi1F,KAAO,GACZj1F,KAAKupP,UAAY,GACjBtuN,EAAMj0B,GAAKi0B,GACXj7B,KAAKi8K,SAAWA,EAChB,MAAM0lP,EAAU1lP,EAASkjL,SACnB36V,EAAOxE,KACb,GAAI,yBAAyBqH,KAAK4zB,IAAQ,QAAQ5zB,KAAK4zB,GAErD,YADAz2B,EAAKohB,OAASqV,GAGhB,MAAM2mY,EAA2C,IAAtB3mY,EAAI4D,QAAQ,MAIvC,GAHyB,IAArB5D,EAAI4D,QAAQ,MAAe+iY,IAC7B3mY,GAAO0mY,GAAUA,EAAQtiE,UAAqB,QAAU,cAAgBpkU,IAErE,iBAAiB5zB,KAAK4zB,GAAM,CAC/B,MAAMmsV,EAAUu6C,EAAUA,EAAQ1sU,KAAO,IAAIusU,GAAIz8Z,SAASuoH,SAAS9vF,MAAM+rN,UACzE,GAA6E,MAA5D,OAAZo4K,QAAgC,IAAZA,OAAqB,EAASA,EAAQtiE,UAC7DpkU,EAAM,aAAez2B,EAAKq9Z,UAAUz6C,EAASnsV,OACxC,CACL,MAAMh0B,EAAQ,oBAAoBgmB,KAAKgO,GACnCh0B,IACFg0B,GAAO0mY,GAAWA,EAAQtiE,UAAY,QAAU,cAAgB76V,EAAKq9Z,UAAUz6C,EAASngX,EAAM,IAAMA,EAAM,GAE9G,CACF,CACAg0B,EAAMA,EAAIh2B,QAAQ,MAAO,YACzB,MAAM68Z,EAAW,uNAAuN70Y,KAAKgO,GACzO6mY,GACFrB,GAAOC,IAAY,CAACjgZ,EAAGsG,KACrB,IAAI8rB,EAAOivX,EAAS/6Y,GAChB8rB,IACFA,EAAOA,EAAK5tC,QAAQ,cAAe,OAErCT,EAAKic,GAAKoyB,CAAI,IAGd8uX,IACGn9Z,EAAK66V,WACR76V,EAAK66V,SAAWsiE,EAAQtiE,UAErB76V,EAAKu9Z,WACRv9Z,EAAKu9Z,SAAWJ,EAAQI,UAErBv9Z,EAAK86V,MAAsB,aAAd96V,EAAKmqD,OACrBnqD,EAAK86V,KAAOqiE,EAAQriE,MAEjB96V,EAAKmqD,MAAsB,aAAdnqD,EAAKmqD,OACrBnqD,EAAKmqD,KAAOgzW,EAAQhzW,MAEtBnqD,EAAKohB,OAAS,IAEZg8Y,IACFp9Z,EAAK66V,SAAW,GAEpB,CACA,OAAA2iE,CAAQ/sU,GACN,MAAMgtU,EAAY,mBAAmBh1Y,KAAKgoE,GACtCgtU,IACFjia,KAAKi1F,KAAOgtU,EAAU,GACtBjia,KAAKupP,UAAY04K,EAAU,GAC3Bjia,KAAKwjS,KAAOy+H,EAAU,IAExBjia,KAAK4lB,OAAS,GACd5lB,KAAKkia,QACP,CACA,UAAAC,CAAWvE,GACT,GAAY,OAARA,EACF,OAAOA,EAET,MAAMwE,EAAc,IAAIZ,GAAI5D,EAAK,CAAEz+D,SAAUn/V,OAC7C,GAAyB,aAArBoia,EAAYzzW,MAAuB3uD,KAAK2uD,OAASyzW,EAAYzzW,MAAQyzW,EAAYzzW,MAAQ3uD,KAAKs/V,OAAS8iE,EAAY9iE,MAAQt/V,KAAKq/V,WAAa+iE,EAAY/iE,UAAqC,KAAzB+iE,EAAY/iE,SACnL,OAAO+iE,EAAYF,SAErB,MAAMG,EAAKria,KAAKkia,SAAUI,EAAKF,EAAYF,SAC3C,GAAIG,IAAOC,GAAmC,MAA7BD,EAAG98Z,OAAO88Z,EAAG/wZ,OAAS,IAAc+wZ,EAAGl+S,OAAO,EAAGk+S,EAAG/wZ,OAAS,KAAOgxZ,EACnF,OAAOD,EAET,IAAIh5Q,EAASrpJ,KAAKuia,UAAUvia,KAAKi1F,KAAMmtU,EAAYntU,MAOnD,OANImtU,EAAYz9R,QACd0kB,GAAU,IAAM+4Q,EAAYz9R,OAE1By9R,EAAYjzP,SACd9lB,GAAU,IAAM+4Q,EAAYjzP,QAEvB9lB,CACT,CACA,UAAAs2E,CAAWi+L,EAAK4E,GACd,MAAMC,EAAc,IAAIjB,GAAI5D,EAAK,CAAEz+D,SAAUn/V,OAC7C,OAAOyia,EAAYP,OAAOM,GAAUxia,KAAKw/V,aAAaijE,GACxD,CACA,YAAAjjE,CAAao+D,GACX,GAAI59Z,KAAK2uD,MAAQivW,EAAIjvW,MAAQ3uD,KAAKq/V,UAAYu+D,EAAIv+D,SAAU,CAC1D,GAAIr/V,KAAKs/V,MAAQs+D,EAAIt+D,KACnB,OAAO,EAET,MAAMojE,EAAc1ia,KAAKq/V,SAAWshE,GAAc3ga,KAAKq/V,UAAY,KACnE,GAAIqjE,IAAgB1ia,KAAKs/V,MAAQojE,KAAiB9E,EAAIt+D,MAAQojE,GAC5D,OAAO,CAEX,CACA,OAAO,CACT,CACA,SAAAH,CAAUpjW,EAAM81B,GACd,IAA8BluE,EAAG4Z,EAA7BgiY,EAAa,EAAGz6Q,EAAM,GAC1B,MAAM06Q,EAAiBzjW,EAAKptC,UAAU,EAAGotC,EAAK6sC,YAAY,MAAM7kG,MAAM,KAChEiwC,EAAQ69C,EAAK9tF,MAAM,KACzB,GAAIy7Z,EAAetxZ,QAAU8lC,EAAM9lC,OACjC,IAAKyV,EAAI,EAAG4Z,EAAIiiY,EAAetxZ,OAAQyV,EAAI4Z,EAAG5Z,IAC5C,GAAIA,GAAKqwB,EAAM9lC,QAAUsxZ,EAAe77Y,KAAOqwB,EAAMrwB,GAAI,CACvD47Y,EAAa57Y,EAAI,EACjB,KACF,CAGJ,GAAI67Y,EAAetxZ,OAAS8lC,EAAM9lC,OAChC,IAAKyV,EAAI,EAAG4Z,EAAIyW,EAAM9lC,OAAQyV,EAAI4Z,EAAG5Z,IACnC,GAAIA,GAAK67Y,EAAetxZ,QAAUsxZ,EAAe77Y,KAAOqwB,EAAMrwB,GAAI,CAChE47Y,EAAa57Y,EAAI,EACjB,KACF,CAGJ,GAAmB,IAAf47Y,EACF,OAAO1tU,EAET,IAAKluE,EAAI,EAAG4Z,EAAIiiY,EAAetxZ,QAAUqxZ,EAAa,GAAI57Y,EAAI4Z,EAAG5Z,IAC/DmhI,GAAO,MAET,IAAKnhI,EAAI47Y,EAAa,EAAGhiY,EAAIyW,EAAM9lC,OAAQyV,EAAI4Z,EAAG5Z,IAE9CmhI,GADEnhI,IAAM47Y,EAAa,EACd,IAAMvrX,EAAMrwB,GAEZqwB,EAAMrwB,GAGjB,OAAOmhI,CACT,CACA,SAAA25Q,CAAU1iW,EAAM81B,GACd,IAAI4tU,EAAK,EACT,MAAMn9Q,EAAK,MAAMr+I,KAAK4tF,GAAQ,IAAM,GAC9B2tU,EAAiBzjW,EAAKh4D,MAAM,KAC5B27Z,EAAiB7tU,EAAK9tF,MAAM,KAC5B47Z,EAAY,GAClBtC,GAAOmC,GAAgBpiZ,IACjBA,GACFuiZ,EAAU9+Z,KAAKuc,EACjB,IAEF,MAAMwiZ,EAAY,GAClB,IAAK,IAAIj8Y,EAAI+7Y,EAAexxZ,OAAS,EAAGyV,GAAK,EAAGA,IACb,IAA7B+7Y,EAAe/7Y,GAAGzV,QAAsC,MAAtBwxZ,EAAe/7Y,KAG3B,OAAtB+7Y,EAAe/7Y,GAIf87Y,EAAK,EACPA,IAGFG,EAAU/+Z,KAAK6+Z,EAAe/7Y,IAP5B87Y,KASJ,MAAM97Y,EAAIg8Y,EAAUzxZ,OAASuxZ,EAC7B,IAAII,EAYJ,OAVEA,EADEl8Y,GAAK,EACGrR,GAAQstZ,GAAW9+Z,KAAK,KAExB6+Z,EAAUv9Z,MAAM,EAAGuhB,GAAG7iB,KAAK,KAAO,IAAMwR,GAAQstZ,GAAW9+Z,KAAK,KAE/C,IAAzB++Z,EAAQpkY,QAAQ,OAClBokY,EAAU,IAAMA,GAEdv9Q,GAAMu9Q,EAAQj3T,YAAY,OAASi3T,EAAQ3xZ,OAAS,IACtD2xZ,GAAWv9Q,GAENu9Q,CACT,CACA,MAAAf,CAAOgB,GAAc,GACnB,IAAI38Y,EA8BJ,OA7BKvmB,KAAK4lB,SAAUs9Y,IAClB38Y,EAAI,GACC28Y,IACClja,KAAKq/V,SACP94U,GAAKvmB,KAAKq/V,SAAW,MAErB94U,GAAK,KAEHvmB,KAAK+ha,WACPx7Y,GAAKvmB,KAAK+ha,SAAW,KAEnB/ha,KAAK2uD,OACPpoC,GAAKvmB,KAAK2uD,MAER3uD,KAAKs/V,OACP/4U,GAAK,IAAMvmB,KAAKs/V,OAGhBt/V,KAAKi1F,OACP1uE,GAAKvmB,KAAKi1F,MAERj1F,KAAK2kI,QACPp+G,GAAK,IAAMvmB,KAAK2kI,OAEd3kI,KAAKmvK,SACP5oJ,GAAK,IAAMvmB,KAAKmvK,QAElBnvK,KAAK4lB,OAASW,GAETvmB,KAAK4lB,MACd,EAGF,MAAMu9Y,GAAmB3yS,GAAMs2L,QAAQ,gEACjCs8G,GAAsB,gBAC5B,IAAIzyX,GAAM,EACV,MAAM0yX,GAAc,CAACp2Z,EAAMgvK,EAAU51K,EAAQ2E,EAAO8nL,KAClD,IAAIl+K,EAAI+/I,EAAI0yK,EAAIf,EAChB,MAAMppN,EAAW++D,EAAS/+D,SACpBu4P,EAAkBpvW,EAAO0zW,qBAxnfjB,IAynfV9sW,EAAKM,WAAyB0uK,EAASqnP,4BAA8B,SAASj8Z,KAA+B,QAAzBuN,EAAK3H,EAAKwmI,iBAA8B,IAAP7+H,EAAgBA,EAAK,MAC5I3H,EAAKwmI,UAAY,IAAMxmI,EAAKwmI,WAE9B,MAAM8vR,EAA6E,QAAhE5uQ,EAAa,OAARm+B,QAAwB,IAARA,OAAiB,EAASA,EAAIxsL,eAA4B,IAAPquJ,EAAgBA,EAAK1nJ,EAAK4oH,SAASnwH,cAC9H,GAAc,SAAVsF,GAAoB3E,EAAOwgH,QAAQ77G,GAIrC,YAHIimH,EAAc6hE,KAChBA,EAAIwwE,YAAYigK,IAAa,IAIjC,GAhofc,IAgofVt2Z,EAAKM,UAAsC,SAAdg2Z,EAC/B,OAEF,MAAM9+Z,EAAUuyH,GAAaS,QAAQxqH,GAC/Bu2Z,EAAoBluS,GAAM7wH,EAAS2+Z,IACnCK,EAAQ/9R,GAAMjhI,EAAS,kBAC7B,IAAK++Z,GAAqB3yS,EAAS4yS,GAMjC,YALc,QAAVA,EACF5lN,GAASp5M,GAET01H,GAAO11H,IAIX,MAAMilK,EAAOrjK,EAAOkzW,eAAegqD,GACnC,IAAIrmT,GAAawsD,GAYjB,GAJMz4C,EAAc6hE,KAChBA,EAAIwwE,YAAYigK,IAAa,GAG7BrmT,GAAYwsD,IAAS85P,EAAmB,CAS1C,GARApgE,EAAwC,QAAhC/7B,EAAK39J,EAAK4qM,wBAAqC,IAAPjtC,EAAgBA,EAAK,IAAIvwM,IACvEovO,GAAMzhW,EAASqyH,EAAK1uH,KAAqB,WAAf0uH,EAAK1yH,MAAqB,OAAQusC,KAAWmmF,EAAK1yH,MAAM,IAEpFg/V,EAAyC,QAAjC98B,EAAK58J,EAAK2qM,yBAAsC,IAAP/tC,EAAgBA,EAAK,IAAIxvM,IACnExB,GAAM7wH,EAASqyH,EAAK1uH,OACvB89V,GAAMzhW,EAASqyH,EAAK1uH,KAAqB,WAAf0uH,EAAK1yH,MAAqB,OAAQusC,KAAWmmF,EAAK1yH,MAC9E,IAEEslK,EAAK0qM,qBAAuB9hP,EAAOo3C,EAAK0qM,oBAAoBt9O,GAAQxB,GAAM7wH,EAASqyH,KAErF,YADAqD,GAAO11H,GAGT,GAAIilK,EAAKoqM,kBA1nfGrvW,KACd,MAAMgyH,EAAQhyH,EAAQmxH,IAAIvtH,WAC1B,YAAiBxC,IAAV4wH,GAAiC,OAAVA,GAAmC,IAAjBA,EAAMnlH,MAAY,EAwnfnCoyZ,CAAQj/Z,GAEnC,YADA01H,GAAO11H,GAGLilK,EAAK6pM,YAAc7pM,EAAK6pM,aAAegwD,GACzCzuR,GAAOrwI,EAASilK,EAAK6pM,WAEzB,OA/BM5pK,GAAM8rK,EAAiB8tD,GACzB1lN,GAASp5M,GAET01H,GAAO11H,EA4BX,EAkBIk/Z,GAAsB,CAAC1nP,EAAU51K,EAAQ2E,EAAO1E,EAAS69P,EAAUC,IACzD,SAAVp5P,IAAqBwgW,GAAyBllW,MAGzC69P,KAAYg/J,IAAoBlC,GAAahlP,EAAUmoF,EAAW99P,OAAe21K,EAAS/+D,UAAY72G,EAAOwgH,QAAQvgH,EAAS69P,IAAanlN,GAAWmlN,EAAU,UAAYnlN,GAAWmlN,EAAU,UAEtMy/J,GAAuC,CAACt7K,EAAK6b,IAAa7b,EAAIt6O,aAAao1Z,MAAsC,OAAbj/J,GAAkC,UAAbA,GAAqC,UAAbA,GACjJ0/J,GAAqB,CAAC1/J,EAAU99P,IAAW89P,KAAY99P,EAAOszW,eAC9DmqD,GAAmB,CAACx7K,EAAKrsE,EAAU51K,EAAQ2E,KAC/C,MAAM,WAAC3C,GAAcigP,EACrB,IAAK,IAAIvhO,EAAI1e,EAAWiJ,OAAS,EAAGyV,GAAK,EAAGA,IAAK,CAC/C,MAAM+vG,EAAOzuH,EAAW0e,GAClBo9O,EAAWrtI,EAAK1uH,KAChBg8P,EAAYttI,EAAK1yH,MAClBu/Z,GAAoB1nP,EAAU51K,EAAQ2E,EAAOs9O,EAAIhiP,QAAQZ,cAAey+P,EAAUC,IAAew/J,GAAqCt7K,EAAK6b,GAErI0/J,GAAmB1/J,EAAU99P,IACtCiiP,EAAI5sO,aAAayoP,EAAUA,GAF3B7b,EAAI3sO,gBAAgBwoP,EAIxB,GAEI4/J,GAAc,CAAC9nP,EAAU51K,EAAQ29Z,KACrC,MAAMC,EAAW3nK,KAOjB,OANA2nK,EAASx+J,QAAQ,uBAAuB,CAACnd,EAAKx1D,KAC5CuwO,GAAY/6K,EAAKrsE,EAAU51K,EAAQ29Z,EAAiBE,MAAM57K,GAAMx1D,EAAI,IAEtEmxO,EAASx+J,QAAQ,yBAAyB,CAACnd,EAAKx1D,KA1C9B,EAACw1D,EAAKrsE,EAAU51K,EAAQ2E,EAAO8nL,KACjD,MAAMxsL,EAAUgiP,EAAIhiP,QAAQZ,eACtB,SAACy+P,EAAQ,UAAEC,GAAatxE,EAC9BA,EAAIuxE,SAAWs/J,GAAoB1nP,EAAU51K,EAAQ2E,EAAO1E,EAAS69P,EAAUC,GAC3EtxE,EAAIuxE,UACNvxE,EAAIwxE,kBAAkBH,IAAY,EAC9B0/J,GAAmB1/J,EAAU99P,KAC/BysL,EAAIsxE,UAAYD,GAEdloF,EAASkR,qBAAuBnuI,GAAWolN,EAAW,wBACxDtxE,EAAIyxE,eAAgB,IAEbq/J,GAAqCt7K,EAAK6b,KACnDrxE,EAAIyxE,eAAgB,EACtB,EA6BE4/J,CAAY77K,EAAKrsE,EAAU51K,EAAQ29Z,EAAiB1xX,UAAWwgJ,EAAI,IAE9DmxO,CAAQ,EAkEXG,GAA6BnoP,GAAYqsE,IAC7C,MAAM+7K,EAAgB34D,GAAYpjH,GAClC,GAAsB,QAAlB+7K,EA7CqB/7K,KACzB,MAAMg8K,EAAa,CACjB,OACA,OACA,OACA,UACA,QACA,OACA,UACA,QACA,OACA,MACAzha,KAAIuF,GAAQ,SAAUA,MAClBwvB,EAAS,CACb6nO,UAAU,EACVC,aAAc,CACZxoI,MAAM,EACNokI,KAAK,EACLL,YAAY,GAEdiD,aAAcomK,GAEhBhoK,KAAS9tE,SAAS85D,EAAK1wN,EAAO,EAwB5B2sY,CAAmBj8K,OACd,IAAsB,SAAlB+7K,EAGT,MAAM,IAAI56Z,MAAM,2BA1BU,EAACwD,EAAMgvK,KACnC,MAIMgoP,EAAW3nK,KACjB2nK,EAASx+J,QAAQ,uBAAuB,CAACx4P,EAAM6lL,KAC7C,IAAIl+K,EACJ,MAAM2uZ,EAAmC,QAAtB3uZ,EAAKk+K,EAAIxsL,eAA4B,IAAPsO,EAAgBA,EAAK3H,EAAK4oH,SAASnwH,cAC9E8+Z,EAAmBvoP,EAASwoP,kCAClC,GAAkB,eAAdlB,GAA8BtgE,EAAUuhE,IAAqBA,EAAiBlzZ,OAAS,EAAG,CAC5F,MAAMozZ,EAAWz3Z,EAAK3D,aAAa,YAC/BunH,EAAS6zS,IAAapxS,EAAWkxS,EAAkBE,KACrD5xO,EAAIwwE,YAAYigK,IAAa,EAEjC,KAEFU,EAASz1O,SAASvhL,EAhBH,CACbwyP,UAAU,EACVC,aAAc,CAAEnE,QAAQ,IAcK,EAO7BopK,CAAsBr8K,EAAKrsE,EAG7B,GAEI2oP,GAAe,CAAC3oP,EAAU51K,KAC9B,MAAM29Z,EA/yduB,MAC7B,MAAMa,EAAe11N,KACf78J,EAAU,IAAMuyX,EAAalha,MAAMd,IAAI6oW,IAAal5O,MAAM,QAYhE,MAAO,CACL0xS,MAZYj3Z,IACRw+V,GAAqBx+V,GACvB43Z,EAAahha,IAAIoJ,GACR43Z,EAAalha,MAAM2uH,QAAOwyS,IAAcA,EAAU/5Z,SAASkC,MACpE43Z,EAAa1xZ,QAERm/B,KAOPA,UACAosB,MANY,KACZmmW,EAAa1xZ,OAAO,EAMrB,EA6xdwB4xZ,GACzB,GAAI9oP,EAASuS,SAAU,CACrB,MAAM8tE,EAASynK,GAAY9nP,EAAU51K,EAAQ29Z,GACvCgB,EAAsB,CAACztZ,EAAM0tZ,KACjC3oK,EAAO9tE,SAASj3K,EA/EE,EAAC0kK,EAAUgpP,KACjC,MAWMrtY,EAAS,CAVb6nO,UAAU,EACVb,yBAAyB,EACzBZ,aAAc,CACZ,WACA,iBACA,QAEFE,aAAc,GACda,cAAc,GAShB,OANAnnO,EAAO4oO,kBAAoBykK,EACvBhpP,EAASiR,kBACXt1J,EAAOqpO,mBAAqB,KACnBhlF,EAASgR,uBAClBr1J,EAAOqpO,mBAAqB,4BAEvBrpO,CAAM,EA4DastY,CAAgBjpP,EAAUgpP,IAChD3oK,EAAOv4L,QAAU,GACjBigW,EAAiBtlW,OAAO,EAE1B,MAAO,CACLsmW,sBACAG,yBAA0Bf,GAA2BnoP,GAEzD,CAcE,MAAO,CACL+oP,oBAd0B,CAACztZ,EAAM6tZ,KACjC,MAAMpgK,EAAejgQ,SAAS44P,mBAAmBpmP,EAAMslP,WAAW6F,aAAe7F,WAAW8F,aAAe9F,WAAW+F,WACtH,IAAI31P,EACJ,KAAOA,EAAO+3P,EAAaH,YAAY,CACrC,MAAMggK,EAAeb,EAAiBE,MAAMj3Z,GAC5Co2Z,GAAYp2Z,EAAMgvK,EAAU51K,EAAQw+Z,GAChCl8D,GAAY17V,IACd62Z,GAAiB72Z,EAAMgvK,EAAU51K,EAAQw+Z,EAE7C,CACAb,EAAiBtlW,OAAO,EAKxBymW,yBAH+Bz0X,EAKnC,EAGIo2Q,GAAUt2L,GAAMs2L,QAASu+G,GAAW70S,GAAMn3G,OAC1CisZ,GAAmB,CAACn6W,EAAQo6W,EAAc9vD,EAAiB+vD,KAC/D,MAAM7lS,EAAax0E,EAAO/iD,KACpBwzI,EAAYjc,KAAc81O,GAAkC,UAAf91O,GAAyC,aAAfA,GAA4C,aAAfA,EACpGtI,EAAakuS,EAAaluS,WAChC,IAAK,IAAI0+O,EAAK,EAAGizC,EAAK3xR,EAAW/lH,OAAQykW,EAAKizC,EAAIjzC,IAAM,CACtD,MAAM0vD,EAAcpuS,EAAW0+O,GACzBn5O,EAAQ,IAAI05Q,GAAQmvB,EAAY5vS,SAASnwH,cAAe+/Z,EAAYl4Z,UAC1E,GAAIo7V,GAAY88D,GAAc,CAC5B,MAAMp9Z,EAAao9Z,EAAYp9Z,WAC/B,IAAK,IAAI4gZ,EAAK,EAAGhzI,EAAK5tQ,EAAWiJ,OAAQ23Y,EAAKhzI,EAAIgzI,IAAM,CACtD,MAAMnyR,EAAOzuH,EAAW4gZ,GACxBrsR,EAAM9F,KAAKA,EAAK1uH,KAAM0uH,EAAK1yH,MAC7B,CACIonW,GAAyB5uO,EAAMx0H,QACjCo9Z,EAAYC,GACZ7oS,EAAMx4H,MAAQqha,EAAY/yY,UAE9B,MAAWw2U,GAASu8D,IAClB7oS,EAAMx4H,MAAQqha,EAAY3xZ,KACtB8nI,IACFhf,EAAM3uG,KAAM,KAEL8nG,GAAU0vS,IAAgBt8D,GAAQs8D,IAAgBr8D,GAAKq8D,MAChE7oS,EAAMx4H,MAAQqha,EAAY3xZ,MAEvB03V,GAAyB5uO,EAAMx0H,OAClCk9Z,GAAiB1oS,EAAO6oS,EAAahwD,EAAiB+vD,GAExDr6W,EAAO6uE,OAAO4C,EAChB,GAkBI8oS,GAAoB,CAAC3oX,EAAM12C,EAAQ41K,EAAUhjK,KACjD,MAAMikG,EAAW++D,EAAS/+D,SACpBysS,EAAmBtjZ,EAAO29L,sBAC1BsmK,EAAqBjkW,EAAOkkW,wBAC5BvzK,EAAgBquO,GAASv+G,GAAQ,gDAAiDzgT,EAAOsxL,oBACzFguO,EAAwBvwD,GAAyB/uW,GACjDu/Z,EAAsB,cACtBC,EAAwB,cACxBC,EAAsB,cACtBC,EAAsB94Z,IAC1B,IAAIq4S,EAAWr4S,EAAKk+C,OACpB,KAAO8lE,EAAcq0L,IAAW,CAC9B,GAAIA,EAASl9S,QAAQkiW,EACnB,OAAO,EAEPhlD,EAAWA,EAASn6P,MAExB,CACA,OAAO,CAAK,EAaRorF,EAAUtpI,GAAQA,EAAK7E,QAAQ4uL,GAAiB22K,GAAsBtnW,EAAQ4G,IAASu+V,GAAyBv+V,EAAK7E,OAAS6E,EAAKk+C,SAAWpO,EAC9IipX,EAAkB,CAAC/4Z,EAAM5K,KAC7B,MAAM4ja,EAAY5ja,EAAQ4K,EAAKkhD,KAAOlhD,EAAKo/C,KAC3C,OAAI4kE,EAAcg1S,KAAc/0S,EAAWjkH,EAAKk+C,UAGzCorF,EAAQtpI,EAAKk+C,UAAYl+C,EAAKk+C,SAAWpO,IAA+B,IAAvB9jC,EAAK+2Y,eAAuB,EAqDtF,MAAO,CAnDY/iZ,IACjB,IAAI2H,EACJ,GAAkB,IAAd3H,EAAKV,OACFw5Z,EAAoB94Z,GAAO,CAC9B,IAAIuf,EAA6B,QAArB5X,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,GAC9D4X,EAAOA,EAAKvnB,QAAQ2ga,EAAqB,MA/mJzB,EAAC34Z,EAAMspI,IAAYtlB,EAAchkH,KAAUspI,EAAQtpI,IAAuB,OAAdA,EAAK7E,MAgnJ7E89Z,CAAgBj5Z,EAAKkhD,KAAMooF,IAAYyvR,EAAgB/4Z,GAAM,MAC/Duf,EAAOA,EAAKvnB,QAAQ4ga,EAAuB,KAEzB,IAAhBr5Y,EAAKlb,QAEW,MAATkb,GAAgBvf,EAAKkhD,MAj7fxB,IAi7fgClhD,EAAKkhD,KAAK5hD,MAAoBU,EAAKo/C,MAj7fnE,IAi7f2Ep/C,EAAKo/C,KAAK9/C,KAD3FU,EAAK0qD,SAIL1qD,EAAK7I,MAAQooB,CAEjB,CACF,EAEkBvf,IAClB,IAAI2H,EACJ,GAAkB,IAAd3H,EAAKV,KAAY,CACnB,MAAMgtY,EAAclzY,EAAOkzW,eAAetsW,EAAK7E,MAC/C,GAAI80G,GAAYq8R,EAAa,CAC3B,MAAM4sB,EAAc3hQ,GAAQn+J,EAAQsjZ,EAAkBr/C,EAAoBr9V,GACtEssY,EAAYp/B,kBAAoBgsD,GA5Cbl5Z,KAC3B,IAAIq4S,EAAWr4S,EACf,KAAOgkH,EAAcq0L,IAAW,CAC9B,GAAIA,EAASl9S,QAAQu9Z,EACnB,OAAOnhQ,GAAQn+J,EAAQsjZ,EAAkBr/C,EAAoBhlD,GAE7DA,EAAWA,EAASn6P,MAExB,CACA,OAAO,CAAK,EAmC2Ci7W,CAAqBn5Z,GACtEs8Y,GAActtO,EAAUhjK,EAAMs9H,EAAStpI,GAC9BssY,EAAY1lC,aAAesyD,EAChC5vR,EAAQtpI,GACVA,EAAK0qD,SAEL1qD,EAAKktH,SAEEo/Q,EAAY3lC,YAAcuyD,GAxpJpBl5Z,KACvB,IAAI2H,EACJ,OAAO80Y,GAAaz8Y,EAAM,WAAoF,QAAtE2H,EAAc,OAAT3H,QAA0B,IAATA,OAAkB,EAASA,EAAK4sH,kBAA+B,IAAPjlH,OAAgB,EAASA,EAAGxQ,SAAWsjW,EAAI,EAspJvG2+D,CAAiBp5Z,KACnEs8Y,GAActtO,EAAUhjK,EAAMs9H,EAAStpI,EAE3C,CACF,MAAO,GAAkB,IAAdA,EAAKV,OACTw5Z,EAAoB94Z,GAAO,CAC9B,IAAIuf,EAA6B,QAArB5X,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,IAC1D3H,EAAKo/C,MAAQkqF,EAAQtpI,EAAKo/C,OAAS25W,EAAgB/4Z,GAAM,MAC3Duf,EAAOA,EAAKvnB,QAAQ6ga,EAAqB,KAEvB,IAAhBt5Y,EAAKlb,OACPrE,EAAK0qD,SAEL1qD,EAAK7I,MAAQooB,CAEjB,CACF,EAKD,EAaG85Y,GAAY,CAACrqP,EAAW,CAAC,EAAG51K,EAASivW,QACzC,MAAMixD,EAAqB3J,KACrB4J,EAA0B5J,KAC1B6J,EAAoB,CACxBvpT,UAAU,EACVwpT,UAAW,OACXl4O,UAAU,KACPvS,GAECzpE,EAAS,IAAIyqJ,UACb0pK,EAAY/B,GAAa6B,EAAmBpga,GAkB5CiiM,EAAgBi+N,EAAmB1J,UACnCtO,EAAiBgY,EAAmBzJ,WACpC8J,EAAmBL,EAAmBxJ,aACtC1yB,EAAqBm8B,EAAwB3J,UAC7CrO,EAAsBgY,EAAwB1J,WAC9C+J,EAAwBL,EAAwBzJ,aAMhD+J,EAAkB,CAAC9vO,EAAe/pL,KACtC,MAAMu2Z,EAAoB3yS,EAAS5jH,EAAK6pH,KAAKssS,KACvC3iB,EAAgC,IAAdxzY,EAAKV,OAAgBo9L,GAAM3S,EAAe/pL,EAAK7E,QAAUulW,GAAsBtnW,EAAQ4G,KAAWu+V,GAAyBv+V,EAAK7E,MACxJ,OAAqB,IAAd6E,EAAKV,MAAck0Y,IAAoB+iB,CAAiB,EAwF3Dx1S,EAAU,CACd3nH,SACAgkY,qBACAmkB,sBACAqY,wBACAv+N,gBACAimN,iBACAqY,mBACAj9Z,MAtDY,CAACutH,EAAMj+G,EAAO,CAAC,KAC3B,IAAIrE,EACJ,MAAMsoG,EAAWupT,EAAkBvpT,SAC7B6pT,EAAmC,QAAvBnyZ,EAAKqE,EAAKnP,eAA4B,IAAP8K,EAAgBA,EAAK6xZ,EAAkBC,UAClFjia,EA7E4B,EAACyyH,EAAM6vS,EAAUlrX,EAAS,UAC5D,MAAMopX,EAAsB,UAAXppX,EAAqB,wBAA0B,YAC1DmrX,EAAgBr9N,GAAMtjM,EAAO0zW,qBAAsBgtD,EAASrha,eAC5D6B,EAAUy/Z,EAAgB,IAAKD,KAAc7vS,MAAW6vS,KAAe7vS,EAUvE3/G,EAAOi7F,EAAO+vJ,gBARH,UAAX1mN,EACK,iEAAkEt0C,kBAChE,eAAeF,KAAK6vH,IAAS,eAAe7vH,KAAK6vH,IAAS,mBAAmB7vH,KAAK6vH,GACpF,SAAU3vH,WAEV,SAAUA,WAG2B09Z,GAAU1tZ,KAE1D,OADAovZ,EAAU3B,oBAAoBztZ,EAAM0tZ,GAC7B+B,EAAgBzvZ,EAAKsiH,WAAatiH,CAAI,EA8D7B0vZ,CAA4B/vS,EAAM6vS,EAAU9tZ,EAAK4iC,QACjEuxT,GAAe/mW,EAAQ5B,GACvB,MAAMi3V,EAAW,IAAI46C,GAAQywB,EAAU,IACvCzB,GAAiB5pE,EAAUj3V,EAAS4B,EAAO0zW,qBAAsB4sD,EAAUxB,0BAC3E1ga,EAAQiuB,UAAY,GACpB,MAAOw0Y,EAAeC,GAAkBzB,GAAkBhqE,EAAUr1V,EAAQoga,EAAmBxtZ,GACzF4zV,EAAkB,GAClBu6D,EAAgBlqT,EAAWjwG,GA7DP,EAACA,EAAM4/V,KAC7Bn7E,GAAUrrR,EAAQ4G,IACpB4/V,EAAgB5oW,KAAKgJ,EACvB,EA0DyCo6Z,CAAoBp6Z,EAAM4/V,GAAmBn8T,EAChF3pC,EAAU,CACdiG,MAAO,CAAC,EACR3E,WAAY,CAAC,GAETi/Z,EAAcr6Z,GAAQ47Y,GAAY0F,IAAkBC,IAAuBvhZ,EAAMlG,GASvF,GAvOa,EAACg2C,EAAMwqX,EAAeC,KACrC,MAAMC,EAAgB,GACtB,IAAK,IAAIx6Z,EAAO8vC,EAAMs4F,EAAWpoI,EAAMA,EAAMooI,EAAWpoI,EAAMA,EAAOA,EAAK04V,OAAQ,CAChF,MAAMrgD,EAAWr4S,EACjBm2V,EAAOmkE,GAAe73O,GAAcA,EAAW41H,KAC3Cp0L,EAAWo0L,EAASn6P,SAAWm6P,IAAavoQ,EAC9C9vC,EAAOooI,EAEPoyR,EAAcxja,KAAKqhT,EAEvB,CACA,IAAK,IAAIv+R,EAAI0gZ,EAAcn2Z,OAAS,EAAGyV,GAAK,EAAGA,IAAK,CAClD,MAAM9Z,EAAOw6Z,EAAc1gZ,GAC3Bq8U,EAAOokE,GAAgBnlI,GAAeA,EAAYp1R,IACpD,GAiNEy6Z,CAAShsE,EAAU,CACjBwrE,EACAI,GACC,CACDH,EACAC,IAEFv6D,EAAgBn3V,UACZwnG,GAAY2vP,EAAgBv7V,OAAS,EACvC,GAAI2H,EAAKnP,QAAS,CAChB,MACEgqH,KAAM6zS,EACN5zS,KAAM6zS,GACJvkE,EAAYwJ,GAAiBjwO,GAASA,EAAMzxE,SAAWuwS,IAC3DuuD,GAAkB2d,EAAevha,EAAQq1V,EAAU4rE,GACnDruZ,EAAKgkJ,QAAU0qQ,EAAiBr2Z,OAAS,CAC3C,MACE24Y,GAAkBp9C,EAAiBxmW,EAAQq1V,EAAU4rE,GAGzD,MAAMO,EApIe,EAAC5rP,EAAUhjK,KAClC,IAAIrE,EACJ,MAAMxM,EAAyC,QAAjCwM,EAAKqE,EAAK6uZ,yBAAsC,IAAPlzZ,EAAgBA,EAAKqnK,EAAS6rP,kBACrF,OAAa,IAAT1/Z,EACK,IACW,IAATA,EACF,IAEAA,CACT,EA2HwB2/Z,CAAiBtB,EAAmBxtZ,GAO1D,OANI4uZ,IAAoC,SAAlBnsE,EAAStzV,MAAmB6Q,EAAK+2Y,gBA9EnC,EAACt0D,EAAUmsE,KAC/B,MAAM7wO,EAAgBquO,GAASv+G,GAAQ,gDAAiDzgT,EAAOsxL,oBACzFkuO,EAAwB,cACxBC,EAAsB,cAC5B,IAAI74Z,EAAOyuV,EAAS7hO,WAAYmuS,EAAgB,KAChD,MAAMhha,EAAOiha,IACX,IAAIrzZ,EAAI+/I,EACJszQ,IACFh7Z,EAAOg7Z,EAAUpuS,WACb5sH,GAAsB,IAAdA,EAAKV,OACfU,EAAK7I,MAA8B,QAArBwQ,EAAK3H,EAAK7I,aAA0B,IAAPwQ,OAAgB,EAASA,EAAG3P,QAAQ4ga,EAAuB,KAExG54Z,EAAOg7Z,EAAU5xO,UACbppL,GAAsB,IAAdA,EAAKV,OACfU,EAAK7I,MAA8B,QAArBuwJ,EAAK1nJ,EAAK7I,aAA0B,IAAPuwJ,OAAgB,EAASA,EAAG1vJ,QAAQ6ga,EAAqB,KAExG,EAEF,GAAKz/Z,EAAOm0L,aAAakhK,EAAStzV,KAAMy/Z,EAAcnia,eAAtD,CAGA,KAAOuH,GAAM,CACX,MAAMo/C,EAAOp/C,EAAKo/C,KACdy6W,EAAgB9vO,EAAe/pL,IAC5B+6Z,IACHA,EAAgB,IAAI1xB,GAAQuxB,EAAe,GAC3CG,EAAclxS,KAAK2vS,EAAkByB,yBACrCxsE,EAASngN,OAAOysR,EAAe/6Z,IAG/B+6Z,EAAchuS,OAAO/sH,KAGvBjG,EAAKgha,GACLA,EAAgB,MAElB/6Z,EAAOo/C,CACT,CACArlD,EAAKgha,EAlBL,CAkBmB,EAyCjBG,CAAczsE,EAAUmsE,GAErB5uZ,EAAKgkJ,SACRisP,GAAWniZ,EAASkS,GAEfyiV,CAAQ,GAcjB,MA77EiB,EAAClpP,EAAQypE,KAC1B,IAAIrnK,EAAI+/I,EACR,MAAMtuJ,EAASmsG,EAAOnsG,OACtBmsG,EAAO63R,mBAAmB,QAAQr9X,IAChC,IAAI+Z,EAAI/Z,EAAMsE,OACd,MAIM82Z,EAAch7S,IAClB,MAAM2+D,EAAS3+D,EAAMoD,GAAMxpH,KAAKomH,GAAO,GACvC,MAAK,kBAAkB/lH,KAAK0kL,GAGnBA,EATO3+D,IACFA,EAAIjmH,MAAM,KAAKW,QAAO2nC,GAAKA,EAAEn+B,OAAS,IACvCxO,OAAO,CAAC,aAAapB,OAAOwC,KAAK,KAKrCmka,CAAUt8O,EAGnB,EAEF,IAAK9P,EAASqsP,yBACZ,KAAOvhZ,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACD,MAAd9Z,EAAK7E,MAAwC,WAAxB6E,EAAK6pH,KAAK,WACjC7pH,EAAK6pH,KAAK,MAAOsxS,EAAYn7Z,EAAK6pH,KAAK,QAE3C,CACF,IAEGmlD,EAASssP,4BACZ/1T,EAAO63R,mBAAmB,WAAWr9X,IACnC,IAAsBq8J,EAASpwC,EAAa9tE,EAAQl+C,EAAhD8Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAEL,GADA9Z,EAAOD,EAAM+Z,GACK,MAAd9Z,EAAK7E,MAAgB6E,EAAK4sH,aAAe5sH,EAAK6pH,KAAK,QAGrD,IAFA3rE,EAASl+C,EAAKk+C,OACdk+G,EAAUp8J,EAAKopL,UACRhtB,GAAWl+G,GAChB8tE,EAAcowC,EAAQl7G,KACtBhD,EAAOowF,OAAO8tB,EAASp8J,GACvBo8J,EAAUpwC,CAGhB,IAGAgjD,EAASusP,mBACXh2T,EAAO81F,cAAc,SAASt7L,IAC5B,IAAsBC,EAAM0wB,EAAxB5W,EAAI/Z,EAAMsE,OACd,KAAOyV,KAGL,GAFA9Z,EAAOD,EAAM+Z,GACb4W,EAAa1wB,EAAKk+C,OACdxtB,IAAmC,OAApBA,EAAWv1B,MAAqC,OAApBu1B,EAAWv1B,MACxD,GAAI6E,EAAKkhD,MAA2B,OAAnBlhD,EAAKkhD,KAAK/lD,KACzB6E,EAAKkhD,KAAK6rE,OAAO/sH,OACZ,CACL,MAAMorL,EAAK,IAAIi+M,GAAQ,KAAM,GAC7Bj+M,EAAGvhE,KAAK,QAAS,yBACjB7pH,EAAK4kE,KAAKwmH,EACZ,CAEJ,IAGJ,MAAMw+K,EAAexwW,EAAOqzW,kBACxBz9L,EAAS/+D,UAAY25P,GACvBrkQ,EAAO63R,mBAAmB,SAASr9X,IACjC,IAAI4H,EACJ,IAAImS,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACb89I,EAAsC,QAA7BjwJ,EAAK3H,EAAK6pH,KAAK,gBAA6B,IAAPliH,EAAgBA,EAAK,GACnEohK,EAAYxlD,GAAM+yK,QAAQ1+H,EAAO,KACvC,IAAI4jQ,EAAa,GACjB,IAAK,IAAI3lU,EAAK,EAAGA,EAAKkzE,EAAU1kK,OAAQwxF,IAAM,CAC5C,MAAMyhF,EAAYvO,EAAUlzE,GAC5B,IAAI7zD,GAAQ,EACRy5X,EAAkB7xD,EAAa,KAC/B6xD,GAAmBA,EAAgBnkP,KACrCt1I,GAAQ,GAEVy5X,EAAkB7xD,EAAa5pW,EAAK7E,OAC/B6mC,GAASy5X,GAAmBA,EAAgBnkP,KAC/Ct1I,GAAQ,GAENA,IACEw5X,IACFA,GAAc,KAEhBA,GAAclkP,EAElB,CACKkkP,EAAWn3Z,SACdm3Z,EAAa,MAEfx7Z,EAAK6pH,KAAK,QAAS2xS,EACrB,KAGJxI,GAA0BztT,EAAQypE,GAClC,MAAM89M,EAA2D,QAAnCnlX,EAAKqnK,EAAS0sP,uBAAoC,IAAP/zZ,GAAgBA,EACnFkrZ,EAA2Br8D,GAAwD,QAA9C9uM,EAAKsnB,EAAS2sP,kCAA+C,IAAPj0Q,EAAgBA,EAAK,IAClHsnB,EAAS4sP,uBACXr2T,EAAO81F,cAAc,gBAAgBt7L,GAASo2V,EAAOp2V,GAAOC,IAC1DA,EAAKhI,QAAQ26Z,GAAgB,CAC3BrzZ,KAAMU,EAAK6pH,KAAK,QAChB75F,IAAmB,WAAdhwB,EAAK7E,KAAoB6E,EAAK6pH,KAAK,QAAU7pH,EAAK6pH,KAAK,OAC5DhmG,MAAO7jB,EAAK6pH,KAAK,SACjBvgG,OAAQtpB,EAAK6pH,KAAK,WACjBijQ,EAAsB+lC,GAA0B,MAGnD/lC,GACFvnR,EAAO81F,cAAc,UAAUt7L,GAASo2V,EAAOp2V,GAAOC,GAAQsyZ,GAActyZ,EAAM6yZ,MACpF,EA40EAtnF,CAAWxqN,EAASy4S,GAxmFH,EAACvJ,EAAWjhP,EAAU51K,KACnC41K,EAAS6sP,eACXxL,GAAWJ,EAAWjhP,EAAU51K,EAClC,EAsmFAwwU,CAAW7oN,EAASy4S,EAAmBpga,GAChC2nH,CAAO,EAIV+6S,GAAwB,CAACxha,EAASyha,EAAWC,KACjD,MAAMC,EAFiB3ha,IAAWioZ,GAAWjoZ,GAAW8xY,GAAe,CAAEn8R,UAAU,IAASikC,UAAU55I,GAAWA,EAEvF4ha,CAAiB5ha,GACrC6ha,EAAYJ,EAAUE,GAC5B,GAAIE,EAAUp0O,qBACZ,OAAOo0O,EACF,GAAI5Z,GAAWjoZ,GAAU,CAC9B,GAAI6ha,EAAU7ha,UAAY2ha,EAAmB,CAC3C,MAAMxtE,EAAW4qE,GAAU,CACzBppT,UAAU,EACV4qT,mBAAmB,KAChBmB,IACFt/Z,MAAMy/Z,EAAU7ha,QAAS,CAAEuC,QAASvC,EAAQa,OAC/C,MAAO,IACFgha,EACH7ha,QAASm0V,EAEb,CACE,MAAO,IACF0tE,EACH7ha,UAGN,CACE,OAAO6ha,CACT,EAEIC,GAAqBpzR,IAAU,CACnCu4C,SAAUirM,GAAkBxjP,GAC5B0yR,gBAAiB5uC,GAAqB9jP,GACtC2yR,2BAA4B5uC,GAA4B/jP,KAEpDqzR,GAAuB,CAACrzR,EAAQh9H,KACpC,GAAIA,EAAKoqJ,UACP,OAAO3Z,GAAOtlJ,MAAM6U,GACf,CACL,MAAMmwZ,EAp+PmB,EAACnzR,EAAQh9H,IAASg9H,EAAO7xH,SAAS,mBAAoBnL,GAo+P7DswZ,CAAqBtzR,EAAQh9H,GAC/C,OAAImwZ,EAAUp0O,qBACLtrC,GAAOvmJ,MAAM+nY,GAAej1P,EAAQ,CACzC1uI,QAAS,MACN6ha,IACF7ha,SAEImiJ,GAAOtlJ,MAAMgla,EAExB,GAEII,GAAwB,CAACvzR,EAAQ1uI,EAAS0R,KAC9C,GAAIA,EAAKoqJ,UACP,OAAO97J,EACF,CACL,MAAMkia,EAAqBV,GAAsBxha,GAASA,GAAW2jY,GAAej1P,EAAQ,IACvFh9H,EACH1R,aACE8ha,GAAmBpzR,IACvB,OAAOwzR,EAAmBlia,OAC5B,GAEImia,GAAuB,CAACzzR,EAAQh9H,KACpC,GAAIA,EAAKoqJ,UACP,OAAO3Z,GAAOtlJ,MAAM6U,GACf,CACL,MAAMwwZ,EAAqBV,GAAsB9vZ,EAAK1R,SAASA,GAhgQtC,EAAC0uI,EAAQh9H,IAASg9H,EAAO7xH,SAAS,mBAAoBnL,GAggQL0wZ,CAAqB1zR,EAAQ,IAClGh9H,EACH1R,aACE8ha,GAAmBpzR,IACvB,OAAIwzR,EAAmBz0O,sBACrBi2M,GAAeh1P,EAAQwzR,GAChB//Q,GAAOvmJ,WAAM0C,IAEb6jJ,GAAOtlJ,MAAMqla,EAExB,GAEIG,GAAwB,CAAC3zR,EAAQ1uI,EAAS0R,KACzCA,EAAKoqJ,WACR4nO,GAAeh1P,EAAQ,IAClBh9H,EACH1R,WAEJ,EAGIsia,GAAa,CAACpla,EAASqsB,EAAOlC,KAAS,CAC3CnqB,UACAqsB,QACAlC,SAEIk7Y,GAAW,CAACrla,EAASu2H,KAAU,CACnCv2H,UACAu2H,UAEI+uS,GAAe,CAAC/9Y,EAAGJ,KAAM,CAC7BI,IACAJ,MAEIyyG,GAAU,CAACkT,EAAIvtI,IACZ2yH,GAAO4a,EAAIvtI,GAAKmmE,KAAKo6R,IAAO/xO,MAAM,GAgBrCw3S,GAAa,CAAC3zX,EAAOrqB,EAAGJ,KAC5B,MAAMgD,EAAOynB,EAAMznB,KAEnB,SADcA,EAAKhD,GAAKgD,EAAKhD,GAAGovG,MAAQ,IACzBhvG,EAAE,EAQbojH,GAAWxgH,GACRulG,EAAMvlG,GAAM,CAAC2oC,EAAKvoC,IAChBA,EAAIgsG,MAAM1pH,OAASimD,EAAMvoC,EAAIgsG,MAAM1pH,OAASimD,GAClD,GAEC0yW,GAAiB,CAAC5zX,EAAO5xC,KAC7B,MAAMmqB,EAAOynB,EAAMznB,KACnB,IAAK,IAAIhD,EAAI,EAAGA,EAAIgD,EAAKtd,OAAQsa,IAAK,CACpC,MAAMovG,EAAQpsG,EAAKhD,GAAGovG,MACtB,IAAK,IAAIhvG,EAAI,EAAGA,EAAIgvG,EAAM1pH,OAAQ0a,IAChC,GAAI2V,GAAGq5F,EAAMhvG,GAAIvnB,GACf,OAAOktH,EAAS/iH,KAAKm7Z,GAAa/9Y,EAAGJ,GAG3C,CACA,OAAO+lG,EAASE,MAAM,EAElBq4S,GAAc,CAAC7zX,EAAO8zX,EAAIC,EAAIl8Q,EAAIm8Q,KACtC,MAAM9kR,EAAU,GACV32H,EAAOynB,EAAMznB,KACnB,IAAK,IAAIhD,EAAIw+Y,EAAIx+Y,GAAKy+Y,EAAIz+Y,IAAK,CAC7B,MAAMovG,EAAQpsG,EAAKhD,GAAGovG,MAChBx1H,EAAQ2ka,EAAKj8Q,EAAKlzB,EAAMx1H,MAAM2ka,EAAIj8Q,EAAK,GAAKlzB,EAAMx1H,MAAM0oJ,EAAIi8Q,EAAK,GACvE5kR,EAAQthJ,KAAK6la,GAASl7Y,EAAKhD,GAAGnnB,QAASe,GACzC,CACA,OAAO+/I,CAAO,EA4BV9tB,GAAU0pC,IACd,MAAM9qH,EAAQwzX,GAAWxgD,GAAUloN,GAAW,EAAG,IAMjD,OALAiiM,EAAOhnO,GAAY+kC,EAAU,OAAO,CAACzb,EAAI95H,KACvCw3U,EAAOhnO,GAAYspB,EAAI,UAAU,CAACnU,EAAIvlH,KAjF1B,EAACqqB,EAAOrqB,EAAGJ,EAAG85H,EAAInU,KAChC,MAAM1W,EAAUwD,GAAQkT,EAAI,WACtBzW,EAAUuD,GAAQkT,EAAI,WACtB3iH,EAAOynB,EAAMznB,KACnB,IAAK,IAAIgzD,EAAKh2D,EAAGg2D,EAAKh2D,EAAIivG,EAASj5C,IAAM,CAClChzD,EAAKgzD,KACRhzD,EAAKgzD,GAAMkoV,GAASxgD,GAAO5jO,GAAK,KAElC,IAAK,IAAI/jE,EAAK31D,EAAG21D,EAAK31D,EAAI8uG,EAASn5C,IACnB/yD,EAAKgzD,GAAIo5C,MACjBr5C,GAAMC,IAAOh2D,GAAK+1D,IAAO31D,EAAIulH,EAAK83O,GAAU93O,EAEtD,GAsEI+4R,CAAQj0X,EA/DK,EAACA,EAAOrqB,EAAGJ,KAC5B,KAAOo+Y,GAAW3zX,EAAOrqB,EAAGJ,IAC1BI,IAEF,OAAOA,CAAC,EA2DWu+Y,CAAWl0X,EAAOrqB,EAAGJ,GAAIA,EAAG85H,EAAInU,EAAG,GAClD,IAEGs4R,GAAWxzX,EAAM5xC,QAAS2qI,GAAS/4F,EAAMznB,MAAOynB,EAAMznB,KAAK,EAE9D47Y,GAAQn0X,GA7BS,EAACA,EAAOznB,KAC7B,MAAM67Y,EAAephD,GAAUhzU,EAAM5xC,SAC/Bima,EAAY1zS,GAAaM,QAAQ,SAGvC,OAFA0C,GAAO0wS,EAAW97Y,GAClB8qG,GAAS+wS,EAAcC,GAChBD,CAAY,EAyBZE,CAAet0X,EAvBGA,IAClB8sT,EAAM9sT,EAAMznB,MAAMI,IACvB,MAAMgsG,EAAQmoO,EAAMn0U,EAAIgsG,OAAOoD,IAC7B,MAAMmT,EAAK+3O,GAAOlrP,GAGlB,OAFA+nO,GAAS50N,EAAI,WACb40N,GAAS50N,EAAI,WACNA,CAAE,IAELmU,EAAK2jO,GAAUr6V,EAAIvqB,SAEzB,OADAu1H,GAAO0rB,EAAI1qB,GACJ0qB,CAAE,IAakBklR,CAAmBv0X,IAE5Cw0X,GAAa,CAACx0X,EAAOi7V,EAAcC,IAChC04B,GAAe5zX,EAAOi7V,GAAcnnU,MAAKw1T,GACvCsqC,GAAe5zX,EAAOk7V,GAAY1uY,KAAIq/X,GAxChC,EAAC7rV,EAAOspV,EAAUuC,KACjC,MAAMioC,EAAKxqC,EAAS3zW,EAAGo+Y,EAAKzqC,EAAS/zW,EAC/BsiI,EAAKg0O,EAAOl2W,EAAGq+Y,EAAKnoC,EAAOt2W,EAC3B25H,EAAU6kR,EAAKC,EAAKH,GAAY7zX,EAAO8zX,EAAIC,EAAIl8Q,EAAIm8Q,GAAMH,GAAY7zX,EAAO8zX,EAAIE,EAAIn8Q,EAAIk8Q,GAC9F,OAAOP,GAAWxzX,EAAM5xC,QAAS2qI,GAASmW,GAAUA,EAAQ,EAqCjDulR,CAASz0X,EAAOspV,EAAUuC,OAMjC6oC,GAA+B,CAACjyS,EAAS8hC,IAAQ0xC,GAAOxzE,GAASgG,GAAqB,OAAd12H,GAAK02H,IAAiB0kQ,GAAuB1kQ,EAAK87B,KAAM7oC,KAAK9uG,EAAS,KAAK+nZ,GADzHlyS,IAAWwzE,GAAOxzE,GAASgG,GAAqB,OAAd12H,GAAK02H,IAA+B,OAAd12H,GAAK02H,KACmEmsS,CAAwBnyS,GAASj2H,KAAIqoa,IACnM,MAAM7kP,EAAUrvD,GAAaM,QAAQlvH,GAAK8ia,IACpCC,EAAavnE,GAASj5J,GAAUugO,IAAW,CAACE,EAAQhja,IAAS42C,GAAW52C,EAAM,gBAEpF,OADAu1H,GAAO0oD,EAAS8kP,GACT,CACLn0S,GAAaM,QAAQ,MACrB+uD,EACD,IACA7zD,MAAM,MAkBH64S,GAAkB,CAAC3vE,EAAU9gM,EAAKv0J,KACtC,MAAMila,EAAwBt0S,GAAaS,QAAQmjC,EAAI0mC,yBACjDxoE,EAAU4iR,GAAe4vB,EAAuB5vE,GAChD6vE,EAAejoE,EAASxqO,GAAS9mE,GAAM3rD,EAAOy0W,UAAU1yW,GAAK4pD,MAC7Dw5W,EAAeT,GAA6BjyS,EAAS8hC,GACrD6wQ,EAAcF,EAAazoa,OAAO0oa,EAAal6Z,OAASk6Z,EAfrCF,IACrBthD,GAAashD,GACRngX,GAAOmgX,GAAuBxja,OAAO+rJ,IAAQ9hC,KAAK9uG,EAAS,KAAKojK,GAAW,CAChFilP,EACAjlP,KAGKxyB,GAAOy3Q,GAAyB,CAACA,GAAyB,GAQUI,CAAmBJ,IAChG,OAAOnoE,EAAMsoE,EAAapiD,GAAU,EAEhCsiD,GAAgB,IAAMrwO,GAAa,IACnCswO,GAAuB,CAAClwE,EAAU9gM,EAAKv0J,IA1BhC,EAACwla,EAAU5xO,KACtB,MAAMtiB,EAAUxjD,EAAM8lE,GAAM,CAAC1iI,EAAKunE,KAChCpF,GAASoF,EAAKvnE,GACPunE,IACN+sS,GACH,OAAO5xO,EAAK3oL,OAAS,EAAIgqL,GAAa,CAAC3jB,IAAYA,CAAO,EAqBJ9lG,CAAKmlD,GAAaS,QAAQmjC,EAAIuvB,iBAAkBkhP,GAAgB3vE,EAAU9gM,EAAKv0J,IAEjIyla,GAAmB,CAACpwE,EAAUqwE,IADb,EAACt/G,EAASruL,IAASk4D,GAAWl4D,EAAM,QAAS/M,EAAM1vF,GAAI8qR,IACnBu/G,CAAetwE,EAAUqwE,EAAmB,IAAI5hW,MAAKg3F,IAC9G,MAAMzG,EAAYqxQ,EAAmB,GAC/B9wR,EAAW8wR,EAAmBA,EAAmBz6Z,OAAS,GAC1D26Z,EAAiBx0S,GAAQ0pC,GAC/B,OAAO0pQ,GAAWoB,EAAgBvxQ,EAAWzf,GAAUp4I,KAAIqpa,GAAuB5wO,GAAa,CAACkvO,GAAM0B,MAAuB,IAC5Hv5S,WAAWg5S,IAERQ,GAAS,CAACzwE,EAAUxzL,EAAQ7hK,KAChC,MAAMgsI,EAAgB6wP,GAA4Bh7N,EAAQwzL,GAC1D,OAAOrpN,EAAc/gI,OAAS,EAAIw6Z,GAAiBpwE,EAAUrpN,GAHlC,EAACqpN,EAAUxzL,EAAQ7hK,IAAW6hK,EAAO52J,OAAS,GAAK42J,EAAO,GAAGI,UAAYqjQ,KAAkBC,GAAqBlwE,EAAUxzL,EAAO,GAAI7hK,GAGlF+la,CAAqB1wE,EAAUxzL,EAAQ7hK,EAAO,EAGxHgma,GAA0B,CAAC7/Y,EAAM1qB,IAAUA,GAAS,GAAKA,EAAQ0qB,EAAKlb,QAAUwxX,GAAat2W,EAAKjnB,OAAOzD,IACzGwqa,GAAeC,GACZ3hD,GAAO2hD,EAAI7+S,WA2Cd8+S,GAAyB,CAACv2R,EAAQh9H,KACtC,GAAoB,SAAhBA,EAAK4iC,OACP,MA1CmBo6F,IAAUtkB,EAASlwH,KAAKw0I,EAAOI,UAAUwjC,UAAUh3K,KAAI+3J,IAC5E,IAAIhmJ,EACJ,MAAM63Z,EAAiB96S,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUwkB,EAAI0mC,wBAAyBrrD,EAAOrgB,IAAI2gB,UAC5Fh/H,EAAO0+H,EAAO5tC,UACdqkU,EALmBD,IAAkBA,EAAe5pa,KAAIg/L,GAASA,EAAMhsE,WAAUrD,MAAM,OAAO9sH,cAK5Eina,CAAmBF,GACrCG,EAAoB51S,GAAaS,QAAQmjC,EAAIuvB,iBACnD6tN,GAAqB40B,GACrB10B,GAAkB00B,GAClB,MAAML,EAAMt2R,EAAOrgB,IAAIn1H,IAAI8W,EAAMm1Z,EAAiB,CAChD,iBAAkB,MAClB,MAAS,iCACRE,EAAkBh3S,KACfppG,EAAO8/Y,GAAaC,GACpBM,EAAkBjiD,GAAkC,QAA1Bh2W,EAAK23Z,EAAI1wY,mBAAgC,IAAPjnB,EAAgBA,EAAK,IAEvF,GADAqhI,EAAOrgB,IAAIj+D,OAAO40W,GACdF,GAAwBQ,EAAiB,IAAMR,GAAwBQ,EAAiBA,EAAgBv7Z,OAAS,GAAI,CACvH,MAAM6kI,EAAcs2R,EAAej6S,MAAMj7G,GACnCu1Z,EAAkBR,GAAan2R,GAC/B42R,EAAYD,EAAgBjuY,QAAQrS,GAC1C,OAAmB,IAAfugZ,EACKvgZ,GAEoB6/Y,GAAwBS,EAAiBC,EAAY,GAEnD,IAAM,IAAMvgZ,GADhB6/Y,GAAwBS,EAAiBC,EAAYvgZ,EAAKlb,QACf,IAAM,GAE9E,CACE,OAAOkb,CACT,IACCgmG,MAAM,IAaE+tB,CAAetK,GACjB,CACL,MAAM1uI,EAdmB,EAAC0uI,EAAQh9H,KACpC,MAAM2hJ,EAAM3kB,EAAOI,UAAUwjC,SAAUmzP,EAAS/2R,EAAOrgB,IAAIn7G,OAAO,QAC5D+zJ,EAAMv4B,EAAOI,UAAU+sP,SACvBl7N,EAAS+tO,GAAchgQ,EAAQ8sP,GAAYv0N,IAC3CopB,EAAW3+K,EAAKkpM,WAAagqN,GAAOn1S,GAAaS,QAAQwe,EAAO5tC,WAAY6/D,EAAQjyB,EAAO5vI,QAAQuvH,IAAMglC,EAAIuvB,gBAInH,OAHIyN,GACFo1O,EAAO5vY,YAAYw6J,GAEd3hD,EAAOI,UAAU6K,WAAWC,UAAU6rR,EAAQ/zZ,EAAK,EAMxCg0Z,CAAqBh3R,EAAQh9H,GAC7C,MAAoB,SAAhBA,EAAK4iC,OACAt0C,EAEA0uI,EAAOI,UAAU+8C,cAAgB,GAAK7rL,CAEjD,GAuII2la,GAAepuS,GACf6pO,GAAY7pO,GACPA,EAAIsmI,UACF8jG,GAASpqO,GACX4yO,GAASL,UAAUvyO,EAAIhrH,MAAM,GAC3BiiH,GAAU+I,GACZ,UAASA,EAAIhrH,KAAO,SAEtB,GAcHq5Z,GAAW,CAACruS,EAAK5H,EAAMp1H,KAC3B,MAAM81L,EAbe1gE,KACrB,IAAIjqH,EACJ,MAAM6jD,EAAY/rD,SAAS+3B,cAAc,OACnC6lV,EAAO59W,SAASw2L,yBAItB,IAHIrkE,IACFpmE,EAAUp+B,UAAYwkG,GAEjBjqH,EAAO6jD,EAAU+oE,YACtB8oP,EAAKvlV,YAAYnwB,GAEnB,OAAO01W,CAAI,EAGM9qL,CAAe3gE,GAChC,GAAI4H,EAAI1H,iBAAmBt1H,EAAQg9H,EAAIzH,WAAW/lH,OAAQ,CACxD,MAAM5M,EAASo6H,EAAIzH,WAAWv1H,GAC9Bg9H,EAAItF,aAAao+D,EAAUlzL,EAC7B,MACEo6H,EAAI1hG,YAAYw6J,EAClB,EAwBI1yK,GAAQ,CAAC2pY,EAAW/vR,KAhBR,EAACzvD,EAAMyvD,KACvB,IAAIh9H,EAAQ,EACZshW,EAAO/zR,GAAMtlE,IA7JF,IA8JLA,EAAO,GACTjI,IA/JmB,IAgKViI,EAAO,IAChBoja,GAASruS,EAAK/0H,EAAO,GAAIjI,GACzBA,KAlK+B,IAmKtBiI,EAAO,IAdL,EAAC+0H,EAAKh9H,KACrB,GAAIg9H,EAAI1H,iBAAmBt1H,EAAQg9H,EAAIzH,WAAW/lH,OAAQ,CACxD,MAAM5M,EAASo6H,EAAIzH,WAAWv1H,GAC9Bg9H,EAAIlhG,YAAYl5B,EAClB,GAWI0oa,CAAStuS,EAAKh9H,EAChB,GACA,EAOFura,CA5KW,EAAC1ra,EAAMC,KAClB,MAAML,EAAOI,EAAK2P,OAAS1P,EAAM0P,OAAS,EACpCg8Z,EAAQ,IAAI9ra,MAAMD,GAClBgsa,EAAM,IAAI/ra,MAAMD,GAQhBisa,EAAc,CAACC,EAAQC,EAAMC,EAAQC,EAAMv3D,KAC/C,MAAMhlN,EAASw8Q,EAAeJ,EAAQC,EAAMC,EAAQC,GACpD,GAAe,OAAXv8Q,GAAmBA,EAAOhvJ,QAAUqra,GAAQr8Q,EAAOy8Q,OAASJ,EAAOE,GAAQv8Q,EAAOrxI,MAAQytZ,GAAUp8Q,EAAOy8Q,OAASL,EAASE,EAAQ,CACvI,IAAI5mZ,EAAI0mZ,EACJxlZ,EAAI0lZ,EACR,KAAO5mZ,EAAI2mZ,GAAQzlZ,EAAI2lZ,GACjB7mZ,EAAI2mZ,GAAQzlZ,EAAI2lZ,GAAQjsa,EAAKolB,KAAOnlB,EAAMqmB,IAC5CouV,EAAOpyW,KAAK,CAnBT,EAqBDtC,EAAKolB,OAELA,IACAkB,GAEEylZ,EAAOD,EAASG,EAAOD,GACzBt3D,EAAOpyW,KAAK,CA3Ba,EA6BvBtC,EAAKolB,OAELA,IAEFsvV,EAAOpyW,KAAK,CAjCC,EAmCXrC,EAAMqmB,OAENA,EAIV,KAAO,CACLulZ,EAAYC,EAAQp8Q,EAAOhvJ,MAAOsra,EAAQt8Q,EAAOhvJ,MAAQgvJ,EAAOy8Q,KAAMz3D,GACtE,IAAK,IAAI03D,EAAK18Q,EAAOhvJ,MAAO0ra,EAAK18Q,EAAOrxI,MAAO+tZ,EAC7C13D,EAAOpyW,KAAK,CA5CP,EA8CHtC,EAAKosa,KAGTP,EAAYn8Q,EAAOrxI,IAAK0tZ,EAAMr8Q,EAAOrxI,IAAMqxI,EAAOy8Q,KAAMF,EAAMv3D,EAChE,GAEI23D,EAAa,CAAC3ra,EAAOyra,EAAMJ,EAAME,KACrC,IAAI5tZ,EAAM3d,EACV,KAAO2d,EAAM8tZ,EAAOF,GAAQ5tZ,EAAM0tZ,GAAQ/ra,EAAKqe,KAASpe,EAAMoe,EAAM8tZ,MAChE9tZ,EAEJ,MApDY,EAAC3d,EAAO2d,EAAK8tZ,KAClB,CACLzra,QACA2d,MACA8tZ,SAgDKG,CAAM5ra,EAAO2d,EAAK8tZ,EAAK,EAE1BD,EAAiB,CAACJ,EAAQC,EAAMC,EAAQC,KAC5C,MAAMhrY,EAAI8qY,EAAOD,EACXptZ,EAAIutZ,EAAOD,EACjB,GAAU,IAAN/qY,GAAiB,IAANviB,EACb,OAAO,KAET,MAAM67B,EAAQtZ,EAAIviB,EACZ29I,EAAM39I,EAAIuiB,EACVmd,GAAUi+G,EAAM,IAAM,EAAIA,EAAMA,EAAM,GAAK,EAGjD,IAAIh1I,EAAGxI,EAAGuG,EAAGiF,EAAGJ,EAChB,IAHA0hZ,EAAM,EAAIvtX,GAAU0tX,EACpBF,EAAI,EAAIxtX,GAAU2tX,EAAO,EAEpB1kZ,EAAI,EAAGA,GAAK+2B,IAAU/2B,EAAG,CAC5B,IAAKxI,GAAKwI,EAAGxI,GAAKwI,EAAGxI,GAAK,EAAG,CAS3B,IARAuG,EAAIvG,EAAIu/B,EACJv/B,KAAOwI,GAAKxI,IAAMwI,GAAKskZ,EAAMvmZ,EAAI,GAAKumZ,EAAMvmZ,EAAI,GAClDumZ,EAAMvmZ,GAAKumZ,EAAMvmZ,EAAI,GAErBumZ,EAAMvmZ,GAAKumZ,EAAMvmZ,EAAI,GAAK,EAE5BiF,EAAIshZ,EAAMvmZ,GACV6E,EAAII,EAAIyhZ,EAASE,EAASntZ,EACnBwL,EAAI0hZ,GAAQ9hZ,EAAIgiZ,GAAQjsa,EAAKqqB,KAAOpqB,EAAMgqB,IAC/C0hZ,EAAMvmZ,KAAOiF,IACXJ,EAEJ,GAAIswB,EAAQ,IAAM,GAAKA,EAAQlzB,GAAKxI,GAAKA,GAAK07B,EAAQlzB,GAChDukZ,EAAIxmZ,EAAIm1B,IAAUoxX,EAAMvmZ,GAC1B,OAAOinZ,EAAWT,EAAIxmZ,EAAIm1B,GAAQ17B,EAAIitZ,EAASE,EAAQD,EAAME,EAGnE,CACA,IAAKptZ,EAAI07B,EAAQlzB,EAAGxI,GAAK07B,EAAQlzB,EAAGxI,GAAK,EAAG,CAS1C,IARAuG,EAAIvG,EAAIu/B,EAAS7D,EACb17B,IAAM07B,EAAQlzB,GAAKxI,IAAM07B,EAAQlzB,GAAKukZ,EAAIxmZ,EAAI,IAAMwmZ,EAAIxmZ,EAAI,GAC9DwmZ,EAAIxmZ,GAAKwmZ,EAAIxmZ,EAAI,GAAK,EAEtBwmZ,EAAIxmZ,GAAKwmZ,EAAIxmZ,EAAI,GAEnBiF,EAAIuhZ,EAAIxmZ,GAAK,EACb6E,EAAII,EAAIyhZ,EAASE,EAASntZ,EACnBwL,GAAKyhZ,GAAU7hZ,GAAK+hZ,GAAUhsa,EAAKqqB,KAAOpqB,EAAMgqB,IACrD2hZ,EAAIxmZ,GAAKiF,IACTJ,IAEF,GAAIswB,EAAQ,IAAM,IAAMlzB,GAAKxI,GAAKA,GAAKwI,GACjCukZ,EAAIxmZ,IAAMumZ,EAAMvmZ,EAAIm1B,GACtB,OAAO8xX,EAAWT,EAAIxmZ,GAAIvG,EAAIitZ,EAASE,EAAQD,EAAME,EAG3D,CACF,CACA,OAAO,IAAI,EAEPv3D,EAAS,GAEf,OADAm3D,EAAY,EAAG7ra,EAAK2P,OAAQ,EAAG1P,EAAM0P,OAAQ+kW,GACtCA,CAAM,EA0DHhnS,CADe8zR,EAAM1hW,GAAKq9H,EAAIzH,YAAa61S,IACpBre,GAAY/vR,GACtCA,GAGHovS,GAAmBhyW,IAAO,IAAMn3D,SAAS24P,eAAeI,mBAAmB,UAoB3EqwK,GAAmBl4R,IACvB,MAAM6gQ,EAAY7gQ,EAAOiL,WAAWm3P,eAC9B9gY,EAAOsyL,GAAO5zD,EAAO5tC,UAAWyuS,GACtC,MAtBiBv/X,IAAyC,OAAjCA,EAAK6gH,cAAc,UAsBrCg2S,CAAW72Z,IArBUs3Y,EAXf,EAAC/vR,EAAKuvS,IAAa/qE,EAASH,EAAM1hW,GAAKq9H,EAAIzH,YAAag3S,EAAW1lO,EAAQiiL,GAAQsiD,IAAgBA,KAAe/5X,GACxHA,EAAK7hC,OAAS,IA+B2Bw4M,CAAOvyM,GAAM,GApBtD,CACLhL,KAAM,aACNsiZ,YACAtnZ,QAAS,GACTimL,SAAU,KACV8gP,eAAgB,OAIX,CACL/ha,KAAM,WACNsiZ,UAAW,KACXtnZ,QAQwFqjX,GAAOrzW,EAAKmb,WAPpG86J,SAAU,KACV8gP,eAAgB,MANQ/ma,IATEsnZ,CAqBqF,EAE7G0f,GAAgB,CAACt4R,EAAQ2xH,EAAO/iK,KACpC,MAAM2oF,EAAW3oF,EAAS+iK,EAAM0mK,eAAiB1mK,EAAMp6E,SACpC,eAAfo6E,EAAMr7P,KACR2Y,GAAM0iP,EAAMinJ,UAAW54Q,EAAO5tC,WAE9B4tC,EAAOwuB,WAAWmjG,EAAMrgQ,QAAS,CAC/Bs0C,OAAQ,MACRgmW,cAAc5wR,EAAcu8D,KAAa4zM,GAAe5zM,KAAaA,EAASukM,cAG9EvkM,IACFv3C,EAAOI,UAAUw3C,eAAeL,GAChCv3C,EAAOI,UAAUwyC,iBACnB,EAEI2lP,GAAkB5mK,GACA,eAAfA,EAAMr7P,KAAwBq7P,EAAMinJ,UAAU3qZ,KAAK,IAAM0jQ,EAAMrgQ,QAElEkna,GAAuB7mK,IAC3B,MAAM9oI,EAAM9H,GAAaM,QAAQ,OAAQ42S,MAGzC,OAFAxwS,GAAMoB,EAAK0vS,GAAgB5mK,IAC3Bw7F,EAAOhnO,GAAY0C,EAAK,qBAAsB3E,IACvCwZ,GAAM7U,EAAI,EAIb4vS,GAAS,CAACC,EAAQC,OACjBD,IAAWC,OAHM,EAACD,EAAQC,IAAWJ,GAAgBG,KAAYH,GAAgBI,GAK3EC,CAAgBF,EAAQC,IAJN,EAACD,EAAQC,IAAWH,GAAqBE,KAAYF,GAAqBG,GAO9FE,CAAuBH,EAAQC,IAIpCG,GAAaC,GAAyB,IAAhBA,EAAMrra,MAE5Bsra,GAAY,CAAC5uQ,EAAa6uQ,EAAQF,KAClCD,GAAWC,KACb3uQ,EAAY6uQ,OAASA,EACvB,EAEIC,GAAY,CAAC9uQ,EAAa2uQ,KAC1B3uQ,EAAY6uQ,SACdD,GAAU5uQ,GAAa,EAAO2uQ,GAC9B3uQ,EAAY5/J,MACd,EAmKI2ua,GAAmBn5R,IAAU,CACjC9mE,KAAM,CAAEkd,WAAY37C,GACpB2vH,YAAa,CACXgvQ,aAAc,CAACL,EAAOV,IA7JH,EAACr4R,EAAQ+4R,EAAOV,KACjCS,GAAWC,IACbV,EAAezqa,IAAI8uX,GAAgB18O,EAAOI,WAC5C,EA0J2Ci5R,CAAer5R,EAAQ+4R,EAAOV,GACvE7ta,IAAK,CAAC4/J,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,IAzJrC,EAACo1I,EAAQoqB,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,KAChF,MAAM0ua,EAAepB,GAAiBl4R,GAChCu5R,EAAWh/S,GAAMn3G,OAAOuuP,GAAS,CAAC,EAAG2nK,GAC3C,IAAKR,GAAWC,IAAU/4R,EAAOlyE,QAC/B,OAAO,KAET,MAAM0rW,EAAYpvQ,EAAYvsJ,KAAKhS,EAAM6B,OACzC,GAAIsyI,EAAO7xH,SAAS,gBAAiB,CACjCwjP,MAAO4nK,EACPC,YACA/xD,cAAe78W,IACdm0L,qBACH,OAAO,KAET,GAAIy6O,GAAaf,GAAOe,EAAWD,GACjC,OAAO,KAELnvQ,EAAYvsJ,KAAKhS,EAAM6B,QACzB2qa,EAAe3qa,MAAM2tC,MAAKo+X,IACxBrvQ,EAAYvsJ,KAAKhS,EAAM6B,OAAO2qa,eAAiBoB,CAAE,IAGrD,MAAMC,EAAuBv4C,GAAwBnhP,GACrD,GAAI05R,GACEtvQ,EAAYvsJ,KAAKxC,OAASq+Z,EAAsB,CAClD,IAAK,IAAI5oZ,EAAI,EAAGA,EAAIs5I,EAAYvsJ,KAAKxC,OAAS,EAAGyV,IAC/Cs5I,EAAYvsJ,KAAKiT,GAAKs5I,EAAYvsJ,KAAKiT,EAAI,GAE7Cs5I,EAAYvsJ,KAAKxC,SACjBxP,EAAM+B,IAAIw8J,EAAYvsJ,KAAKxC,OAC7B,CAEFk+Z,EAAShiP,SAAWmlM,GAAgB18O,EAAOI,WACvCv0I,EAAM6B,MAAQ08J,EAAYvsJ,KAAKxC,OAAS,IAC1C+uJ,EAAYvsJ,KAAKxC,OAASxP,EAAM6B,MAAQ,GAE1C08J,EAAYvsJ,KAAK7P,KAAKura,GACtB1ta,EAAM+B,IAAIw8J,EAAYvsJ,KAAKxC,OAAS,GACpC,MAAM2H,EAAO,CACX2uP,MAAO4nK,EACPC,YACA/xD,cAAe78W,GASjB,OAPIiB,EAAM6B,MAAQ,GAChBsyI,EAAO25R,UAAS,GAChB35R,EAAO7xH,SAAS,UAAWnL,GAC3Bg9H,EAAO7xH,SAAS,SAAUnL,IAE1Bg9H,EAAO7xH,SAAS,UAAWnL,GAEtBu2Z,CAAQ,EAuGqDK,CAAe55R,EAAQoqB,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,GAC3Iiva,KAAM,CAACzvQ,EAAa2uQ,EAAOlta,IA3EhB,EAACm0I,EAAQoqB,EAAa2uQ,EAAOlta,KAC1C,IAAI8lQ,EAaJ,OAZIvnG,EAAY6uQ,SACd7uQ,EAAY5/J,MACZ4/J,EAAY6uQ,QAAS,EACrBD,GAAU5uQ,GAAa,EAAO2uQ,IAE5Blta,EAAM6B,MAAQ,IAChB7B,EAAM+B,IAAI/B,EAAM6B,MAAQ,GACxBikQ,EAAQvnG,EAAYvsJ,KAAKhS,EAAM6B,OAC/B4qa,GAAct4R,EAAQ2xH,GAAO,GAC7B3xH,EAAO25R,UAAS,GAChB35R,EAAO7xH,SAAS,OAAQ,CAAEwjP,WAErBA,CAAK,EA6D2BmoK,CAAO95R,EAAQoqB,EAAa2uQ,EAAOlta,GACxEkua,KAAM,CAAClua,EAAOgS,IAvFH,EAACmiI,EAAQn0I,EAAOgS,KAC7B,IAAI8zP,EAQJ,OAPI9lQ,EAAM6B,MAAQmQ,EAAKxC,OAAS,IAC9BxP,EAAM+B,IAAI/B,EAAM6B,MAAQ,GACxBikQ,EAAQ9zP,EAAKhS,EAAM6B,OACnB4qa,GAAct4R,EAAQ2xH,GAAO,GAC7B3xH,EAAO25R,UAAS,GAChB35R,EAAO7xH,SAAS,OAAQ,CAAEwjP,WAErBA,CAAK,EA8EaqoK,CAAOh6R,EAAQn0I,EAAOgS,GAC7CX,MAAO,CAACktJ,EAAav+J,IAxGT,EAACm0I,EAAQoqB,EAAav+J,KACpCu+J,EAAYvsJ,KAAO,GACnBhS,EAAM+B,IAAI,GACVw8J,EAAY6uQ,QAAS,EACrBj5R,EAAO7xH,SAAS,aAAa,EAoGI8rZ,CAAQj6R,EAAQoqB,EAAav+J,GAC5D48D,MAAO2hG,GA9DKA,KACdA,EAAYltJ,QACZktJ,EAAY5/J,KAAK,EA4DO8jO,CAAQlkE,GAC9B8vQ,QAAS,CAAC9vQ,EAAav+J,IA3DT,EAACm0I,EAAQoqB,EAAav+J,IAAUA,EAAM6B,MAAQ,GAAK08J,EAAY6uQ,QAAU7uQ,EAAYvsJ,KAAK,KAAO46Z,GAAOP,GAAiBl4R,GAASoqB,EAAYvsJ,KAAK,IA2DhIs8Z,CAAUn6R,EAAQoqB,EAAav+J,GAChEuua,QAAS,CAAChwQ,EAAav+J,IA3DT,EAACu+J,EAAav+J,IAAUA,EAAM6B,MAAQ08J,EAAYvsJ,KAAKxC,OAAS,IAAM+uJ,EAAY6uQ,OA2D/DoB,CAAUjwQ,EAAav+J,GACxDsqL,SAAU,CAAC/rB,EAAa2uQ,EAAOjja,IA3DhB,EAACs0J,EAAa2uQ,EAAOjja,KACtCoja,GAAU9uQ,EAAa2uQ,GACvB3uQ,EAAYgvQ,eACZhvQ,EAAYjb,OAAOr5I,GACZs0J,EAAY5/J,OAuD2B8va,CAAWlwQ,EAAa2uQ,EAAOjja,GAC3Eq5I,OAAQ,CAAC4pR,EAAOjja,IAtDH,EAACija,EAAOjja,KACvB,IACEija,EAAMnra,IAAImra,EAAMrra,MAAQ,GACxBoI,GACF,CAAE,QACAija,EAAMnra,IAAImra,EAAMrra,MAAQ,EAC1B,GAgD+B6sa,CAASxB,EAAOjja,GAC7C8jG,MAAO,CAACwwD,EAAav+J,EAAO2ua,EAAWC,IAxG3B,EAACz6R,EAAQoqB,EAAav+J,EAAO2ua,EAAWC,KACtD,GAAIrwQ,EAAY+rB,SAASqkP,GAAY,CACnC,MAAMjjP,EAAWntB,EAAYvsJ,KAAKhS,EAAM6B,OAAO6pL,SACzCiiP,EAAYpvQ,EAAYvsJ,KAAKhS,EAAM6B,MAAQ,GACjD4qa,GAAct4R,EAAQw5R,GAAW,GAC7BpvQ,EAAY+rB,SAASskP,KACvBrwQ,EAAYvsJ,KAAKhS,EAAM6B,MAAQ,GAAG2qa,eAAiB9gP,EAEvD,GAgGuDmjP,CAAQ16R,EAAQoqB,EAAav+J,EAAO2ua,EAAWC,IAEtGx8Y,UAAW,CACTjtB,MAAO,CAACmB,EAAMi9X,EAAMp4X,EAAMqjZ,IAAYS,GAAQ96Q,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,GACxEsgB,SAAU,CAACljY,EAAO23V,IAtxJL,EAACpvP,EAAQvoG,EAAO23V,KAC/B,MAAMwrC,EAAqB,GACrBC,EAAa,CAAC,EACdx/B,EAAer7P,EAAOI,UAAUC,WAUtC,OATAL,EAAOrgB,IAAIwgB,UAAUk7P,GAAcrkY,IACjC,IAAK,IAAI8Z,EAAI,EAAGA,EAAI2mB,EAAMp8B,OAAQyV,IAAK,CACrC,MAAM3e,EAAOslC,EAAM3mB,IACd+pZ,EAAW1oa,IAASooZ,GAAUv6Q,EAAQhpI,EAAM7E,EAAMi9X,KACrDyrC,EAAW1oa,IAAQ,EACnByoa,EAAmB5sa,KAAKmE,GAE5B,IACC6tI,EAAOrgB,IAAIyhE,WACPw5O,CAAkB,EAywJID,CAAS36R,EAAQvoG,EAAO23V,GACnDmrB,UAAW,CAACvjZ,EAAM7E,EAAMi9X,EAAMirB,IAAYE,GAAUv6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,GAC9ElvF,SAAUh5T,GApwJG,EAAC6tI,EAAQ7tI,KACxB,MAAMi/X,EAAapxP,EAAO/hH,UAAUvwB,IAAIyE,GAClCwtH,EAAMqgB,EAAOrgB,IACnB,GAAIyxQ,GAAcpxP,EAAOI,UAAUme,aAAc,CAC/C,MAAMmtC,EAAY1rD,EAAOI,UAAUC,WAC7Bxd,EAAU6sQ,GAAa/vQ,EAAK+rE,GAClC,IAAK,IAAI31K,EAAIq7W,EAAW/1X,OAAS,EAAG0a,GAAK,EAAGA,IAAK,CAC/C,MAAM6vB,EAASwrV,EAAWr7W,GAC1B,IAAK23R,GAAiB9nQ,GACpB,OAAO,EAET,IAAK,IAAI90B,EAAI+xG,EAAQxnH,OAAS,EAAGyV,GAAK,EAAGA,IACvC,GAAI6uG,EAAI2G,GAAGzD,EAAQ/xG,GAAI80B,EAAO9tC,UAC5B,OAAO,CAGb,CACF,CACA,OAAO,CAAK,EAkvJQqzT,CAASnrL,EAAQ7tI,GACnC0V,QAAS4vB,GAAS5vB,GAAQm4H,EAAQvoG,GAClC3N,MAAO,CAAC33B,EAAMi9X,EAAMp4X,IAASyuZ,GAAczlR,EAAQ7tI,EAAMi9X,EAAMp4X,GAC/D0qD,OAAQ,CAACvvD,EAAMi9X,EAAMp4X,EAAMqjZ,IAAYiI,GAAetiR,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,GAChFrrP,OAAQ,CAAC78J,EAAMi9X,EAAMp4X,IAz8GV,EAACgpI,EAAQ7tI,EAAMi9X,EAAMp4X,KAClC,MAAM0nG,EAAMshC,EAAO/hH,UAAUvwB,IAAIyE,GAC7BusG,KACEo8S,GAAQ96Q,EAAQ7tI,EAAMi9X,EAAMp4X,IAAY,WAAY0nG,EAAI,KAAOA,EAAI,GAAGswD,OAGxEy2P,GAAczlR,EAAQ7tI,EAAMi9X,EAAMp4X,GAFlCsrZ,GAAetiR,EAAQ7tI,EAAMi9X,EAAMp4X,GAIvC,EAi8GgCg4J,CAAOhvB,EAAQ7tI,EAAMi9X,EAAMp4X,GACzD6tQ,cAAe,CAACwhJ,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,IAASg3B,GAAsBpmR,EAAQqmR,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,IAEvKpvP,OAAQ,CACNo1C,WAAYpyK,GAhtNW,EAACg9H,EAAQh9H,IAAS04G,EAASlwH,KAAKw0I,EAAO5tC,WAAW0pB,KAAK9uG,EAAyB,SAAhBhK,EAAK4iC,OAAoB,IAAIy6V,GAAQ,OAAQ,IAAM,KAAK/+X,GAAQ6gY,GAAmBniQ,EAAQh9H,EAAM1B,KAgtNpKw5Z,CAAmB96R,EAAQh9H,GAC/CwrJ,WAAY,CAACl9J,EAAS0R,IAAS02Y,GAAmB15Q,EAAQ1uI,EAAS0R,GACnE8nJ,cAAe,CAAC38J,EAAO+E,IAAYgkZ,GAAkBl3Q,EAAQ7xI,EAAO+E,GACpE63J,UAAWliC,GA/DW,EAACmX,EAAQnX,KACjC,MAAMlJ,EAAMqgB,EAAOrgB,IACb5qH,EAAQimH,EAAc6N,GAAOA,EAAMmX,EAAO5tC,UAChD+6P,EAAOxtO,EAAIrsH,OAAO,UAAWyB,IAAQgma,IACnC,OAAQA,EAAWn7S,UACnB,IAAK,QACH,MAAMg3D,EAAMgrM,GAAwB5hP,GAC9B7xI,EAAQwxH,EAAI6iB,UAAUu4R,EAAY,UAClC5sa,GAAmB,MAAVA,IAAkB6xI,EAAO0hM,UAGtC/hN,EAAI23M,YAAYyjG,EAAYnkP,GAF5Bj3D,EAAIytD,SAAS2tP,EAAYnkP,GAI3B,MACF,IAAK,IACH,IAAKj3D,EAAI6iB,UAAUu4R,EAAY,QAAS,CACtC,MAAM5sa,EAAQwxH,EAAI6iB,UAAUu4R,EAAY,SAAWA,EAAWj8Y,GACxD83J,EAAMirM,GAAyB7hP,GACjC7xI,GAAS6xI,EAAO0hM,UAClB/hN,EAAIytD,SAAS2tP,EAAYnkP,GAEzBj3D,EAAI23M,YAAYyjG,EAAYnkP,EAEhC,EAEF,IAEF52C,EAAO7xH,SAAS,YAAa,CAC3B3f,QAASq6H,EACT64M,UAAW1hM,EAAO0hM,WAClB,EAiCkBs5F,CAAkBh7R,EAAQnX,IAE9CuX,UAAW,CAAEg1C,WAAY,CAACxvI,EAAQ5iC,IApcD,EAACg9H,EAAQp6F,EAAQ5iC,EAAO,CAAC,KAC1D,MAAMi4Z,EARY,EAACj4Z,EAAM4iC,KAAW,IACjC5iC,EACH4iC,SACAl4C,KAAK,EACL0yI,WAAW,EACXzQ,UAAU,IAGYurS,CAAYl4Z,EAAM4iC,GACxC,OAAOytX,GAAqBrzR,EAAQi7R,GAAen/S,KAAKZ,GAAUigT,IAChE,MAAM7pa,EAAUila,GAAuBv2R,EAAQm7R,GAC/C,OAAO5H,GAAsBvzR,EAAQ1uI,EAAS6pa,EAAY,GAC1D,EA+byCC,CAA2Bp7R,EAAQp6F,EAAQ5iC,IACtF2vQ,cAAe,CACb0oJ,cAAe5gY,EACf6gY,iBAAkB7gY,GAEpBziB,IAAK,CAAEsoW,SAAU,IAAM5kQ,EAASE,UAmG5B2/S,GAAQv7R,GAAU0zD,GAAM1zD,EAAO9qH,QAAS,OAExCsmZ,GAAUx7R,IACd,MAAMy7R,EAAaz7R,EACnB,MAHkBA,IAAUpY,GAAMoY,EAAO9qH,QAAS,OAAOg/C,MAAKwnW,GAAahgT,EAASlwH,KAAKkwa,EAAU31P,SAG5F41P,CAAY37R,GAAQlkB,MAAK,KAC9B2/S,EAAWG,YAAczC,GAAiBn5R,GACnCtkB,EAASE,UACfmqD,IACD01P,EAAWG,YAtDS,MACtB,MAAMC,EAAM7uZ,EAAS,MACfuZ,EAAQvZ,EAAS,IACvB,MAAO,CACLksD,KAAM,CAAEkd,WAAY37C,GACpB2vH,YAAa,CACXgvQ,aAAc3+X,EACdjwC,IAAKqxa,EACLhC,KAAMgC,EACN9B,KAAM8B,EACN3+Z,MAAOu9B,EACPguB,MAAOhuB,EACPy/X,QAAS1+S,EACT4+S,QAAS5+S,EACT26D,SAAU0lP,EACV1sR,OAAQ10G,EACRm/D,MAAOn/D,GAETxc,UAAW,CACTjtB,MAAOwqH,EACPm/S,SAAU3tZ,EAAS,IACnButY,UAAWvtY,OAASpd,GACpBu7T,SAAU3vM,EACV3zG,QAAS0e,EACTuD,MAAO2Q,EACPinB,OAAQjnB,EACRu0H,OAAQv0H,EACRoqO,cAAe73P,EAAS,CAAE40J,OAAQnnI,KAEpCulG,OAAQ,CACNo1C,WAAY7uJ,EACZioI,WAAYxhJ,EAAS,CACnB1b,QAAS,GACT2vH,KAAM,KAER6pC,cAAe99I,EAAS,IACxB+9I,UAAWtwH,GAEb2lG,UAAW,CAAEg1C,WAAY7uJ,GACzBosP,cAAe,CACb0oJ,cAAe5gY,EACf6gY,iBAAkB7gY,GAEpBziB,IAAK,CAAEsoW,SAAUtzW,EAAS0uG,EAASE,SACpC,EAU0BkgT,GAClBpgT,EAAS/iH,MAAK,IAAMotK,IAAQhiH,MAAKg4W,IACtCN,EAAWG,YA3GMG,KACrB,MAAMC,EAAc5sC,GAAQx0V,EAASw0V,GAAQA,EAAO,CAAC,GAC/C,KAACl2T,EAAI,YAAEkxF,EAAW,UAAEnsI,EAAS,OAAE+hH,EAAM,UAAEI,EAAS,cAAEuyI,EAAa,IAAE36P,GAAO+jZ,EAC9E,MAAO,CACL7iW,KAAM,CAAEkd,WAAYld,EAAKkd,YACzBg0E,YAAa,CACXgvQ,aAAchvQ,EAAYgvQ,aAC1B5ua,IAAK4/J,EAAY5/J,IACjBqva,KAAMzvQ,EAAYyvQ,KAClBE,KAAM3vQ,EAAY2vQ,KAClB78Z,MAAOktJ,EAAYltJ,MACnBurD,MAAO2hG,EAAY3hG,MACnByxW,QAAS9vQ,EAAY8vQ,QACrBE,QAAShwQ,EAAYgwQ,QACrBjkP,SAAU,CAAC8lP,EAAcC,EAAQtpZ,IAAOw3I,EAAY+rB,SAASvjK,GAC7Du8H,OAAQ,CAAC+sR,EAAQpma,IAAas0J,EAAYjb,OAAOr5I,GACjD8jG,MAAO,CAACqiU,EAActuR,EAAQ6sR,EAAWC,IAAcrwQ,EAAYxwD,MAAM4gU,EAAWC,IAEtFx8Y,UAAW,CACTjtB,MAAO,CAACmB,EAAMi9X,EAAM+sC,EAAO9hB,IAAYp8X,EAAUjtB,MAAMmB,EAAM6pa,EAAY5sC,GAAOirB,GAChFsgB,SAAU18Y,EAAU08Y,SACpBpgB,UAAWt8X,EAAUs8X,UACrBpvF,SAAUh5T,GAAQ8rB,EAAUktS,SAASh5T,GACrC0V,QAAS4vB,GAASxZ,EAAUpW,QAAQ4vB,GACpC3N,MAAO,CAAC33B,EAAMi9X,EAAM+sC,IAAUl+Y,EAAU6L,MAAM33B,EAAM6pa,EAAY5sC,IAChE1tU,OAAQ,CAACvvD,EAAMi9X,EAAM+sC,EAAOC,IAAan+Y,EAAUyjC,OAAOvvD,EAAM6pa,EAAY5sC,IAC5EpgO,OAAQ,CAAC78J,EAAMi9X,EAAM+sC,IAAUl+Y,EAAU+wI,OAAO78J,EAAM6pa,EAAY5sC,IAClEvqH,cAAe,CAACw3J,EAAMljW,EAASrjE,EAAUukZ,EAASjrB,IAASnxW,EAAU4mP,cAAc1rM,EAASrjE,EAAUukZ,EAASjrB,IAEjHpvP,OAAQ,CACNo1C,WAAYpyK,GAAQg9H,EAAOo1C,WAAWpyK,GACtCwrJ,WAAY,CAACl9J,EAAS0R,KACb,CACL1R,QAAS0uI,EAAOwuB,WAAWl9J,EAAS0R,GACpCi+G,KAAM,KAGV6pC,cAAe,CAACx5J,EAASgra,KACvBt8R,EAAO8qB,cAAcx5J,GACd,IAETy5J,UAAW/qB,EAAO+qB,WAEpB3qB,UAAW,CAAEg1C,WAAY,CAAC61I,EAASjoT,IAASo9H,EAAUg1C,WAAWpyK,IACjE2vQ,cAAe,CACb0oJ,cAAe1oJ,EAAc0oJ,cAC7BC,iBAAkB3oJ,EAAc2oJ,kBAElCtjZ,IAAK,CAAEsoW,SAAU,IAAM5kQ,EAAS/iH,KAAKqf,EAAIukZ,gBAC1C,EA0D4BC,CAAeT,GACjCA,EAAUU,IAAIC,gBAEvB,EAEEC,GAA6B38R,GAAUA,EAAO47R,YAAc57R,EAAO47R,YAAczC,GAAiBn5R,GAClG48R,GAA0B58R,IAC9B,MAAM47R,EAAc57R,EAAO47R,YAC3B,GAAKA,EAGH,OAAOA,EAFP,MAAM,IAAIpoa,MAAM,kDAGlB,EA2CI4iF,GAAa4pD,GAAU48R,GAAwB58R,GAAQ9mE,KAAKkd,aAE5DymV,GAAe,CAAC78R,EAAQh9H,EAAO,CAAC,IAJX,EAACg9H,EAAQp6F,EAAQ5iC,IAAS45Z,GAAwB58R,GAAQI,UAAUg1C,WAAWxvI,EAAQ5iC,GAMzG85Z,CAAmB98R,EADXh9H,EAAK4iC,OAAS5iC,EAAK4iC,OAAS,OACD5iC,GAGtC46V,GAAcrnV,GACM,IAApBA,EAAKopG,IAAItkH,QACXusM,GAASrxL,GACFmlG,EAASE,QAETF,EAAS/iH,KAAK4d,GA0BnBwmZ,GAAwB,CAACC,EAAWrzC,EAAWhlO,EAAKv4J,EAAOgE,KAC/D4sa,EAAU9oW,MAAKysB,KACMv0F,EAAQw8Y,GAA4BF,IAC5C/nT,EAAMg/B,IAAKvzH,EAAQu0F,EAAMg/B,IAAItkH,OAAS,EAAGjL,GAC7Cu5X,EAAU93X,OAAOi+V,IAAUljW,KAAIywF,GA1B1B,EAACsD,EAAOtD,EAAOsnE,EAAKv4J,EAAOgE,KACzC,MAAM6sa,EAAWt8U,EAAMg/B,IACjBi2S,EAAWv4U,EAAMsiC,IACjBu9S,EAAY9wa,EAAQ6wa,EAAS5ha,OAASu6Z,EAASv6Z,OACjDjP,GACFy8Y,GAAeo0B,EAAUrH,EAAUxla,GAAQ,GAAQhE,GACnDu4J,EAAIK,SAAS4wQ,EAAUsH,KAEvBr0B,GAAe+sB,EAAUqH,EAAU7sa,GAAQ,GAAQhE,GACnDu4J,EAAIM,OAAO2wQ,EAAUsH,GACvB,EAgBiDznR,CAAQ90D,EAAOtD,EAAOsnE,EAAKv4J,EAAOgE,QAChFwsH,SAAQ,KACT,MAAMugT,EA7Be,EAACnma,EAAM5K,IAAU4K,EAAKnF,QAAOg3H,GAAO4rQ,GAAgB3oM,eAAejjE,EAAIlJ,OAAMzrD,KAAK9nE,EAAQ82H,GAAcF,IA6BvGo6S,CAAiBzzC,EAAWv9X,GAAOqwH,GAAGktQ,GAAW93X,OAAOi+V,IAC9E,OAAOqtE,EAAcvwa,KAAIywF,GAjBG,EAACA,EAAOjxF,EAAOgE,KAC7C8kD,GAAOmoC,GAAOhiD,MAAKyL,IACjB,MAAMvwB,EAAO8mE,EAAMsiC,IACfvzH,GAASg7Y,GAAkBtgW,EAAM2yU,GAAcljW,EAAM,GAAInmB,GAC3Ds4Y,GAAyBnyX,EAAM,EAAGnmB,IACxBhE,GAASm7Y,GAAmBzgW,EAAM2yU,GAAcljW,EAAMA,EAAKlb,QAASjL,IAC9Ew4Y,GAA0BryX,EAAMA,EAAKlb,OAAQjL,EAC/C,GACA,EASkCita,CAAwBhgV,EAAOjxF,EAAOgE,IAAQ,GAChF,EAmCEkta,GAAe,CAACt9R,EAAQ1uI,EAAS0R,EAAO,CAAC,KAC7C,MAAMi4Z,EAvBY,EAACj4Z,EAAM1R,KAAY,CACrCs0C,OAAQ,UACL5iC,EACHpV,KAAK,EACLwyI,WAAW,EACX9uI,YAkBsBisa,CAAYv6Z,EAAM1R,GACxCmia,GAAqBzzR,EAAQi7R,GAAe5/X,MAAK8/X,IAC/C,MAAMqC,EAlBW,EAACx9R,EAAQh9H,KAC5B,GAAoB,QAAhBA,EAAK4iC,OAAkB,CACzB,MAAM++G,EAAM3kB,EAAOI,UAAUwjC,SACvB65P,EAAez9R,EAAOrgB,IAAIwgB,UAAUwkB,EAAI0mC,wBAAyBrrD,EAAOrgB,IAAI2gB,SAC5Eo9R,EAAcD,EAAe,CAAE5pa,QAAS4pa,EAAa79S,SAASnwH,eAAkB,CAAC,EACjFuH,EAAOgpI,EAAOzjC,OAAO7oG,MAAMsP,EAAK1R,QAAS,CAC7Cuga,mBAAmB,KAChB6L,KACA16Z,IAEL,OAAOogY,GAAe,CAAEn8R,UAAU,GAAS+4B,EAAO5vI,QAAQ86I,UAAUl0I,EACtE,CACE,OAAOgM,EAAK1R,OACd,EAKyBqsa,CAAa39R,EAAQm7R,GACtCx2Q,EAAM3kB,EAAOI,UAAUwjC,SArCX,EAACjf,EAAKg9B,EAAUvxL,KACpC,MAAMwzH,EAAalI,EAASlwH,KAAKm2L,EAAS/9D,YAAYh3H,IAAIm0H,GAAaS,SACjE4+D,EAAY1kE,EAASlwH,KAAKm2L,EAASvB,WAAWxzL,IAAIm0H,GAAaS,SACrEmjC,EAAIynP,iBACJznP,EAAIy1N,WAAWz4L,GACf,MAAMi8O,EAAWh6S,EAAW1vD,KAAK8uD,IAAanxH,OAAOi+V,IAAU57R,KAAK0pS,IAC9DigE,EAAWz9O,EAAUlsH,KAAKgvD,IAAarxH,OAAOi+V,IAAU57R,KAAK0pS,IACnEm/D,GAAsBa,EAAUh6S,EAAY+gC,GAAK,EAAMv0J,GACvD2sa,GAAsBc,EAAUz9O,EAAWz7B,GAAK,EAAOv0J,GACvDu0J,EAAIuF,UAAS,EAAM,EA6BjB4zQ,CAAcn5Q,EAAKA,EAAIo5Q,yBAAyBP,GAAiBx9R,EAAO5vI,QACxE4vI,EAAOI,UAAU0kB,OAAOH,GACxBw3O,GAAoBn8P,EAAQ2kB,GAC5BgvQ,GAAsB3zR,EAAQw9R,EAAgBrC,EAAY,GAC1D,EAGE6C,GAAwB,CAACprD,EAAa96W,EAAUhC,KACpD,GAAI49L,GAAMk/K,EAAa96W,GAAW,CAChC,MAAMivZ,EAAe15D,EAASulB,EAAY96W,IAAWkqB,GAAMA,IAAOlsB,IACtC,IAAxBixZ,EAAa1rZ,cACRu3W,EAAY96W,GAEnB86W,EAAY96W,GAAYivZ,CAE5B,GAEF,IAAIkX,GAAkB,CAACt+S,EAAKqgB,KAC1B,IAAIk+R,EACAC,EACJ,MAAMC,EAAmB,CAACtma,EAAUf,IAAUs/L,GAAOt/L,GAAOC,GAAQ2oH,EAAI2G,GAAGtvH,EAAMc,KAC3Eg3K,EAAajtD,GAAQlC,EAAImvD,WAAWjtD,OAAMjyH,EAAW+vH,EAAIyhE,WAqC/D,MAAO,CACLi9O,0BAA2B,CAACvma,EAAUhC,KAC/Booa,IArCPA,EAAsB,CAAC,EACvBC,EAAmB,CAAC,EACpBn+R,EAAO8K,GAAG,cAAc13I,IACtB,MAAM4D,EAAO5D,EAAE5E,QACTq0H,EAAUisD,EAAW93K,GACrBsna,EAAmB,CAAC,EAC1B5wE,GAAOwwE,GAAqB,CAAC7oZ,EAAWvd,KACtCsma,EAAiBtma,EAAU+qH,GAASxnF,MAAKrkC,IAClCmna,EAAiBrma,KACpBq1V,EAAO93U,GAAWvf,IAChBA,GAAS,EAAM,CACbkB,OACAc,WACA+qH,WACA,IAEJs7S,EAAiBrma,GAAYud,GAE/BipZ,EAAiBxma,GAAYud,CAAS,GACtC,IAEJq4U,GAAOywE,GAAkB,CAAC9oZ,EAAWvd,KAC9Bwma,EAAiBxma,YACbqma,EAAiBrma,GACxBq1V,EAAO93U,GAAWvf,IAChBA,GAAS,EAAO,CACdkB,OACAc,WACA+qH,WACA,IAEN,GACA,KAQGq7S,EAAoBpma,KACvBoma,EAAoBpma,GAAY,IAElComa,EAAoBpma,GAAU9J,KAAK8H,GACnCsoa,EAAiBtma,EAAUg3K,EAAW9uC,EAAOI,UAAUC,aAAahlG,MAAK,KACvE8iY,EAAiBrma,GAAYoma,EAAoBpma,EAAS,IAErD,CACL8pK,OAAQ,KACNo8P,GAAsBE,EAAqBpma,EAAUhC,GACrDkoa,GAAsBG,EAAkBrma,EAAUhC,EAAS,IAIlE,EAGH,MAAMyoa,GAAkBvna,MACZA,IAAQA,EAAKgiD,gBAAkBlkD,GAASisH,GAAaS,QAAQxqH,EAAKgiD,eAAgB+nE,GAAaS,QAAQxqH,IAS7Gwna,GAAkB,CAAC7+S,EAAKmV,EAAKmW,EAAYjL,KAC7C,IAAIy+R,EACAC,EACJ,MAAM,0BAACL,GAA6BJ,GAAgBt+S,EAAKqgB,GAcnDwuB,EAAa,CAACl9J,EAAS0R,IAASs6Z,GAAat9R,EAAQ1uI,EAAS0R,GA+B9DknJ,EAAWwT,IACf,MAAM/Y,EAAMg6Q,IACZh6Q,EAAIuF,WAAWwT,GACf5Y,EAAOH,EAAI,EAEPwoO,EAAS,IAAMr4P,EAAIwjC,aAAexjC,EAAIwjC,eAAiBxjC,EAAIhmI,SAASsxI,UACpEu+R,EAAW,KACf,IAAIh6Q,EACJ,MAAMi6Q,EAA2B,CAACC,EAAKC,EAAaC,KAClD,IACE,OAAOD,EAAYE,sBAAsBH,EAAKE,EAChD,CAAE,MAAO9mR,GACP,OAAQ,CACV,GAEIvyB,EAAMoP,EAAIhmI,SAChB,GAAIksH,EAAcglB,EAAOu3C,YAAc9E,GAASzyC,GAAS,CACvD,MAAMu3C,EAAW3T,GAAO5jC,GACxB,GAAIu3C,EAASt7D,SACX,OAAOs7D,EAAS3qL,KAAI2rB,GAAKynX,GAAchgQ,EAAQ,CAACznH,IAAI,KAAIgkG,MAAMmJ,EAAIgrC,cAEtE,CACA,IACE,MAAMtwB,EAAY+sP,IACd/sP,IAAcqyN,GAAiBryN,EAAUs8B,cAEzC/X,EADEvkB,EAAUi8B,WAAa,EACnBj8B,EAAUm8B,WAAW,GAErB72C,EAAIgrC,cAEZ/L,EAAMq7O,GAAchgQ,EAAQ,CAAC2kB,IAAM,GAEvC,CAAE,MAAO1M,GACT,CAIA,GAHK0M,IACHA,EAAMj/B,EAAIgrC,eAER0iM,GAAazuM,EAAIiN,iBAAmBjN,EAAI0N,UAAW,CACrD,MAAMxpC,EAAMlJ,EAAIyhE,UAChBz8B,EAAIK,SAASn8B,EAAK,GAClB87B,EAAIM,OAAOp8B,EAAK,EAClB,CASA,OARI41S,GAAiBC,IACsD,IAArEE,EAAyBj6Q,EAAIs6Q,eAAgBt6Q,EAAK85Q,IAAyF,IAAjEG,EAAyBj6Q,EAAIu6Q,WAAYv6Q,EAAK85Q,GAC1H95Q,EAAM+5Q,GAEND,EAAgB,KAChBC,EAAgB,OAGb/5Q,CAAG,EAENG,EAAS,CAACH,EAAKqmC,KACnB,IA5GiBrmC,MACdA,GAGI45Q,GAAgB55Q,EAAIiN,iBAAmB2sQ,GAAgB55Q,EAAImN,cAwG7DqtQ,CAAax6Q,GAChB,OAEF,MAAM4T,EAAM40N,IAMZ,GADAxoO,EAJY3kB,EAAO7xH,SAAS,oBAAqB,CAC/C8vB,MAAO0mH,EACPqmC,YAEQ/sJ,MACNs6H,EAAK,CACPmmQ,EAAgB/5Q,EAChB,IACE4T,EAAImD,kBACJnD,EAAIoD,SAAShX,EACf,CAAE,MAAO1M,GACT,EACgB,IAAZ+yC,GAAqBzyB,EAAIn1J,SAC3Bm1J,EAAIrO,SAASvF,EAAImN,aAAcnN,EAAIoN,WACnCwG,EAAIn1J,OAAOuhJ,EAAIiN,eAAgBjN,EAAIkN,cAErC4sQ,EAAgBlmQ,EAAI8D,WAAa,EAAI9D,EAAIgE,WAAW,GAAK,IAC3D,CACA,IAAK5X,EAAI0N,WAAa1N,EAAIiN,iBAAmBjN,EAAImN,eAAyB,OAARyG,QAAwB,IAARA,OAAiB,EAASA,EAAIuD,mBAC1GnX,EAAIoN,UAAYpN,EAAIkN,YAAc,GAChClN,EAAIiN,eAAezwC,gBAAiB,CACtC,MAAMnqH,EAAO2tJ,EAAIiN,eAAexwC,WAAWujC,EAAIkN,aAC3C76J,GAA0B,QAAlBA,EAAK4oH,WACf24C,EAAIuD,iBAAiBnX,EAAIiN,eAAgBjN,EAAIkN,YAAalN,EAAImN,aAAcnN,EAAIoN,WAC5EwG,EAAImE,aAAe/X,EAAIiN,gBAAkB2G,EAAIoE,YAAchY,EAAImN,cACjEyG,EAAIuD,iBAAiB9kK,EAAM,EAAGA,EAAM,GAG1C,CAGJgpI,EAAO7xH,SAAS,yBAA0B,CACxC8vB,MAAO0mH,EACPqmC,WACA,EAQExwB,EAAY,KAChB,MAAMjC,EAAM40N,IACNzwN,EAAqB,OAARnE,QAAwB,IAARA,OAAiB,EAASA,EAAImE,WAC3DC,EAAoB,OAARpE,QAAwB,IAARA,OAAiB,EAASA,EAAIoE,UAChE,IAAKpE,IAAQmE,IAAeC,GAAa81L,GAAiB/1L,IAAe+1L,GAAiB91L,GACxF,OAAO,EAET,MAAMyiQ,EAAcz/S,EAAIilC,YAClBy6Q,EAAa1/S,EAAIilC,YACvB,IACEw6Q,EAAYp6Q,SAAS0X,EAAYnE,EAAIqE,cACrCwiQ,EAAYl1Q,UAAS,GACrBm1Q,EAAWr6Q,SAAS2X,EAAWpE,EAAIsE,aACnCwiQ,EAAWn1Q,UAAS,EACtB,CAAE,MAAO92J,GACP,OAAO,CACT,CACA,OAAOgsa,EAAYJ,sBAAsBI,EAAYH,eAAgBI,IAAe,CAAC,EA+CjFtnT,EAAU,CACd4H,MACAmV,MACAmW,aACAjL,SACA00G,OANa,CAACvjP,EAAU,CAAEmF,KAAM,UAAawuJ,EAAOq1O,GAAWx6Q,GAAK+0H,OAAOiqL,IAAYxta,IAOvF+4J,WACAuE,kBAtNwB,CAACz3J,EAAM8yC,KAC/B,MAAM66G,EAAMhlC,EAAIilC,YACZ5pC,EAAchkH,IAASgkH,EAAclxE,IACvC66G,EAAIK,SAAShuJ,EAAM8yC,GACnB66G,EAAIM,OAAOjuJ,EAAM8yC,GACjBg7G,EAAOH,GACPuF,GAAS,KAETwjO,GAAa/tQ,EAAKglC,EAAK3kB,EAAO5tC,WAAW,GACzC0yD,EAAOH,GACT,EA6MAywB,WA3MiBpyK,GAAQ65Z,GAAa78R,EAAQh9H,GA4M9CwrJ,aACAgpB,YAzMkB,CAAClhL,EAAMmnG,IAAe6hU,EAAgB9nP,YAAYlhL,EAAMmnG,GA0M1Em6E,eAzMqBL,GAAY+nP,EAAgB1nP,eAAeL,GA0MhEjkL,OAzMe,CAAC0D,EAAM1F,KA9/OX,EAACquH,EAAK3oH,EAAM1F,IAAYoqH,EAASlwH,KAAKwL,GAAMk9D,MAAKl9D,GAAQ0kH,EAASlwH,KAAKwL,EAAK0wB,YAAY96B,KAAIsoD,IACzG,MAAMo1B,EAAMq1C,EAAI6qE,UAAUxzL,GACpB2tJ,EAAMhlC,EAAIilC,YAOhB,OANAD,EAAIK,SAAS9vG,EAAQo1B,GACrBq6E,EAAIM,OAAO/vG,EAAQo1B,EAAM,GACrBh5E,IACFo8X,GAAa/tQ,EAAKglC,EAAK3tJ,GAAM,GAC7B02X,GAAa/tQ,EAAKglC,EAAK3tJ,GAAM,IAExB2tJ,CAAG,MAs/ORrxJ,CAAOqsH,EAAK3oH,EAAM1F,GAAS+pC,KAAKypH,GACzB9tJ,GAwMPmmL,YAtMkB,KAClB,MAAMx4B,EAAMg6Q,IAAYpmQ,EAAM40N,IAC9B,SAAKxoO,GAAOA,EAAIznH,QAGZynH,EAAI46Q,iBAC6C,IAA5C56Q,EAAI46Q,iBAAiB,aAAc56Q,IAEpC4T,GAAO5T,EAAI0N,UAAS,EA+L5B9T,WA7LiB,KACjB,GAAIve,EAAOhkH,KAAK+wJ,aACd,OAAO,EAET,MAAMpoB,EAAMg6Q,IACNa,EAAuBx/R,EAAO5tC,UAAUp6F,iBAAiB,2BAC/D,OAAIwna,EAAqBnka,OAAS,EACzBihH,GAAOkjT,GAAsBzjX,GAAM4jE,EAAI4+B,WAAWxiG,EAAGj5C,iBAErD88X,GAAgBjgR,EAAKglC,EAC9B,EAoLA6V,YACAilQ,QAtFc52S,IACd2lC,EAAW7uC,EAAI2tP,aAAazkP,IACrBA,GAqFPgmD,QAnFgB,IAnrPJ,EAAC/nI,EAAM69G,KACrB,IAAKA,EACH,OAAO79G,EAET,IAAI8qH,EAAiBjN,EAAIiN,eACrBE,EAAenN,EAAImN,aACvB,MAAMD,EAAclN,EAAIkN,YAClBE,EAAYpN,EAAIoN,UACtB,IAAI/6J,EAAO2tJ,EAAI0mC,wBACV1mC,EAAI0N,YACHT,IAAmBE,GACjBC,EAAYF,EAAc,GACxBD,EAAezwC,kBACjBnqH,EAAO46J,EAAexwC,WAAWywC,IAInCohM,GAASrhM,IAAmBqhM,GAASnhM,KAErCF,EADEA,EAAev2J,SAAWw2J,EACXkuO,GAAmBnuO,EAAe1uC,aAAa,GAE/C0uC,EAAelqI,WAGhCoqI,EADgB,IAAdC,EACaguO,GAAmBjuO,EAAa7uC,iBAAiB,GAEjD6uC,EAAapqI,WAE1BkqI,GAAkBA,IAAmBE,IACvC96J,EAAO46J,KAIb,MAAM/oC,EAAMoqO,GAASj8V,GAAQA,EAAK0wB,WAAa1wB,EAC/C,OAAO+oH,GAAc8I,GAAOA,EAAM/hF,CAAI,EAipPd+nI,CAAQ7uC,EAAO5tC,UAAWusU,KAoFhDxxC,SACAroO,SACA8e,OAAQ+6P,EACRt+R,SAtNiBy/P,GAAQz/P,GAASL,EAAO5tC,UAAWusU,IAAY7+B,GAuNhEniQ,OAtNemiQ,GAAQniQ,GAAOqC,EAAO5tC,UAAWusU,IAAY7+B,GAuN5Dl8M,kBAxF0B,CAACg1M,EAAU8mC,IAhpPf,EAAC//S,EAAKglC,EAAKi0O,EAAU8mC,KAC7C,MAAM/7O,EAAiB,GACjB78I,EAAO64E,EAAIyhE,UACXh1L,EAAQuzH,EAAIwgB,UAAUy4P,GAAYv4P,GAASv5F,EAAM69G,EAAKA,EAAI0N,WAAY1yC,EAAI2gB,SAC1Ev2H,EAAM41G,EAAIwgB,UAAUu/R,GAAU/hS,GAAO72F,EAAM69G,EAAKA,EAAI0N,WAAY1yC,EAAI2gB,SAI1E,GAHIl0I,GAASA,IAAU06C,GACrB68I,EAAe31L,KAAK5B,GAElBA,GAAS2d,GAAO3d,IAAU2d,EAAK,CACjC,IAAI/S,EACJ,MAAMm9K,EAAS,IAAIg9K,GAAc/kW,EAAO06C,GACxC,MAAQ9vC,EAAOm9K,EAAO/9H,SAAWp/C,IAAS+S,GACpC41G,EAAI2gB,QAAQtpI,IACd2sL,EAAe31L,KAAKgJ,EAG1B,CAIA,OAHI+S,GAAO3d,IAAU2d,GAAOA,IAAQ+8B,GAClC68I,EAAe31L,KAAK+b,GAEf45K,CAAc,EA4nP6BC,CAAkBjkE,EAAKg/S,IAAY/lC,EAAU8mC,GAyF7FhiX,UArEgB,KAChB,MAAMinG,EAAMg6Q,IACNpmQ,EAAM40N,IACZ,KAziUKL,GAyiUkBv0N,GAziUKl9J,OAAS,IAyiUNsyX,GAAa3tP,GAAS,CACnD,MAAMi6P,EAAUD,GAAYr6Q,EAAKglC,GAIjC,OAHAs1O,EAAQ5+V,MAAK4+V,IACXn1O,EAAOm1O,EAASz/N,IAAY,IAEvBy/N,EAAQ19Q,MAAMooC,EACvB,CACA,OAAOA,CAAG,EA4DVg7Q,gBA1DsB,CAAC7na,EAAUhC,KACjCuoa,EAA0Bvma,EAAUhC,GAC7BiiH,GAyDPsmT,4BACAuB,mBAxDyB,KACzB,IAAIC,EACA7oa,EAAO2oH,EAAIyhE,UACf,KAAOpqL,GAA0B,SAAlBA,EAAK4oH,UAAqB,CACvC,GAAI5oH,EAAK83R,aAAe93R,EAAKkkD,aAAc,CACzC2kX,EAAkB7oa,EAClB,KACF,CACAA,EAAOA,EAAK0wB,UACd,CACA,OAAOm4Y,CAAe,EA+CtBjtP,eA7CqB,CAAC/pD,EAAKooO,KACvBj2O,EAAc6N,GArkQQ,EAACmX,EAAQxxI,EAASyiW,MAC7BjxN,EAAO2sC,OAASqvN,GAAoBE,IAC5Cl8P,EAAQxxI,EAASyiW,EAAW,EAokQjC6uE,CAAsB9/R,EAAQnX,EAAKooO,GAEnCkrC,GAAoBn8P,EAAQ2+R,IAAY1tE,EAC1C,EAyCA8uE,aAvCmB,CAAC7lX,EAASC,IAAY2qG,EAAOrjC,GAAUvnE,EAASC,EAAS6lF,EAAOwK,WAwCnFvwF,sBAvC4B,KAC5B,MAAM0qG,EAAMg6Q,IACZ,OAAOh6Q,EAAI0N,UAAYonN,GAAcG,eAAej1N,GAAKwY,iBAAiB,GAAKxY,EAAI1qG,uBAAuB,EAsC1G39B,QApCc,KACdw4G,EAAM2pS,EAAgBC,EAAgB,KACtCsB,EAAiB1jZ,SAAS,GAoCtBgjZ,EAAkB7qC,GAAgB18Q,GAClCioT,EAAmB/pC,GAAiBl+Q,EAASioB,GAGnD,OAFAjoB,EAAQunT,gBAAkBA,EAC1BvnT,EAAQioT,iBAAmBA,EACpBjoT,CAAO,EAyDVq6E,GAAa,CAAC6tO,EAAYj6P,EAAUrmD,KACxCsgT,EAAW7rC,mBAAmB,qBAAqB,CAACr9X,EAAO5E,KACzD,IAAI2e,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB9Z,EAAK6pH,KAAK,WAAY7pH,EAAK6pH,KAAK,sBAChC7pH,EAAK6pH,KAAK1uH,EAAM,KAClB,KAEF8ta,EAAW7rC,mBAAmB,kBAAkB,CAACr9X,EAAO5E,KACtD,MAAM+ta,EAAe,YAAc/ta,EAC7BozW,EAAev/L,EAASw/L,cACxBC,EAAoBz/L,EAAS0/L,oBACnC,IAAI50V,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB,IAAI3iB,EAAQ6I,EAAK6pH,KAAKq/S,QACRtwa,IAAVzB,GACF6I,EAAK6pH,KAAK1uH,EAAMhE,EAAMkN,OAAS,EAAIlN,EAAQ,MAC3C6I,EAAK6pH,KAAKq/S,EAAc,QAExB/xa,EAAQ6I,EAAK6pH,KAAK1uH,GACL,UAATA,EACFhE,EAAQwxH,EAAIotP,eAAeptP,EAAImyL,WAAW3jT,GAAQ6I,EAAK7E,MAC9CozW,IACTp3W,EAAQo3W,EAAar6W,KAAKu6W,EAAmBt3W,EAAOgE,EAAM6E,EAAK7E,OAEjE6E,EAAK6pH,KAAK1uH,EAAMhE,EAAMkN,OAAS,EAAIlN,EAAQ,MAE/C,KAEF8xa,EAAW7rC,mBAAmB,SAASr9X,IACrC,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB,IAAI3iB,EAAQ6I,EAAK6pH,KAAK,SAClB1yH,IACFA,EAAQA,EAAMa,QAAQ,8BAA+B,IACrDgI,EAAK6pH,KAAK,QAAS1yH,EAAMkN,OAAS,EAAIlN,EAAQ,MAElD,KAEF8xa,EAAW7rC,mBAAmB,iBAAiB,CAACr9X,EAAO5E,EAAM6Q,KAC3D,IAAI8N,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB,GAAmC,aAA/B9Z,EAAK6pH,KAAK,mBAAoC79G,EAAK2rW,QAAS,CAC9D,MAAMwxD,EAAczkT,EAASlwH,KAAKwL,EAAK4sH,YAAYvH,QAAOuH,IACxD,IAAIjlH,EACJ,OAAQurL,GAAmC,QAA3BvrL,EAAKilH,EAAWz1H,aAA0B,IAAPwQ,EAAgBA,EAAK,GAAG,IAEzEwha,EACFnpa,EAAKktH,SAELltH,EAAK0qD,QAET,CACF,KAEFu+W,EAAW5tO,cAAc,gBAAgB,CAACt7L,EAAO5E,KAC/C,IAAIwM,EACJ,MAAM5N,EAAO5C,GACJA,EAAMa,QAAQ,2BAA4B,MAAMA,QAAQ,qBAAsB,IAAIA,QAAQ,0HAA2H,IAAIA,QAAQ,4GAA6G,IAEvV,IAAI8hB,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACb8yG,EAAa5sH,EAAK4sH,WAClBz1H,EAA4F,QAAnFwQ,EAAoB,OAAfilH,QAAsC,IAAfA,OAAwB,EAASA,EAAWz1H,aAA0B,IAAPwQ,EAAgBA,EAAK,GAC/H,GAAa,WAATxM,EAAmB,CACrB,MAAMmE,EAAOU,EAAK6pH,KAAK,QACnBvqH,GACFU,EAAK6pH,KAAK,OAAiB,gBAATvqH,EAAyB,KAAOA,EAAKtH,QAAQ,SAAU,KAE3C,UAA5Bg3K,EAASg9N,gBAA8Bp/Q,GAAcz1H,EAAMkN,OAAS,IACtEuoH,EAAWz1H,MAAQ,iBAAmB4C,EAAK5C,GAAS,WAExD,KACkC,UAA5B63K,EAASg9N,gBAA8Bp/Q,GAAcz1H,EAAMkN,OAAS,IACtEuoH,EAAWz1H,MAAQ,YAAW4C,EAAK5C,GAAS,WAGlD,KAEF8xa,EAAW5tO,cAAc,YAAYt7L,IACnC,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACb3iB,EAAQ6I,EAAK7I,MACf63K,EAASo6P,gBAA+F,KAAlE,OAAVjya,QAA4B,IAAVA,OAAmB,EAASA,EAAMy6B,QAAQ,aAC1F5xB,EAAK7E,KAAO,SACZ6E,EAAKV,KAAO,EACZU,EAAK7I,MAAQwxH,EAAIq8O,OAAO7tW,EAAMa,QAAQ,oBAAqB,MACkC,KAAzE,OAAVb,QAA4B,IAAVA,OAAmB,EAASA,EAAMy6B,QAAQ,qBACtE5xB,EAAK7E,KAAO,QACZ6E,EAAKV,KAAO,EACZU,EAAKghB,KAAM,EACXhhB,EAAK7I,MAAQg9Z,SAASh9Z,GAAO+/G,OAAO,IAExC,KAEF+xT,EAAW5tO,cAAc,uBAAuB,CAACt7L,EAAO5E,KACtD,IAAI2e,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACD,IAAd9Z,EAAKV,KACPU,EAAK0qD,SACkB,IAAd1qD,EAAKV,OACD,UAATnE,GAAqB6E,EAAK6pH,KAAK,SACjC7pH,EAAK6pH,KAAK,OAAQ,QAGxB,KAEFo/S,EAAW7rC,mBAAmB,iBAAiBr9X,IAC7Co2V,EAAOp2V,GAAOC,IACuB,iBAA/BA,EAAK6pH,KAAK,mBACR7pH,EAAKu3J,QAAQ0xQ,EAAW7va,OAAO29L,uBACjC/2L,EAAK0qD,SAEL1qD,EAAKktH,SAET,GACA,IAEJ+7S,EAAW7rC,mBAAmB,kJAA4J,CAACr9X,EAAO5E,KAChM,IAAI2e,EAAI/Z,EAAMsE,OACd,KAAOyV,KACL/Z,EAAM+Z,GAAG+vG,KAAK1uH,EAAM,KACtB,IAEE6zK,EAASq6P,qBAzLO,EAACr6P,EAAUi6P,EAAY7va,KAC3C6va,EAAW5tO,cAAc,MAAM,CAACt7L,EAAO9H,EAAG+T,KACxC,MAAM+9K,EAAgBxmE,GAAMn3G,OAAO,CAAC,EAAGhT,EAAOsxL,oBACxCgyN,EAAmBtjZ,EAAO29L,sBAC1BsmK,EAAqBjkW,EAAOkkW,wBAClCvzK,EAAcz/K,KAAO,EACrB,MAAMg/H,EAAUtpI,GAAQA,EAAK7E,QAAQ4uL,GAAiB22K,GAAsBtnW,EAAQ4G,GACpF,IAAK,IAAI8Z,EAAI,EAAG4Z,EAAI3zB,EAAMsE,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAC5C,IAAI9Z,EAAOD,EAAM+Z,GACbokC,EAASl+C,EAAKk+C,OAClB,GAAIA,GAAUorF,EAAQprF,IAAWl+C,IAASk+C,EAAOkrI,UAAW,CAC1D,IAAIloI,EAAOlhD,EAAKkhD,KAChB,KAAOA,GAAM,CACX,MAAMqsQ,EAAWrsQ,EAAK/lD,KACtB,GAAiB,SAAboyT,GAAsD,aAA/BrsQ,EAAK2oE,KAAK,iBAAiC,CACnD,OAAb0jM,IACFvtT,EAAO,MAET,KACF,CACAkhD,EAAOA,EAAKA,IACd,CACA,GAAIlhD,IACFA,EAAK0qD,SACD6sG,GAAQn+J,EAAQsjZ,EAAkBr/C,EAAoBn/S,IAAS,CACjE,MAAMouV,EAAclzY,EAAOkzW,eAAepuT,EAAO/iD,MAC7CmxY,IACEA,EAAY1lC,YACd1oT,EAAOwM,SACE4hV,EAAY3lC,WACrB21C,GAActtO,EAAUhjK,EAAMs9H,EAASprF,GAG7C,CAEJ,KAAO,CACL,IAAIorX,EAAatpa,EACjB,KAAOk+C,GAAUA,EAAO0uE,aAAe08S,GAAcprX,EAAOkrI,YAAckgP,IACxEA,EAAaprX,GACT6rI,EAAc7rI,EAAO/iD,QAGzB+iD,EAASA,EAAOA,OAElB,GAAIorX,IAAeprX,EAAQ,CACzB,MAAMgxU,EAAW,IAAIma,GAAQ,QAAS,GACtCna,EAAS/3X,MAAQsjW,GACjBz6V,EAAKhI,QAAQk3X,EACf,CACF,CACF,IACA,EAuIA7zL,CAAcrsB,EAAUi6P,EAAYA,EAAW7va,OACjD,EA8CImwa,GAAY,CAACvgS,EAAQhpI,EAAMgM,IAHT,EAACg9H,EAAQh9H,IACxBg4G,EAAcglB,IAAWA,EAAOwgS,kBAAkB,gBAAkBx9Z,EAAKoqJ,UAGzEqzQ,CAAgBzgS,EAAQh9H,GA/BZ,EAACg9H,EAAQhpI,EAAMgM,KAClC,IAAI09Z,EACJ,MAAM/gT,EAAMqgB,EAAOrgB,IACnB,IAAIghT,EAAa3pa,EAAKstH,WAAU,GAChC,MAAMs8S,EAAO9xa,SAAS24P,eACtB,GAAIm5K,EAAK/4K,mBAAoB,CAC3B,MAAMniI,EAAMk7S,EAAK/4K,mBAAmB,IACpCttI,GAAMl/E,KAA6B,SAAxBslY,EAAW/gT,SAAsB+gT,EAAWv/S,WAAa,CAACu/S,IAAa3pa,IAChF0uH,EAAIpkH,KAAK6lB,YAAYu+F,EAAIiiI,WAAW3wP,GAAM,GAAM,IAGhD2pa,EAD0B,SAAxBA,EAAW/gT,SACA8F,EAAIpkH,KAAKsiH,WAET8B,EAAIpkH,KAEnBo/Z,EAAS/gT,EAAI+F,IACb/F,EAAI+F,IAAMA,CACZ,CAQA,MA7iTqB,EAACsa,EAAQh9H,KAASg9H,EAAO7xH,SAAS,aAAcnL,EAAK,EAsiT1E69Z,CAAe7gS,EAAQ,IAClBh9H,EACHhM,KAAM2pa,IAEJD,IACF/gT,EAAI+F,IAAMg7S,GAELC,CAAU,EAMsBG,CAAa9gS,EAAQhpI,EAAMgM,GAAQhM,EAGtE6sK,GAAc,CAACo8P,EAAYp/B,EAAW1uY,MACF,IAApCooH,GAAMk6D,QAAQosN,EAAW1uY,KAC3B8ta,EAAW7rC,mBAAmBjiY,GAAM,CAAC4E,EAAO5E,KAC1C,IAAI2e,EAAI/Z,EAAMsE,OACd,KAAOyV,KACL/Z,EAAM+Z,GAAG+vG,KAAK1uH,EAAM,KACtB,IAEF0uY,EAAU7yY,KAAKmE,GACjB,EA8BI4ua,GAAS,CAAC/gS,EAAQgmC,EAAU51K,EAAQq1V,EAAUziV,KAClD,MAAM1R,EALc,EAAC00K,EAAU51K,EAAQ4G,IAChBosY,GAAep9N,EAAU51K,GAC1B86I,UAAUl0I,GAGhBgqa,CAAch7P,EAAU51K,EAAQq1V,GAChD,MA9BkB,EAACzlN,EAAQh9H,EAAM1R,KACjC,IAAK0R,EAAKoqJ,WAAaptB,EAAQ,CAC7B,MAAMihS,EAlkTc,EAACjhS,EAAQh9H,IAASg9H,EAAO7xH,SAAS,cAAenL,GAkkTrDk+Z,CAAgBlhS,EAAQ,IACnCh9H,EACH1R,YAEF,OAAO2va,EAAQ3va,OACjB,CACE,OAAOA,CACT,EAqBO6va,CAAYnhS,EAAQh9H,EAAM1R,EAAQ,EAErC8va,GAAoB,CAACp7P,EAAUhmC,KACnC,MAAM6gQ,EAAY,CAAC,qBACb2vB,EAAoB,CACxB1tB,gBAAiB,QACjBu9B,qBAAqB,EACrB9sB,mBAAmB,KAChBvtO,GAECrmD,EAAMqgB,GAAUA,EAAOrgB,IAAMqgB,EAAOrgB,IAAM8qP,GAASvoL,IACnD9xL,EAAS4vI,GAAUA,EAAO5vI,OAAS4vI,EAAO5vI,OAASivW,GAAOmxD,GAC1DyP,EAAa5P,GAAUG,EAAmBpga,GAChDgiM,GAAW6tO,EAAYzP,EAAmB7wS,GAW1C,MAAO,CACLvvH,SACAiiM,cAAe4tO,EAAW5tO,cAC1B+hM,mBAAoB6rC,EAAW7rC,mBAC/BlpP,UAdgB,CAACl0I,EAAMugZ,EAAa,CAAC,KACrC,MAAMv0Y,EAAO,CACX4iC,OAAQ,UACL2xW,GAEC70N,EAAa69O,GAAUvgS,EAAQhpI,EAAMgM,GACrCi+G,EAvCc,EAACtB,EAAK3oH,EAAMgM,KAClC,MAAMi+G,EAAO0zP,GAAO3xW,EAAK2sH,SAAW34H,EAAKylB,UAAYkjG,EAAI2tP,aAAat2W,IACtE,OAAOgM,EAAKo9H,WAAa8zO,GAAoBnzP,GAAaS,QAAQxqH,IAASiqH,EAAO1G,GAAMxpH,KAAKkwH,EAAK,EAqCnFogT,CAAgB1hT,EAAK+iE,EAAY1/K,GACxCyiV,EApCQ,EAACw6E,EAAYh/S,EAAMj+G,KACnC,MAAMu0Y,EAAav0Y,EAAKo9H,UAAY,CAClCyxR,mBAAmB,KAChB7uZ,GACDA,EACEyiV,EAAWw6E,EAAWvsa,MAAMutH,EAAMs2R,GAExC,MAjFqB9xD,KACrB,MAAM1nM,EAAO/mJ,GACwD,QAAlD,OAATA,QAA0B,IAATA,OAAkB,EAASA,EAAK7E,MAErDmva,EAAU77E,EAASrlK,UACzB,GAAIriC,EAAKujR,GAAU,CACjB,MAAMC,EAAUD,EAAQppX,KACpB6lG,EAAKwjR,KACPD,EAAQ5/W,SACR6/W,EAAQ7/W,SAEZ,GAqEA8/W,CAAe/7E,GACRA,CAAQ,EA6BIg8E,CAAUxB,EAAYh/S,EAAMj+G,GAC7C,MAAuB,SAAhBA,EAAK4iC,OAAoB6/S,EAAWs7E,GAAO/gS,EAAQwwR,EAAmBpga,EAAQq1V,EAAUziV,EAAK,EAOpG0+Z,SAAUtxa,EAAOuxW,iBACjBggE,SAAUvxa,EAAOyxW,iBACjBh+L,YAAazoD,EAAMyoD,GAAao8P,EAAYp/B,GAC5CuB,aAAcp1X,EAAS6zX,GACvByX,eAAgB2nB,EAAW3nB,eAC3BC,oBAAqB0nB,EAAW1nB,oBAChCoY,iBAAkBsP,EAAWtP,iBAC7BC,sBAAuBqP,EAAWrP,sBACnC,EAGGgR,GAAgB,CAAC57P,EAAUhmC,KAC/B,MAAM6hS,EAAgBT,GAAkBp7P,EAAUhmC,GAClD,MAAO,CACL5vI,OAAQyxa,EAAczxa,OACtBiiM,cAAewvO,EAAcxvO,cAC7B+hM,mBAAoBytC,EAAcztC,mBAClClpP,UAAW22R,EAAc32R,UACzBw2R,SAAUG,EAAcH,SACxBC,SAAUE,EAAcF,SACxB99P,YAAag+P,EAAch+P,YAC3Bu+N,aAAcy/B,EAAcz/B,aAC5BkW,eAAgBupB,EAAcvpB,eAC9BC,oBAAqBspB,EAActpB,oBACnCoY,iBAAkBkR,EAAclR,iBAChCC,sBAAuBiR,EAAcjR,sBACtC,EAUGx7O,GAAa,CAACp1C,EAAQh9H,EAAO,CAAC,KAClC,MACMi4Z,EARY,EAACj4Z,EAAM4iC,KAAW,IACjC5iC,EACH4iC,SACAl4C,KAAK,EACLiiI,UAAU,IAIYmyS,CAAY9+Z,EADnBA,EAAK4iC,OAAS5iC,EAAK4iC,OARZ,QAUtB,OAAOytX,GAAqBrzR,EAAQi7R,GAAen/S,KAAKZ,GAAUigT,IAChE,MAAM7pa,EA3wBW,EAAC0uI,EAAQh9H,IAAS25Z,GAA2B38R,GAAQA,OAAOo1C,WAAWpyK,GA2wBxE++Z,CAAa/hS,EAAQm7R,GACrC,OAAO5H,GAAsBvzR,EAAQ1uI,EAAS6pa,EAAY,GAC1D,EAUE3sQ,GAAa,CAACxuB,EAAQ1uI,EAAS0R,EAAO,CAAC,KAC3C,MAAMi4Z,EAPU,EAACj4Z,EAAM1R,KAAY,CACnCs0C,OAFoB,UAGjB5iC,EACHpV,KAAK,EACL0D,YAGsB0wa,CAAUh/Z,EAAM1R,GACtC,OAAOmia,GAAqBzzR,EAAQi7R,GAAerua,KAAIuua,IACrD,MAAMtsZ,EAzxBW,EAACmxH,EAAQ1uI,EAAS0R,IAAS25Z,GAA2B38R,GAAQA,OAAOwuB,WAAWl9J,EAAS0R,GAyxB3Fi/Z,CAAajiS,EAAQm7R,EAAY7pa,QAAS6pa,GAEzD,OADAxH,GAAsB3zR,EAAQnxH,EAAOoyG,KAAMk6S,GACpCtsZ,EAAOvd,OAAO,IACpBirH,MAAMjrH,EAAQ,EAGb4wa,GAAiB,u5BAAu7Bhxa,MAAM,KAC98Bixa,GAAoB,GACpBC,GAAiB,2FAA2Flxa,MAAM,KAClHmxa,GAAoB,GACpBC,GAAqB,CAACnxa,EAASoxa,KACnC,MAAMC,EAAen1E,EAASk1E,GAAcE,GAAW/uO,GAAMviM,EAASsxa,KACtE,OAAOh3a,GAAK+2a,EAAa,EAErBE,GAAoBvxa,IACxB,MAAMqxa,EAAeF,GAAmBnxa,EAAS+wa,IAC3ChiB,EAAkB/uZ,EAAQ0ga,kBAIhC,OAHwB,IAApB3R,GAAiD,KAApBA,GAC/BsiB,EAAax0a,KAAK,kCAEbvC,GAAK+2a,EAAa,EAErBG,GAAuBxxa,GAAWmxa,GAAmBnxa,EAASgxa,IAC9DS,GAAqB,CAACzxa,EAASoxa,KACnC,MAAMrtZ,EAAUqlG,GAAMs2L,QAAQ1/S,EAAQ+jB,QAAS,KAEzC2tZ,EAAcx1E,EAASk1E,GADX/xV,GAAUkjH,GAAMx+K,EAASs7D,KAE3C,OAAO/kF,GAAKo3a,EAAY,EAEpBC,GAAoB3xa,GAAWyxa,GAAmBzxa,EAASixa,IAC3DW,GAAuB5xa,GAAWyxa,GAAmBzxa,EAASkxa,GAAkBz1a,KAAIqiE,GAASA,EAAM98D,QAenG6wa,GAAuB7wa,GAAQkkM,GAAOgsO,IAAmBpzW,GAASA,EAAM98D,OAASA,IAAM2pH,MAAK,IAAM3pH,IAAM88D,GACxGA,EAAMg0W,aACD,GAAI9wa,kBAAuB88D,EAAMg0W,eAEjC9wa,IAeL+wa,GAAc,CAACC,EAAYC,KAjCN,EAACD,EAAYC,KACtC,MAAMlB,EAAiBQ,GAAkBS,GACnCf,EAAiBU,GAAkBM,GACnCC,EAAoBjB,EAAe/ma,OAAS,EAC5Cioa,EAAoBpB,EAAe7ma,OAAS,EAC5Ckoa,EAAkD,WAA5BH,EAAkBI,MAC9C,GAAIH,GAAqBC,GAAqBC,EAAqB,CACjE,MAAME,EAAa,OACbC,EAAgBH,EAAsB,cAAeE,UAAsB,GAC3EE,EAAiBN,EAAoB,eAAgBI,IAAerB,EAAen0a,KAAKw1a,KAAiB,GACzGG,EAAiBN,EAAoB,eAAgBG,IAAevB,EAAej0a,KAAKw1a,KAAiB,GAC/Gn6Z,QAAQxD,KAAK,4QAAmR49Z,EAAgBC,EAAiBC,EACnU,GAsBAC,CAAmBV,EAAYC,GAbH,EAACD,EAAYC,KACzC,MAAMjB,EAAoBQ,GAAqBQ,GACzCd,EAAoBU,GAAqBK,GACzCU,EAAuBzB,EAAkBhna,OAAS,EAClD0oa,EAAuB5B,EAAkB9ma,OAAS,EACxD,GAAIyoa,GAAwBC,EAAsB,CAChD,MAAMN,EAAa,OACbE,EAAiBG,EAAuB,eAAgBL,IAAepB,EAAkBz1a,IAAIo2a,IAAsB/0a,KAAKw1a,KAAiB,GACzIG,EAAiBG,EAAuB,eAAgBN,IAAetB,EAAkBl0a,KAAKw1a,KAAiB,GACrHn6Z,QAAQxD,KAAK,oFAAsF69Z,EAAiBC,EACtH,GAIAI,CAAsBb,EAAYC,EAAkB,EAGhDa,GAAQx5D,GAASvoL,IAIjBgiP,GAAcnuZ,GAAK2lG,EAASlwH,KAAKuqB,GAAGslB,MAAKtlB,GAAKA,EAAEuG,YAsBhD6nZ,GAAWnkS,IACf,IAAKA,EAAOlyE,QAAS,CACnB,MAAM,oBAACiqV,EAAmB,aAAEqsB,GAAgBpkS,EACtC1+H,EAAO0+H,EAAO5tC,UACd5jG,EAAUwxI,EAAOj4G,aACnBzmB,GACF0+H,EAAO9zF,KAAK,CAAEm4X,aAAa,IAE7BrkS,EAAOlyE,SAAU,EACjBkyE,EAAOskS,wBACHtkS,EAAO+gP,gBAAkB/lQ,EAA0B,OAAZxsH,QAAgC,IAAZA,OAAqB,EAASA,EAAQ00H,cACnG+gT,GAAMviX,OAAOlzD,EAAQ00H,aA3xTR8c,KACjBA,EAAO7xH,SAAS,SAAS,EA4xTvBo2Z,CAAWvkS,GACXA,EAAO08K,cAAch7P,OAAOs+E,IACvBA,EAAO2sC,QAAUrrK,GAxCI0+H,KAC5BikS,GAAMxmV,SAASuiD,EAAOlhH,GAAI,UAAWkhH,EAAOwkS,WAAW,EAwCnDC,CAAsBzkS,GA7xTTA,KACjBA,EAAO7xH,SAAS,SAAS,EA8xTvBu2Z,CAAW1kS,GACXikS,GAAMviX,OAAOs+E,EAAOmyC,gBACpB+xP,GAAYnsB,GACZmsB,GAAYE,GACZpkS,EAAO1jH,SACT,GAEIA,GAAU,CAAC0jH,EAAQ2kS,KACvB,MAAM,UAACvkS,EAAS,IAAEzgB,GAAOqgB,EACrBA,EAAOzjH,YAGNooZ,GAAc3kS,EAAOlyE,SAIrB62W,IACH3kS,EAAO08K,cAAc72I,IAAI,eAAgB7lC,EAAO4kS,eAC5C5kS,EAAOwjS,OAASxjS,EAAOwjS,MAAMlnZ,SAC/B0jH,EAAOwjS,MAAMlnZ,UAEf4nZ,GAAY9jS,GACZ8jS,GAAYvkT,IAlDIqgB,KAClB,MAAM/sI,EAAO+sI,EAAO0qH,YAChBz3P,IACEA,EAAK4xa,gBACP5xa,EAAKikV,OAASjkV,EAAK4xa,qBACZ5xa,EAAK4xa,eAEdZ,GAAMriQ,OAAO3uK,EAAM,eAAgB+sI,EAAO8kS,mBAC5C,EA4CAC,CAAY/kS,GA/DaA,KACzB,MAAM+pK,EAAK/pK,EACX+pK,EAAGwhD,qBAAuBxhD,EAAGr/C,YAAcq/C,EAAGlvP,UAAYkvP,EAAG2L,gBAAkB,KAC/E3L,EAAG2C,YAAc3C,EAAGvhH,gBAAkBuhH,EAAGva,cAAgB,KACzDua,EAAG9a,cAAgB8a,EAAG58H,UAAY,KAClC,MAAM/sC,EAAYJ,EAAOI,UACzB,GAAIA,EAAW,CACb,MAAMzgB,EAAMygB,EAAUzgB,IACtBoqL,EAAG3pK,UAAYA,EAAUtL,IAAMsL,EAAUzgB,IAAMA,EAAI+F,IAAM,IAC3D,GAuDAs/S,CAAmBhlS,GACnBA,EAAOzjH,WAAY,GAbjByjH,EAAOt+E,SAac,EAsBnBy4D,GAnBoB,MACxB,MAAM2O,EAAS,CAAC,EAYhB,MAAO,CACLt+H,IAZU,CAACs0B,EAAImmZ,KACfn8S,EAAOhqG,GAAMmmZ,CAAQ,EAYrBv3a,IAVUoxB,GACNgqG,EAAOhqG,GACFgqG,EAAOhqG,GAEP,CAAEs7F,MAAO,CAAC,GAOnBnkH,IAJU6oB,GAAM40K,GAAM5qE,EAAQhqG,GAK/B,EAEiBomZ,GAEdzzD,GAAelB,GAAakB,aAE5BtiP,GAAU,CAACg2S,EAAUt8S,IACVA,EAAIlJ,IACLwlT,GAEVC,GAAsB,CAACD,EAAUt8S,IAAQr4G,SAASgoH,GAAM3P,EAAKs8S,GAAW,IACxEE,GAAiBjqT,EAAM+T,GAAS,eAChCm2S,GAAkBlqT,EAAM+T,GAAS,gBACjCo2S,GAAenqT,EAAMgqT,GAAqB,cAC1CI,GAAgBpqT,EAAMgqT,GAAqB,eAkB3CK,GAAoB,CAACzlS,EAAQ9lF,EAASC,KAC1C,MAAMurX,EAAU3kT,GAAaS,QAAQwe,EAAO5tC,WACtC+6E,EAAYntC,EAAO2sC,OAAS+4P,GAtyjBZl3a,EAsyjBsCk3a,EAtyjB3B3kT,GAAaS,QAAQmB,GAAgBn0H,GAASmxH,IAAI13G,kBAA7DzZ,MAuyjBtB,MAAMm3a,EAdU,EAACh5P,EAAQ9jD,EAAK3uE,EAASC,KACvC,MAAMs+T,EAPsB5vP,IAAOA,EAAIlJ,IAAI1lE,wBAOxBA,CAAsB4uE,GAKzC,MAAO,CACL9yG,EAHQmkC,GAFKyyH,EAAS8rM,EAAW/sX,KAAOm9H,EAAIlJ,IAAI0V,WAAamwS,GAAc38S,GAAO,GAMlFlzG,EAHQwkC,GAFKwyH,EAAS8rM,EAAWp4V,IAAMwoG,EAAIlJ,IAAIyV,UAAYmwS,GAAa18S,GAAO,GAMhF,EAKuBpiB,CAAUu5B,EAAO2sC,OAAQQ,EAAWjzH,EAASC,GACrE,MApBiC,EAACurX,EAASxrX,EAASC,KACpD,MAAMc,EAAcoqX,GAAeK,GAC7BxqX,EAAeoqX,GAAgBI,GACrC,OAAOxrX,GAAW,GAAKC,GAAW,GAAKD,GAAWe,GAAed,GAAWe,CAAY,EAiBjF0qX,CAA2Bz4P,EAAWw4P,EAAgB5vZ,EAAG4vZ,EAAgBhwZ,EAAE,EAG9EkwZ,GAAwB7lS,IAC5B,MAAM8lS,EAAe9lS,EAAO2sC,OAAS3sC,EAAO5tC,UAAY4tC,EAAOoyC,0BAC/D,OAHkBp7K,EAGC8ua,EAHOpqT,EAASlwH,KAAKwL,GAAMpK,IAAIm0H,GAAaS,UAG9B50H,IAAI64H,IAAQlJ,OAAM,GAHjCvlH,KAGuC,EAc3D,MAAM+ua,GAAsB/lS,IAC1B,MAAMgmS,EAAgB,GAChBC,EAAoB,KACxB,MAAMzC,EAAQxjS,EAAOwjS,MACrB,OAAOA,GAASA,EAAMv3E,2BAA6Bu3E,EAAMv3E,6BAf/B,MAC5B,MAAMi6E,EAAgB,KACpB,MAAM,IAAI1ya,MAAM,8DAA8D,EAEhF,MAAO,CACL4xB,KAAM8gZ,EACNrqP,MAAOqqP,EACPnyK,QAASmyK,EACV,EAOyFh0K,EAAyB,EAE7Gi0K,EAAqB,IAClBzqT,EAASlwH,KAAKw6a,EAAc,IAK/BxlN,EAAa,KACjB2lN,IAAqB9qY,MAAK43N,IACxBA,EAAazyC,YAAY,GACzB,EAKE4lN,EAAoBnzK,IACxBs6F,GAAYy4E,GAAeK,GAClBA,IAAsBpzK,IAC5B53N,MAAKxvC,IACNm6a,EAAc5jZ,OAAOv2B,EAAO,EAAE,GAC9B,EAEEu5B,EAAO,CAACu3J,EAAMo2O,GAAY,IAC1B/yR,EAAOlyE,UAAY+3W,GAAsB7lS,GACpC,CAAC,GAEN+yR,GACF/yR,EAAO7xH,SAAS,yBAA0B,CAAE8kP,aAAct2E,IAErD0Z,GAAO2vO,GAAe/yK,IAC3B,OA1BalgQ,EA0BEkza,IAAoBlyK,QAAQd,GA1B3BvuP,EA0B0Ci4K,EAzBrD5pL,EAAEuD,OAASoO,EAAEpO,MAAQvD,EAAEwjB,OAAS7R,EAAE6R,OAASxjB,EAAEsgQ,cAAgBtgQ,EAAEgjF,UAAYrxE,EAAE2uP,cAAgB3uP,EAAEqxE,QADxF,IAAChjF,EAAG2R,CA0B+C,IAC9Dg4G,YAAW,KACZsjB,EAAO08K,cAAc1tI,UAAUhvC,GAC/B,MAAMizH,EAAegzK,IAAoB7gZ,KAAKu3J,GAAM,KAClDypP,EAAkBnzK,EAAa,IAC9B,IAAM+rI,GAAmBh/P,KAI5B,MA3BoBizH,KACtB+yK,EAAch4a,KAAKilQ,EAAa,EAuB9BqzK,CAAgBrzK,GAChBzyC,IACAxgF,EAAO7xH,SAAS,mBAAoB,CAAE8kP,aAAc,IAAKA,KAClDA,CAAY,KAUjBszK,EAAmBv5Z,EAASg5Z,GAwBlC,MAvBuBhmS,KACrBA,EAAO8K,GAAG,cAAc,KACtB,MAAM07R,EAAiBrmD,GAAkBngP,GACrCwmS,GACFphZ,EAAK,CACH7O,KAAMiwZ,EACNlwa,KAAM,UACNy/E,QAAS,IACR,GAELyqI,GAAY,IAEdxgF,EAAO8K,GAAG,+EAA+E,KACvFzpG,sBAAsBm/K,EAAW,IAEnCxgF,EAAO8K,GAAG,UAAU,KAClBqiN,EAAO64E,EAAcz2a,SAAS0jQ,IAC5BgzK,IAAoBpqP,MAAMo3E,EAAa,GACvC,IAEJjzH,EAAO0/C,YAAY,UAAW,yBAAyB,IAAMymP,IAAqBv5a,KAAI65a,GAAmB1lT,GAAaS,QAAQilT,EAAgB3yK,WAAUz4N,MAAKwtF,GAAOgnH,GAAQhnH,MAAM,EAEpL+hB,CAAe5K,GACR,CACL56G,OACAy2J,MAjCY,KACZsqP,IAAqB9qY,MAAK43N,IACxBgzK,IAAoBpqP,MAAMo3E,GAC1BmzK,EAAkBnzK,GAClBzyC,GAAY,GACZ,EA6BF+lN,mBACD,EAGGh1D,GAAgBhB,GAAagB,cAE7BC,GAAejB,GAAaiB,aAelC,MAAMk1D,GAAgB1mS,IACpB,IAAI+0M,EAAU,GACd,MAAMkxF,EAAoB,KACxB,MAAMzC,EAAQxjS,EAAOwjS,MACrB,OAAOA,GAASA,EAAMx3E,qBAAuBw3E,EAAMx3E,uBAjB/B,MACtB,MAAMk6E,EAAgB,KACpB,MAAM,IAAI1ya,MAAM,wDAAwD,EAE1E,MAAO,CACL4xB,KAAM8gZ,EACNjpF,QAASipF,EACT/8J,MAAO+8J,EACPlsP,QAASksP,EACTrqP,MAAOqqP,EACR,EAO6ES,EAAmB,EAE3FC,EAAW,CAAC7xa,EAAOw2B,IAChB,IAAIvoB,IACFuoB,EAAIA,EAAEzB,MAAM/0B,EAAOiO,QAAQpT,EAShCi3a,EAAYtpP,IAChBw3J,EAAQ/mV,KAAKuvL,GAPOA,KACpBv9C,EAAO7xH,SAAS,aAAc,CAAEovK,UAAS,EAOzCupP,CAAcvpP,EAAO,EAEjB8sK,EAAc9sK,IAPGA,KACrBv9C,EAAO7xH,SAAS,cAAe,CAAEovK,UAAS,EAO1CwpP,CAAexpP,GACfw3J,EAAUsY,EAAStY,GAASiyF,GACnBA,IAAgBzpP,IAEF,IAAnBw3J,EAAQ15U,QACV2kI,EAAO0L,OACT,EAKIu7R,EAA8B3pP,IAClCt9C,EAAO08K,cAAc1tI,UAAUhvC,GAC/B+wF,GAAM/wF,GACNA,EAAOuvC,GAAGhmI,OACV,MAAMg0I,EAASD,IAEf,OADAupP,EAAUtpP,GACHA,CAAM,EA2Bf,OALAv9C,EAAO8K,GAAG,UAAU,KAClBqiN,EAAOpY,GAASx3J,IACd0oP,IAAoBpqP,MAAM0B,EAAO,GACjC,IAEG,CACLn4J,KA1BW,CAACpiB,EAAMhR,IACXi1a,GAA4B,IAAMhB,IAAoB7gZ,KAAKpiB,EAAMhR,EAAQq4V,KA0BhFpN,QAxBcj6U,GACPika,GAA4B,IAAMhB,IAAoBhpF,QAAQj6U,EAAMqnV,KAwB3ElhF,MAtBY,CAACh8Q,EAAS2I,EAAUf,KAChC,MAAMmya,EAAoBjB,IAC1BiB,EAAkB/9J,MAAMh8Q,EAASy5a,EAAS7xa,GAAgBmya,EAAmBpxa,GAAU,EAqBvFkkL,QAnBc,CAAC7sL,EAAS2I,EAAUf,KAClC,MAAMmya,EAAoBjB,IAC1BiB,EAAkBltP,QAAQ7sL,EAASy5a,EAAS7xa,GAAgBmya,EAAmBpxa,GAAU,EAkBzF+lL,MAhBY,KAxBLngE,EAASlwH,KAAKupV,EAAQA,EAAQ15U,OAAS,IAyB/BggC,MAAKkiJ,IAClB0oP,IAAoBpqP,MAAM0B,GAC1B8sK,EAAY9sK,EAAO,GACnB,EAaH,EAGG4pP,GAAsB,CAACnnS,EAAQ7yI,KACnC6yI,EAAOonS,oBAAoBhiZ,KAAK,CAC9B9uB,KAAM,QACNigB,KAAMppB,GACN,EAEEk6a,GAAe,CAACrnS,EAAQ7yI,KACxB6yI,EAAOspL,YACT69G,GAAoBnnS,EAAQ7yI,GAE5B6yI,EAAO8K,GAAG,cAAc,KACtBq8R,GAAoBnnS,EAAQ7yI,EAAQ,GAExC,EAQIm6a,GAAW,CAACtnS,EAAQ60P,EAAW/gP,KACnC8gP,GAAU50P,EAAQ60P,EAAW,CAAE1nY,QAAS2mJ,IACxCxqI,QAAQpc,MAAM4mJ,EAAI,EAEdyzR,GAAkB,CAACjxa,EAAM0uB,EAAK7yB,IAASA,EAAO,kBAAmBmE,MAAWnE,cAAmB6yB,IAAS,kBAAmB1uB,UAAe0uB,IAyB1IwiZ,GAAY,CAACr6a,KAAY4oB,KAC7B,MAAMzM,EAAUza,OAAOya,QACnBA,IACEA,EAAQpc,MACVoc,EAAQpc,MAAMC,KAAY4oB,GAE1BzM,EAAQmC,IAAIte,KAAY4oB,GAE5B,EAII0xZ,GAA4BziZ,GAAO,WAAaA,EAAM,eAQtD0iZ,GAAkB,CAAC1nS,EAAQ2nS,KAC/B,MAAMvpL,EAAUp+G,EAAO08K,cAAcn+D,QAAU,iBAEzCqpL,EAAiB,UADR5nS,EAAO08K,cAAc3oS,aAEpC,OAAOm5U,EAAMy6E,GAAU3iZ,GAXIA,IAAOk1F,QAAQ0uM,SAAS3yT,IAAIwxa,GAA0BziZ,IAY3E6iZ,CAAqB7iZ,GAChBA,EAfgBA,IAAO,iBAAiB5zB,KAAK4zB,GAgB3C8iZ,CAAqB9iZ,KAASg7G,EAAO2sC,OACvC,GAAIyxE,KAAap5N,KAAS4iZ,IAE1B5nS,EAAOq+G,gBAAgB30B,WAAW1kM,IAE3C,EAEE+iZ,GAA+B/nS,IACnCA,EAAOkpL,WAAalpL,EAAOkpL,WAAWr8T,OArBdmzI,IACjB0nS,GAAgB1nS,EAAQ0/O,GAAc1/O,IAoBAgoS,CAAkBhoS,GAlB1CA,IACd0nS,GAAgB1nS,EAAQ4/O,GAAW5/O,IAiB8BioS,CAAejoS,GAAQ,EAM3FkoS,GAAe,CAACC,EAAcpf,KAClC,MAAMqf,EAAiB,CAAC,EAmDxB,MAAO,CAAE9ha,QAlDO,CAACuiH,EAAKlkB,EAAY8W,KAChC,MAAM4sT,EAASh7E,EANExkO,IACZA,EAAMr9H,GAAKq9H,EAAIlsG,qBAAqB,QAAU,GAK3B2rZ,CAAaz/S,IAAMmvD,IACzC,MAAMhxJ,EAAMgxJ,EAAIhxJ,IAChB,OAAIgxJ,EAAIjgL,aAAa,qBAGjBigL,EAAIjgL,aAAa,6BAGhBivB,GAAOA,IAAQ6nU,GAAIC,kBAGpB/lT,GAAW/hB,EAAK,UACVmhZ,EAAaI,WAAWvhZ,IAAQ29E,EAAUqzE,KAEhDjvI,GAAW/hB,EAAK,UACX29E,EAAUqzE,KAEP,IAERl1H,EAAWoqS,EAAMm7E,GAAQrwP,IAC7B,MAAMwwP,EAAWxwP,EAAIhxJ,IACrB,GAAI0sK,GAAM00O,EAAgBI,GACxB,OAAOJ,EAAeI,GAAUzkX,MAAK0kX,GAC/B7tT,EAAS6tT,GACJA,EAEA,CACL1hZ,MAAOixJ,EACPgxO,SAAUyf,EAAUzf,YAIrB,CACL,MAAM0f,EA7sJU,EAAC3f,EAAWyf,KAClC,MAAMG,EAAiB,IAAM/9Z,QAAQ+vK,OAAO,oBAC5C,GAAI5xI,GAAWy/X,EAAU,SAAU,CACjC,MAAMxf,EAAWD,EAAU6f,SAASJ,GACpC,OAAIxtT,EAAcguS,GACTp+Y,QAAQC,QAAQm+Y,GAEhBb,GAAUqgB,GAAUzkX,MAAK4zJ,GACvB2wM,GAAc3wM,GAAM5zJ,MAAK0kW,GACvBD,GAAeC,GAAS,GAAOG,GAC7BltS,EAAS/iH,KAAKmwZ,GAAiBC,EAAWpxM,EAAMixM,MACtDlsS,WAAWisT,MAItB,CAAO,OAAI5/X,GAAWy/X,EAAU,SACvBvf,GAAkBF,EAAWyf,GAAU1sT,KAAK6sT,GAAgB3f,GAAYp+Y,QAAQC,QAAQm+Y,KAExFp+Y,QAAQ+vK,OAAO,4BACxB,EA0rJyBkuP,CAAgB9f,EAAWyf,GAAUzkX,MAAKilW,WACpDof,EAAeI,GACf,CACLzhZ,MAAOixJ,EACPgxO,eAED77C,OAAMjgX,WACAk7a,EAAeI,GACft7a,KAGT,OADAk7a,EAAeI,GAAYE,EACpBA,CACT,KAEF,OAAO99Z,QAAQi5C,IAAIf,EAAS,EAEZ,EAGdgmX,GAAe,KAEnB,IAAIC,EAAkB,CAAC,EACvB,MAAMC,EAAe,CAACzjZ,EAAQ0jZ,KACrB,CACL1jZ,SACA0jZ,cAGEC,EAAa5e,GACVA,KAAWye,EAwBpB,MAAO,CACLG,aACAC,aAxBmB7e,IACnB,MAAMz7Y,EAASk6Z,EAAgBze,GAC/B,OAAOz7Y,EAASA,EAAOo6Z,UAAY,IAAI,EAuBvCG,UArBgB9e,KACT4e,EAAW5e,IAhBJ,IAgBeye,EAAgBze,GAAS/kY,OAqBtDgjZ,WAnBiBje,KACV4e,EAAW5e,IAnBU,IAmBCye,EAAgBze,GAAS/kY,OAmBtD8jZ,YAjBkB/e,IAClBye,EAAgBze,GAAW0e,EAtBb,EAsBmC,KAAK,EAiBtDM,aAfmB,CAAChf,EAAS2e,KAC7BF,EAAgBze,GAAW0e,EAzBC,EAyBsBC,EAAU,EAe5DM,aAbmBjf,WACZye,EAAgBze,EAAQ,EAa/BhuY,QAXc,KACdysZ,EAAkB,CAAC,CAAC,EAWrB,EAGH,IAAIjnY,GAAQ,EACZ,MAOM0nY,GAAOp7Z,GACJA,EAAS0zB,KARL,MACX,MAAM2nY,EAAM,IACHnua,KAAK2Y,MAAiB,WAAXk/V,MAAuB5hX,SAAS,IAGpD,MAAO,KADK,IAAI8e,MAAOmC,UACNjhB,SAAS,IAAMk4a,IAAQA,IAAQA,GAAK,EAG3BC,GAyFtBC,GAAW,CAACxB,EAAcniQ,KAC9B,MAAM4jQ,EAAkB,CAAC,EAOnBC,EAAiB,CAAC7gB,EAAU5nW,IAAa,IAAIx2C,SAAQ,CAACqa,EAAS0vI,KACnE,MAAMzvI,EAAM,IAAIC,eAChBD,EAAIE,KAAK,OAAQ4gJ,EAAShhJ,KAC1BE,EAAI4kZ,gBAAkB9jQ,EAAS+jQ,YAC/B7kZ,EAAI8kZ,OAAOC,WAAa72a,IACtBguD,EAAShuD,EAAE4rB,OAAS5rB,EAAE6/D,MAAQ,IAAI,EAEpC/tC,EAAI3Z,QAAU,KACZopJ,EAAQ,2DAA6DzvI,EAAIK,OAAO,EAElFL,EAAII,OAAS,KACX,GAAIJ,EAAIK,OAAS,KAAOL,EAAIK,QAAU,IAEpC,YADAovI,EAAQ,eAAiBzvI,EAAIK,QAG/B,MAAM2kZ,EAAOz2a,KAAKC,MAAMwxB,EAAIM,cArBf,IAAC2kZ,EAAOC,EAsBhBF,GAAStvT,EAASsvT,EAAK7yT,UAI5BpyF,GA1BcklZ,EA0BGnkQ,EAASqkQ,SA1BLD,EA0BeF,EAAK7yT,SAzBvC8yT,EACKA,EAAMn7a,QAAQ,MAAO,IAAM,IAAMo7a,EAAMp7a,QAAQ,MAAO,IAExDo7a,IAmBHz1Q,EAAQ,iBAAmBzvI,EAAIM,aAGkB,EAErD,MAAMk8T,EAAW,IAAI4oF,SACrB5oF,EAAS39N,OAAO,OAAQilS,EAASrxM,OAAQqxM,EAASriY,YAClDzB,EAAIQ,KAAKg8T,EAAS,IAEd6oF,EAAgB/6Z,EAAWw2J,EAASlsG,SAAWksG,EAASlsG,QAAU+vW,EAIlEW,EAAiB,CAACxhB,EAAUhkY,KAAQ,CACxCA,MACAgkY,WACAzjY,QAAQ,IAEJklZ,EAAiB,CAACzhB,EAAU97Z,KAAU,CAC1C83B,IAAK,GACLgkY,WACAzjY,QAAQ,EACRr4B,UAEIw9a,EAAiB,CAACpgB,EAASz7Y,KAC/B0rG,GAAMl/E,KAAKuuY,EAAgBtf,IAAUz/Y,IACnCA,EAAQgE,EAAO,WAEV+6Z,EAAgBtf,EAAQ,EAmD3BqgB,EAAc,CAACC,EAAWC,KAC9BD,EAAYrwT,GAAM+6D,KAAKs1P,GAAW5hB,IAAamf,EAAaI,WAAWvf,EAASsB,aACzE1/Y,QAAQi5C,IAAI02D,GAAM3tH,IAAIg+a,GAAW5hB,GAAYmf,EAAaiB,UAAUpgB,EAASsB,WATxDtB,KAC5B,MAAMsB,EAAUtB,EAASsB,UACzB,OAAO,IAAI1/Y,SAAQC,IACjB++Z,EAAgBtf,GAAWsf,EAAgBtf,IAAY,GACvDsf,EAAgBtf,GAASt8Z,KAAK6c,EAAQ,GACtC,EAI+Figa,CAAsB9hB,GAnDlG,EAACA,EAAUlvV,EAAS+wW,KACzC1C,EAAakB,YAAYrgB,EAASsB,WAC3B,IAAI1/Y,SAAQC,IACjB,IAAIooP,EACA7xM,EACJ,IACE,MAAMglX,EAAoB,KACpBnzK,IACFA,EAAap3E,QACbz6H,EAAW3mB,EACb,EAEIxV,EAAUD,IACdohZ,IACA+B,EAAamB,aAAatgB,EAASsB,UAAWtlY,GAC9C0lZ,EAAe1hB,EAASsB,UAAWkgB,EAAexhB,EAAUhkY,IAC5Dna,EAAQ2/Z,EAAexhB,EAAUhkY,GAAK,EAElC2vI,EAAUznK,IACdk5a,IACA+B,EAAaoB,aAAavgB,EAASsB,WACnCogB,EAAe1hB,EAASsB,UAAWmgB,EAAezhB,EAAU97Z,IAC5D2d,EAAQ4/Z,EAAezhB,EAAU97Z,GAAO,EAE1Ck0D,EAAWkW,IACLA,EAAU,GAAKA,EAAU,KAG7BokD,EAASlwH,KAAKynQ,GAAcr2I,SAAQ,IAAMlB,EAASlwH,KAAKq/a,GAAkBj+a,IAAIimM,KAAUx3J,MAAKjxB,IAC3F6oP,EAAe7oP,EACfA,EAAEipP,YAAYllQ,MAAMmpE,EAAQ,GAC5B,EAEJwC,EAAQkvV,EAAU5nW,GAAU2C,KAAK9+B,GAASgB,IACxC0uI,EAAQ/5C,EAAS30F,GAAO,CAAE94B,QAAS84B,GAAQA,EAAI,GAEnD,CAAE,MAAOgyH,GACPptI,EAAQ4/Z,EAAezhB,EAAU/wQ,GACnC,MAaiI8yR,CAAe/hB,EAAUuhB,EAAeM,OAG7K,MAAO,CAAEb,OADM,CAACY,EAAWC,IAAsB7kQ,EAAShhJ,KAAwBulZ,IAZlCV,EAYgEc,EAAYC,EAAWC,GAzEhH,IAAIjga,SAAQC,IACjCA,EAAQ,GAAG,IAyEI,EAGbgga,GAAmB7qS,GAAU,IAAMA,EAAOonS,oBAAoBhiZ,KAAK,CACvE7O,KAAMypH,EAAOtyF,UAAU,sBACvBp3C,KAAM,OACNy/E,SAAU,EACVs9K,aAAa,IAET23K,GAAiB,CAAChrS,EAAQmoS,IAAiBwB,GAASxB,EAAc,CACtEnjZ,IAAKg6V,GAAkBh/O,GACvBqqS,SAAUprD,GAAuBj/O,GACjC+pS,YAAa7qD,GAA2Bl/O,GACxClmE,QAASqlT,GAAuBn/O,KAS5BirS,GAAoBjrS,GAAUxxI,IADV,EAACwxI,EAAQxxI,IAAYwxI,EAAOrgB,IAAI4uC,QAAQ//J,EAAQmxH,MAAQ3E,EAAcglB,EAAO5vI,OAAO0wL,uBAAuB3uL,GAAK3D,KAEpI08a,CAAkBlrS,EAAQxxI,IAC5Bi1H,GAASj1H,EAASuyH,GAAaC,SAAS,6BAC1C,EAEImqT,GAAenrS,IACnB,MAAM+oR,EA/NU,MAChB,IAAI/8W,EAAQ,GACZ,MA+BMo/X,EAAa3uY,IACjB,IAAKA,EAAEk7K,OAASl7K,EAAEmsX,OAChB,MAAM,IAAIp1Z,MAAM,wFAElB,MAAMsrB,EAAK2d,EAAE3d,IAAM0qZ,GAAK,UAClBr3a,EAAOsqC,EAAEtqC,MAAQ2sB,EACjB64L,EAAOl7K,EAAEk7K,KACf,MAAO,CACL74L,GAAI9R,EAAS8R,GACb3sB,KAAM6a,EAAS7a,GACfw0B,SAAU3Z,EAASyvB,EAAE9V,UAAYx0B,EAAO,KAzC1Bu3Z,EAyC0C/xM,EAAKrhN,KAxCjD,CACZ,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,OACd,aAAc,OACd,gBAAiB,MACjB,aAAc,OACd,YAAa,MACb,aAAc,QAEHozZ,EAAKj6Z,gBAAkB,QA6BlCkoN,KAAM3qM,EAAS2qM,GACfixM,OAAQ57Y,EAASyvB,EAAEmsX,QACnB0B,QAASt9Y,EAASyvB,EAAE6tX,SAAWrzS,IAAIK,gBAAgBqgG,IACnDgwM,IAAK36Y,EAASyvB,EAAEkrX,MA7CF+B,KA8Cf,EAOG2hB,EAAY1mU,GAAa0xF,GAAOrqJ,EAAO24D,GAAWoY,iBAClDrvH,EAAMoxB,GAAMusZ,GAAUC,GAAkBA,EAAexsZ,OAASA,IAkBtE,MAAO,CACLta,OA1Da,CAACi4B,EAAGk7K,EAAMixM,EAAQz2Z,EAAMw0B,KACrC,GAAIi0F,EAASn+E,GAEX,OAAO2uY,EAAW,CAChBtsZ,GAFS2d,EAGTtqC,OACAw0B,WACAgxL,KAAMA,EACNixM,OAAQA,IAEL,GAAIhuX,EAAS6B,GAClB,OAAO2uY,EAAW3uY,GAElB,MAAM,IAAIjpC,MAAM,qBAClB,EA6CAhJ,IA1BUw+Z,IACLt7Z,EAAIs7Z,EAASlqY,OAChBktB,EAAMh+C,KAAKg7Z,EACb,EAwBAt7Z,MACAk7a,SArBete,GAAW+gB,GAAUriB,GAAYA,EAASsB,YAAcA,IAsBvEpB,UArBgB,CAACN,EAAQtyZ,IAAS+0a,GAAUriB,GAAYA,EAASJ,WAAaA,GAAUI,EAASrxM,OAAOrhN,OAASA,IAsBjH+0a,YACAE,YAtBkBjhB,IAClBt+W,EAAQqhT,EAASrhT,GAAOg9W,GAClBA,EAASsB,YAAcA,IACzBrzS,IAAIM,gBAAgByxS,EAASsB,YACtB,IAGT,EAgBFhuY,QAdc,KACd6wU,EAAOnhT,GAAOs/X,IACZr0T,IAAIM,gBAAgB+zT,EAAehhB,UAAU,IAE/Ct+W,EAAQ,EAAE,EAWX,EA4IiBw/X,GAClB,IAAIC,EAAUC,EACd,MAAMvD,EAAeW,KACf6C,EAAa,GACbC,EAAa91a,GACV+Y,GACDmxH,EAAOI,UACFtqI,EAAS+Y,GAEX,GAILg9Z,EAAgB,CAACv6a,EAASq5H,EAAQ37H,KACtC,IAAInD,EAAQ,EACZ,GACEA,EAAQyF,EAAQs3B,QAAQ+hG,EAAQ9+H,IACjB,IAAXA,IACFyF,EAAUA,EAAQwqB,UAAU,EAAGjwB,GAASmD,EAAUsC,EAAQ48G,OAAOriH,EAAQ8+H,EAAOtvH,QAChFxP,GAASmD,EAAQqM,OAASsvH,EAAOtvH,OAAS,UAE1B,IAAXxP,GACT,OAAOyF,CAAO,EAEVw6a,EAAkB,CAACx6a,EAASy6a,EAAWC,KAC3C,MAAMC,EAAoB,QAASD,KAAoBA,IAAmBn9E,GAAIC,eAAiB,4BAA8B,KAG7H,OAFAx9V,EAAUu6a,EAAcv6a,EAAS,QAASy6a,KAAeE,GACzD36a,EAAUu6a,EAAcv6a,EAAS,iBAAmBy6a,EAAY,IAAK,iBAAmBC,EAAiB,IAC3F,EAEVE,EAAwB,CAACH,EAAWC,KACxC7+E,EAAOntN,EAAOoqB,YAAYvsJ,MAAM8zP,IACX,eAAfA,EAAMr7P,KACRq7P,EAAMinJ,UAAY1rD,EAAMv7F,EAAMinJ,WAAWj3N,GAAYmqP,EAAgBnqP,EAAUoqP,EAAWC,KAE1Fr6K,EAAMrgQ,QAAUw6a,EAAgBn6K,EAAMrgQ,QAASy6a,EAAWC,EAC5D,GACA,EAUEG,EAAe,KACdV,IACHA,EAAWT,GAAehrS,EAAQmoS,IAE7BiE,IAAgBroX,KAAK6nX,GAAWS,IACrC,MAAMzB,EAAY19E,EAAMm/E,GAAY5D,GAAaA,EAAUzf,WAC3D,OAAOyiB,EAASzB,OAAOY,EAAWC,GAAiB7qS,IAASj8E,KAAK6nX,GAAW/8Z,IAC1E,MAAMy9Z,EAAiB,GACvB,IAAIC,GAAuB,EAC3B,MAAMC,EAAiBt/E,EAAMr+U,GAAQ,CAAC49Z,EAAY5gb,KAChD,MAAM,SAACm9Z,EAAQ,MAAEjiY,GAASslZ,EAAWxgb,GACrC,IAAIiiE,GAAU,EAiBd,OAhBI2+W,EAAWlnZ,QAAUs5V,GAAsB7+O,IACzCysS,EAAWznZ,MAAQu9F,GAAWx7F,EAAMC,IAAKylZ,EAAWznZ,OACtDunZ,GAAuB,GAEzBxjB,EAAUwiB,YAAYxkZ,EAAMC,KACxBu0Y,GAAMv7R,IAzBU,EAACj5G,EAAOkiZ,KACpC,MAAMjiZ,EAAMg5G,EAAOy6C,WAAWwuP,EAAW,OA5BlBjkZ,MA6BvBknZ,EAAsBnlZ,EAAMC,IAAKiiZ,GACjC1oT,GAASQ,GAAaS,QAAQz6F,GAAQ,CACpC,IAAO63V,GAAoB5+O,IA/BNh7G,EA+BiCikZ,EA/B1BjkZ,IAA6B,IAAtBA,EAAI4D,QAAQ,KAAc,IAAM,MAAO,IAAIvY,MAAOmC,WA+BlBy2Z,EACnE,eAAgBjiZ,GAChB,EAoBQ0lZ,CAAsB3lZ,EAAO0lZ,EAAWznZ,MAEjCynZ,EAAWv/a,QAChBu/a,EAAWv/a,MAAMw0D,SACnBwqX,EAAsBnlZ,EAAMC,IAAK6nU,GAAIC,gBACrCw9E,EAAet+a,KAAK+4B,GACpB+mC,GAAU,GAneJ,EAACkyE,EAAQ7yI,KAC3Bk6a,GAAarnS,EAAQyvO,GAAK/hU,UAAU,CAClC,8BACAvgD,IACC,EAieOw/a,CAAY3sS,EAAQysS,EAAWv/a,MAAMC,UAEhC,CACLqB,QAASu4B,EACTxB,OAAQknZ,EAAWlnZ,OACnBqnZ,UAAWH,EAAWznZ,IACtBgkY,WACAl7V,UACD,IAcH,OAZIw+W,EAAejxa,OAAS,IAAMkga,GAAMv7R,GACtCA,EAAOoqB,YAAY+rB,UAAS,KAC1Bg3K,EAAOrsO,GAAUwrT,IAAiBO,IAChC,MAAMC,EAAY53X,GAAO23X,GACzBjlO,GAASilO,GACTC,EAAUzxY,KAAK4vY,GAAkBjrS,IACjC+oR,EAAUwiB,YAAYsB,EAAaltT,IAAI34F,IAAI,GAC3C,IAEKulZ,GACTvsS,EAAOoqB,YAAY2iR,iBAEdP,CAAc,IACpB,MAGDQ,EAAmB,IAAMruD,GAA0B3+O,GAAUmsS,IAAiBvha,QAAQC,QAAQ,IAC9Foia,EAAsBC,GAAU5wT,GAAOqvT,GAAY95a,GAAUA,EAAOq7a,KAIpEd,EAAgB,KACfV,IACHA,EAAexD,GAAaC,EAAcpf,IAErC2iB,EAAapla,QAAQ05H,EAAO5tC,UAAW66U,GAAqBlpX,KAAK6nX,GAAW/8Z,IACjF,MAAM29Z,EAAiBn/E,EAASx+U,GAAQs+Z,GAClCvyT,EAASuyT,IACX9F,GAAarnS,EAAQmtS,IACd,GACyB,SAAvBA,EAAW/kB,UAaxB,OAPImT,GAAMv7R,IACRmtN,EAAOq/E,GAAgBW,IACrBjB,EAAsBiB,EAAWpmZ,MAAMC,IAAKmmZ,EAAWnkB,SAASsB,WAChE6iB,EAAWpmZ,MAAMC,IAAMmmZ,EAAWnkB,SAASsB,UAC3C6iB,EAAWpmZ,MAAMrhB,gBAAgB,eAAe,IAG7C8ma,CAAc,MAQnBY,EAAkB97a,GACfA,EAAQtC,QAAQ,uBAAuB,CAACgC,EAAOs5Z,KACpD,MAAM2e,EAAYd,EAAagB,aAAa7e,GAC5C,GAAI2e,EACF,MAAO,QAAUA,EAAY,IAE/B,IAAIjgB,EAAWD,EAAU6f,SAASte,GAMlC,GALKtB,IACHA,EAAW9qS,EAAM8hB,EAAO08K,cAAchvT,OAAO,CAACmhB,EAAQmxH,IAC7CnxH,GAAUmxH,EAAOokS,cAAgBpkS,EAAOokS,aAAarb,UAAU6f,SAASte,SAC9E16Z,IAEDo5Z,EAAU,CAEZ,MAAO,aADMA,EAASrxM,OACKrhN,KAAO,WAAa0yZ,EAASJ,SAAW,GACrE,CACA,OAAO53Z,CAAK,IAiChB,OA9BAgvI,EAAO8K,GAAG,cAAc,KAClB6zO,GAA0B3+O,GAC5BgtS,IAEAZ,GACF,IAEFpsS,EAAO8K,GAAG,kBAAkB13I,IAC1BA,EAAE9B,QAAU87a,EAAgBh6a,EAAE9B,QAAQ,IAExC0uI,EAAO8K,GAAG,cAAc13I,IAClBA,EAAEi6a,aAA4B,QAAbj6a,EAAEwyC,QAAiC,SAAbxyC,EAAEwyC,SAG7CxyC,EAAE9B,QAAU87a,EAAgBh6a,EAAE9B,SAAQ,IAExC0uI,EAAO8K,GAAG,cAAc,KACtB9K,EAAOzjC,OAAO81F,cAAc,OAAOg2O,IACjCl7E,EAAOk7E,GAAQrwP,IACb,MAAMhxJ,EAAMgxJ,EAAIn3D,KAAK,OACrB,IAAK75F,GAAO+hY,EAAU6f,SAAS5hZ,GAC7B,OAEF,MAAMiiZ,EAAYd,EAAagB,aAAaniZ,GACxCiiZ,GACFjxP,EAAIn3D,KAAK,MAAOooT,EAClB,GACA,GACF,IAEG,CACLlgB,YACAnC,UApFgB/0Z,IAChB85a,EAAW39a,KAAK6D,EAAO,EAoFvBs6a,eACAa,mBACAZ,gBACA9vZ,QA5Dc,KACdysY,EAAUzsY,UACV6rZ,EAAa7rZ,UACbovZ,EAAeD,EAAW,IAAI,EA0D/B,EAoWG6B,GAAc,CAClB3sB,gBAAgB,EAChBxG,SAAS,GAELozB,GAAW,CACfz1a,SAAU,WACPw1a,IAECE,GAAc,CAClBC,yBAA0B,CACxBr0X,OAAQ,CAAE//B,gBAAiB,aACxBk0Z,IAELG,uBAAwB,CACtBt0X,OAAQ,CAAE,iBAAkB,aACzBm0X,IAELI,qBAAsB,CACpBv0X,OAAQ,CAAE7/B,YAAa,aACpBg0Z,IAELK,eAAgB,CACdhma,QAAS,CAAC,aACP2la,IAELM,WAAY,CACV/1a,SAAU,QACV8P,QAAS,CAAC,aACP0la,IAELQ,qBAAsB,CACpB10X,OAAQ,CAAE20X,YAAa,aACpBR,IAELS,qBAAsB,CACpB50X,OAAQ,CAAE5/B,YAAa,aACpB+zZ,KAGD7/a,GAAMsf,EAASwga,IAEfS,GAAiBjuS,IACrB,MAAM7mE,EAAU,CAAC,EAGXpuD,EAAW,CAAC5Y,EAAMyzC,KAClBzzC,IACGyoH,EAASzoH,IAKP66V,EAAUpnT,KACbA,EAAS,CAACA,IAEZunT,EAAOvnT,GAAQA,IACTm1E,EAAYn1E,EAAO4+E,QACrB5+E,EAAO4+E,MAAQkpL,GAAiB9nQ,IAE9Bm1E,EAAYn1E,EAAO10C,SACrB00C,EAAO10C,OAASw8S,GAAiB9nQ,IAAW4nQ,GAAe5nQ,IAEzDm1E,EAAYn1E,EAAO8b,SAAWgsP,GAAiB9nQ,KAAY4nQ,GAAe5nQ,KAC5EA,EAAO8b,OAAS,QAEdgsP,GAAiB9nQ,IAAW4nQ,GAAe5nQ,KAC7CA,EAAOg8W,OAAQ,EACfh8W,EAAO8rV,cAAe,GAEpB92Q,EAASh1E,EAAOh+B,WAClBg+B,EAAOh+B,QAAUg+B,EAAOh+B,QAAQ1W,MAAM,OACxC,IAEFioE,EAAQhnE,GAAQyzC,GAzBhB8nT,GAAOv7V,GAAM,CAACyzC,EAAQzzC,KACpB4Y,EAAS5Y,EAAMyzC,EAAO,IA0B5B,EAWF,OAHA76B,EApbYi1H,KACZ,MAAMrgB,EAAMqgB,EAAOrgB,IACb+/O,EAAa1/N,EAAO5vI,OAAOkG,KAC3B6iE,EAAU,CACd+0W,UAAW,CAAC,CACRp2a,SAAU,QACVshD,OAAQ,CAAE37B,cAAe,SAE7B0wZ,aAAc,CAAC,CACXr2a,SAAU,QACVshD,OAAQ,CAAE37B,cAAe,YAE7B2wZ,aAAc,CAAC,CACXt2a,SAAU,QACVshD,OAAQ,CAAE37B,cAAe,YAE7B4wZ,UAAW,CACT,CACEv2a,SAAU,eACVu6J,WAAW,EACXzqJ,QAAS,aACTi5Y,iBAAiB,EACjB34H,QAAS,yBAEX,CACEpwR,SAAU,uDACVshD,OAAQ,CAAE/I,UAAW,QACrB8pW,SAAS,EACTjyH,SAAS,GAEX,CACEpwR,SAAU,kBACVu6J,WAAW,EACXj5G,OAAQ,CAAEk1X,MAAO,QACjBpmJ,QAAS,yBAEX,CACEpwR,SAAU,QACVu6J,WAAW,EACXj5G,OAAQ,CACNm1X,WAAY,MACZC,YAAa,QAEfxrB,SAAU5iX,IACRu/E,EAAIliC,SAASr9C,EAAO,QAAS,KAAK,EAEpC8nP,QAAS,yBAEX,CACEpwR,SAAU,6CACV+oZ,iBAAiB,EACjBznW,OAAQ,CAAEk1X,MAAO,UAGrBG,YAAa,CACX,CACE32a,SAAU,uDACVshD,OAAQ,CAAE/I,UAAW,UACrB8pW,SAAS,EACTjyH,QAAS,yBAEX,CACEpwR,SAAU,eACVu6J,WAAW,EACXzqJ,QAAS,eACTi5Y,iBAAiB,EACjB34H,QAAS,yBAEX,CACEpwR,SAAU,kBACVu6J,WAAW,EACXj5G,OAAQ,CACNhjC,QAAS,QACTm4Z,WAAY,OACZC,YAAa,QAEftmJ,SAAS,GAEX,CACEpwR,SAAU,QACVu6J,WAAW,EACXj5G,OAAQ,CACNm1X,WAAY,OACZC,YAAa,QAEftmJ,QAAS,yBAEX,CACEpwR,SAAU,sBACV+oZ,iBAAiB,EACjBznW,OAAQ,CACNhjC,QAAS,QACTm4Z,WAAY,OACZC,YAAa,QAEftmJ,SAAS,GAEX,CACEpwR,SAAU,yBACV+oZ,iBAAiB,EACjBznW,OAAQ,CACNm1X,WAAY,OACZC,YAAa,QAEftmJ,SAAS,IAGbwmJ,WAAY,CACV,CACE52a,SAAU,eACVu6J,WAAW,EACXzqJ,QAAS,cACTi5Y,iBAAiB,EACjB34H,QAAS,yBAEX,CACEpwR,SAAU,uDACVshD,OAAQ,CAAE/I,UAAW,SACrB8pW,SAAS,EACTjyH,QAAS,yBAEX,CACEpwR,SAAU,kBACVu6J,WAAW,EACXj5G,OAAQ,CAAEk1X,MAAO,SACjBpmJ,QAAS,yBAEX,CACEpwR,SAAU,QACVu6J,WAAW,EACXj5G,OAAQ,CACNo1X,YAAa,MACbD,WAAY,QAEdvrB,SAAU5iX,IACRu/E,EAAIliC,SAASr9C,EAAO,QAAS,KAAK,EAEpC8nP,QAAS,yBAEX,CACEpwR,SAAU,6CACV+oZ,iBAAiB,EACjBznW,OAAQ,CAAEk1X,MAAO,SACjBpmJ,SAAS,IAGbymJ,aAAc,CAAC,CACX72a,SAAU,uDACVshD,OAAQ,CAAE/I,UAAW,WACrB8pW,SAAS,EACTjyH,QAAS,0BAEb0mJ,KAAM,CACJ,CACEjiQ,OAAQ,SACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,UAGJ,CACEr0O,OAAQ,OACRvzH,OAAQ,CAAEy1X,WAAY,SAExB,CACEliQ,OAAQ,IACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,WAINhhY,OAAQ,CACN,CACE2sJ,OAAQ,KACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,UAGJ,CACEr0O,OAAQ,OACRvzH,OAAQ,CAAE01X,UAAW,WAEvB,CACEniQ,OAAQ,IACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,WAIN3xW,UAAW,CACT,CACEs9H,OAAQ,OACRvzH,OAAQ,CAAE6oW,eAAgB,aAC1B9vP,OAAO,GAET,CACEwa,OAAQ,IACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,WAIN5xW,cAAe,MACb,MAAMuwD,EAAO,CACXgtE,OAAQ,OACRvzH,OAAQ,CAAE6oW,eAAgB,gBAC1B9vP,OAAO,GAEH48Q,EAAS,CACbpiQ,OAAQ,SACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,UAGE1wY,EAAI,CACRq8J,OAAQ,IACRjrH,OAAQ,MACRs/V,oBAAqB,CACnB,QACA,UAGJ,MAAsB,UAAfthD,EAAyB,CAC9BpvV,EACAqvF,EACAovU,GACE,CACFpvU,EACArvF,EACAy+Z,EAEH,EA/Bc,GAgCfC,UAAW,CACTriQ,OAAQ,OACRvzH,OAAQ,CAAE7jC,MAAO,UACjB+lK,OAAO,EACPqlO,gBAAgB,EAChB8B,oBAAoB,GAEtBwsB,YAAa,CACXtiQ,OAAQ,OACRvzH,OAAQ,CAAE//B,gBAAiB,UAC3BiiK,OAAO,EACPqlO,gBAAgB,EAChB8B,oBAAoB,GAEtBysB,SAAU,CACRviQ,OAAQ,OACR3d,QAAQ,EACR51G,OAAQ,CAAE0yQ,WAAY,UACtB22F,oBAAoB,GAEtB7wF,SAAU,CACRjlJ,OAAQ,OACR3d,QAAQ,EACR51G,OAAQ,CAAEr8B,SAAU,UACpB0lY,oBAAoB,GAEtB0sB,WAAY,CACVr3a,SAAU,mCACVshD,OAAQ,CAAEn4B,WAAY,WAExBmuZ,eAAgB,CACdziQ,OAAQ,OACRv6K,WAAY,CAAEukL,MAAO,WAEvB04P,WAAY,CACVzjP,MAAO,aACP/nE,SAAS,EACTniE,OAAQ,OAEV4tX,UAAW,CAAE3iQ,OAAQ,OACrB4iQ,YAAa,CAAE5iQ,OAAQ,OACvBnwJ,KAAM,CAAEmwJ,OAAQ,QAChB/lJ,KAAM,CACJ+lJ,OAAQ,IACR70K,SAAU,IACV4pD,OAAQ,MACRxwD,OAAO,EACPszH,MAAM,EACNm2R,QAAS,CAAC3jZ,EAAMw4a,EAAMC,IACb/8E,GAAY17V,IAASA,EAAKe,aAAa,QAEhDirZ,SAAU,CAACn6R,EAAK2mT,EAAMpgD,KACpB70Q,GAAMl/E,KAAK+zV,GAAM,CAACjhY,EAAOJ,KACvB4xH,EAAIyxE,UAAUvoE,EAAK96H,EAAKI,EAAM,GAC9B,GAGNgyU,KAAM,CACJxzJ,OAAQ,OACR81O,oBAAoB,EACpB9B,gBAAgB,EAChBvuZ,WAAY,CACV,KAAQ,SACR,gBAAiBg9X,IACf,IAAIzwX,EACJ,OAA+E,QAAvEA,EAAc,OAATywX,QAA0B,IAATA,OAAkB,EAASA,EAAKlvD,mBAAgC,IAAPvhU,EAAgBA,EAAK,IAAI,IAItH+wa,aAAc,CACZ,CACE53a,SAAU,wFACV4pD,OAAQ,MACRxwD,OAAO,EACPwjP,QAAQ,EACRg9I,cAAc,EACdltQ,MAAM,GAER,CACE1sH,SAAU,OACV1F,WAAY,CACV,QACA,SAEFsvD,OAAQ,QACRxwD,OAAO,EACPwjP,QAAQ,EACRlwH,MAAM,GAER,CACE1sH,SAAU,IACV1F,WAAY,CACV,QACA,SAEFlB,OAAO,EACPwjP,QAAQ,EACRlwH,MAAM,KAUZ,OANAjK,GAAMl/E,KAAK,iDAAiDnqC,MAAM,OAAOiB,IACvEgnE,EAAQhnE,GAAQ,CACdy5L,MAAOz5L,EACPuvD,OAAQ,MACT,IAEIyX,CAAO,EAsFL0mH,CAAM7/C,IACfj1H,EAASrd,MACTqd,EAAS01W,GAAWzgP,IACb,CACLtyI,IA5CYyE,GAAQ6oH,EAAc7oH,GAAQgnE,EAAQhnE,GAAQgnE,EA6C1DljE,IA5CU9D,GAAQuhM,GAAMv6H,EAAShnE,GA6CjC4Y,WACA6jE,WAbiBz8E,IACbA,GAAQgnE,EAAQhnE,WACXgnE,EAAQhnE,GAEVgnE,GAUR,EAGGw2W,GAASp1T,GAAMl/E,KACfskF,GAAM8qP,GAASvoL,IACf0tP,GAAgB1yY,GAAQ89E,EAAc99E,IAAStC,EAASsC,GACxD2yY,GAAuB,CAACC,EAAU9vS,KACtC,MAAM5vI,EAAS4vI,GAAUA,EAAO5vI,QAAUivW,GAAO,CAAC,GAO5Cx4U,EAAgBkpZ,IACpB,MAAM7yY,EAAO09E,EAASm1T,GAAS,CAC7B59a,KAAM49a,EACNnoa,QAAS,GACT44G,MAAO,CAAC,GACNuvT,EACElnT,EAAMlJ,GAAIn7G,OAAO04B,EAAK/qC,MAE5B,MAde,EAAC02H,EAAK3rF,KACjBA,EAAKt1B,QAAQvM,OAAS,GACxBskH,GAAIytD,SAASvkD,EAAK3rF,EAAKt1B,QAAQ3Z,KAAK,MAEtC0xH,GAAI62D,WAAW3tD,EAAK3rF,EAAKsjF,MAAM,EAS/BkyQ,CAAS7pQ,EAAK3rF,GACP2rF,CAAG,EAWNmnT,EAAa,CAACnnT,EAAK7pH,EAAW6sL,KAClC,IAAIokP,EACJ,MAAM1pT,EAAWvnH,EAAU,GACrBkxa,EAAeN,GAAcrpT,GAAYA,EAASp0H,UAAOvC,EACzDugb,EAbkB,EAACtnT,EAAK6B,KAC9B,MAAM0lT,EAAUhgb,EAAOkzW,eAAez6O,EAAIjJ,SAASnwH,eAC7Ck1W,EAA8B,OAAZyrE,QAAgC,IAAZA,OAAqB,EAASA,EAAQzrE,gBAClF,SAAIA,IAAmBA,EAAgBtpW,UAC9BqvH,GAAarN,EAAWsnP,EAAiBj6O,GAAaA,EAAYi6O,EAAgB,GAG3F,EAMuB0rE,CAAkBxnT,EAAKqnT,GAC9C,GAAIC,EACED,IAAiBC,GACnBF,EAAkB1pT,EAClBvnH,EAAYA,EAAUzP,MAAM,IAE5B0gb,EAAkBE,OAEf,GAAI5pT,EACT0pT,EAAkB1pT,EAClBvnH,EAAYA,EAAUzP,MAAM,QACvB,IAAKs8L,EACV,OAAOhjE,EAET,MAAM3zE,EAAS+6X,EAAkBppZ,EAAcopZ,GAAmBtwT,GAAIn7G,OAAO,OAC7E0wC,EAAO/tB,YAAY0hG,GACfgjE,GACFtxE,GAAMl/E,KAAKwwJ,GAAUz4B,IACnB,MAAMk9Q,EAAazpZ,EAAcusI,GACjCl+G,EAAOquE,aAAa+sT,EAAYznT,EAAI,IAGxC,MAAM0nT,EAAiBX,GAAcK,GAAmBA,EAAgBpkP,cAAWj8L,EACnF,OAAOogb,EAAW96X,EAAQl2C,EAAWuxa,EAAe,EAEhD5uP,EAAWhiE,GAAIn7G,OAAO,OAC5B,GAAIsra,EAASz0a,OAAS,EAAG,CACvB,MAAM6hC,EAAO4yY,EAAS,GAChBjnT,EAAMhiG,EAAcqW,GACpB2uJ,EAAW+jP,GAAc1yY,GAAQA,EAAK2uJ,cAAWj8L,EACvD+xL,EAASx6J,YAAY6oZ,EAAWnnT,EAAKinT,EAASvgb,MAAM,GAAIs8L,GAC1D,CACA,OAAOlK,CAAQ,EAEX6uP,GAAoBtzY,IAExB,IAAI7sC,EAAU,MACd,MAAM4f,EAAM,CACV9d,KAAM9B,EACNuX,QAAS,GACT44G,MAAO,CAAC,EACR1oH,SANFolC,EAAOq9E,GAAMxpH,KAAKmsC,IAiClB,MAzBa,MAATA,IACF7sC,EAAU6sC,EAAKluC,QAAQ,6CAA6C,CAACyhb,EAAIrgE,EAAIC,EAAIqgE,EAAIC,KACnF,OAAQvgE,GACR,IAAK,IACHngW,EAAIuwG,MAAM1hG,GAAKuxV,EACf,MACF,IAAK,IACHpgW,EAAIrI,QAAQ5Z,KAAKqiX,GACjB,MACF,IAAK,KACkF,IAAjF91P,GAAMk6D,QAAQ,8CAA8CvjL,MAAM,KAAMm/W,KAC1EpgW,EAAIuwG,MAAM6vP,GAAMA,GAIpB,GAAW,MAAPqgE,EAAY,CACd,MAAM/jZ,EAAIgkZ,EAAG3/a,MAAM,8BACf27B,IACF1c,EAAIuwG,MAAM7zF,EAAE,IAAMA,EAAE,GAExB,CACA,MAAO,EAAE,KAGb1c,EAAI9d,KAAO9B,GAAW,MACf4f,CAAG,EAiBN8hS,GAAa,CAAC/xK,EAAQp6F,KAC1B,IAAIgrY,EAAa,GACbC,EAAgBnwD,GAAiB1gP,GACrC,GAAsB,KAAlB6wS,EACF,MAAO,GAET,MAAMC,EAAa92Y,GACV4gF,EAAS5gF,GAAOA,EAAIhrC,QAAQ,UAAW,IAAM,GAEhD+pD,EAAmB,CAAC5mD,EAAM02H,IACvBlJ,GAAI1jE,SAAiB,OAAR4sE,QAAwB,IAARA,EAAiBA,EAAMmX,EAAO5tC,UAAWjgG,GAAM,GAErF,GAAIyoH,EAASh1E,GAAS,CACpB,MAAMuzB,EAAU6mE,EAAO/hH,UAAUvwB,IAAIk4C,GACrC,IAAKuzB,EACH,MAAO,GAETvzB,EAASuzB,EAAQ,EACnB,CACA,GAAI,YAAavzB,EAAQ,CACvB,MAAMsiP,EAAUtiP,EAAOsiP,QACvB,IAAgB,IAAZA,EACF,MAAO,GAEP2oJ,EAAgB3oJ,GAAW2oJ,CAE/B,CACA,IACIE,EADA5+a,EAAOyzC,EAAOgmJ,OAAShmJ,EAAO+mI,QAAU,OAE5C,MAAMxrI,GA5CcrpC,EA4CQ8tC,EAAO9tC,SA3C9B8iH,EAAS9iH,IAIdA,GADAA,EAAWA,EAAS5G,MAAM,WAAW,IACjBlC,QAAQ,sBAAuB,MAC5CurH,GAAM3tH,IAAIkL,EAAS5G,MAAM,4BAA4BgsC,IAC1D,MAAM2uJ,EAAWtxE,GAAM3tH,IAAIswC,EAAKhsC,MAAM,gBAAiBs/a,IACjDvga,EAAM47K,EAAS5qI,MAIrB,OAHI4qI,EAASxwL,SACX4U,EAAI47K,SAAWA,GAEV57K,CAAG,IACTxQ,WAXM,IAFW3H,MA6ChBqpC,EAAM9lC,OAAS,GACZ8lC,EAAM,GAAGhvC,OACZgvC,EAAM,GAAGhvC,KAAOA,GAElBA,EAAOyzC,EAAO9tC,SACdi5a,EAAclB,GAAqB1uY,EAAO6+F,IAE1C+wS,EAAclB,GAAqB,CAAC19a,GAAO6tI,GAE7C,MAAMgxS,EAAarxT,GAAIrsH,OAAOnB,EAAM4+a,GAAa,IAAMA,EAAYntT,WACnE+rT,GAAO/pY,EAAOwT,QAAQ,CAACjrD,EAAOgE,KAC5B,MAAM2+N,EAAWggN,EAAW3ib,GACxB2iO,GACFnxG,GAAIliC,SAASuzV,EAAY7+a,EAAM2+N,EACjC,IAEF6+M,GAAO/pY,EAAOxzC,YAAY,CAACjE,EAAOgE,KAChC,MAAM2+N,EAAWggN,EAAW3ib,GACxB2iO,GACFnxG,GAAIyxE,UAAU4/O,EAAY7+a,EAAM2+N,EAClC,IAEF6+M,GAAO/pY,EAAOh+B,SAASzZ,IACrB,MAAM2iO,EAAWggN,EAAW3ib,GACvBwxH,GAAIytP,SAAS4jE,EAAYlgN,IAC5BnxG,GAAIytD,SAAS4jQ,EAAYlgN,EAC3B,IAEF9wF,EAAO7xH,SAAS,kBAChBwxG,GAAI0yD,UAAU0+P,EAAa,CACzB16Z,SAAU,WACV3qB,MAAO,QAETs0I,EAAO5tC,UAAUjrE,YAAY4pZ,GAC7B,MAAME,EAAoBl4X,EAAiB,YACrCm4X,EAAiB,MAAM9/a,KAAK6/a,GAAqBzga,SAASyga,EAAmB,IAAM,EA8BzF,OA7BAtB,GAAOkB,EAAc3/a,MAAM,MAAMiB,IAC/B,IAAIhE,EAAQ4qD,EAAiB5mD,EAAM6+a,GACnC,IAAa,qBAAT7+a,IAA+B,oCAAoCf,KAAKjD,KAC1EA,EAAQ4qD,EAAiB5mD,GACoB,YAAzC2yW,GAAgB32W,GAAOsB,kBAIhB,UAAT0C,GAC2C,YAAzC2yW,GAAgB32W,GAAOsB,eAD7B,CAKA,GAAa,cAAT0C,GACE,QAAQf,KAAKjD,GAAQ,CACvB,GAAuB,IAAnB+ib,EACF,OAGF/ib,EADiBgiB,WAAWhiB,IAAU,KAAKiD,KAAKjD,GAAS,IAAM,GAC5C+ib,EAAiB,IACtC,CAEW,WAAT/+a,GAAqBhE,IACvByib,GAAc,kBAEhBA,GAAcz+a,EAAO,IAAMhE,EAAQ,GAbnC,CAasC,IAExC6xI,EAAO7xH,SAAS,uBAChBwxG,GAAIj+D,OAAOqvX,GACJH,CAAU,EA+BbO,GAAYnxS,IAChB,MAAM7mE,EAAU80W,GAAejuS,GACzBoxS,EAAoBx3Q,GAAK,CAAC,GAMhC,MApCc55B,KACdA,EAAO0/C,YAAY,SAAU,GAAI,QACjC1/C,EAAO0/C,YAAY,SAAU,GAAI,UACjC1/C,EAAO0/C,YAAY,SAAU,GAAI,aACjC,IAAK,IAAI5uK,EAAI,EAAGA,GAAK,EAAGA,IACtBkvH,EAAO0/C,YAAY,UAAY5uK,EAAG,GAAI,CACpC,eACA,EACA,IAAMA,IAGVkvH,EAAO0/C,YAAY,WAAY,GAAI,CACjC,eACA,EACA,MAEF1/C,EAAO0/C,YAAY,WAAY,GAAI,CACjC,eACA,EACA,QAEF1/C,EAAO0/C,YAAY,WAAY,GAAI,CACjC,eACA,EACA,WACA,EAMF2xP,CAAQrxS,GACRi9Q,GAAQj9Q,GACHu7R,GAAMv7R,IA3rMG,EAACqmR,EAA2BrmR,KAC1CqmR,EAA0Bz4Z,IAAI,CAAC,GAC/BoyI,EAAO8K,GAAG,cAAc13I,IACtB0yZ,GAA6B9lR,EAAQ5sI,EAAE5E,QAAS63Z,EAA0B34Z,MAAM,IAElFsyI,EAAO8K,GAAG,4BAA4B13I,IACpC,MAAM5E,EAAUktH,EAASlwH,KAAK4H,EAAE4D,MAAMpK,KAAI0kb,GAAetjD,GAAOsjD,GAAeA,EAAcA,EAAY1/Q,iBAAgB19F,MAAKl9D,GAAQ07V,GAAY17V,GAAQ0kH,EAAS/iH,KAAK3B,GAAQ0kH,EAASlwH,KAAKwL,EAAK8L,iBAAgB45G,YAAW,IAAMipS,GAAgB3lR,KACpP8lR,GAA6B9lR,EAAQxxI,EAAS63Z,EAA0B34Z,MAAM,GAC9E,EAorMA6jb,CAAQH,EAAmBpxS,GAEtB,CACLtyI,IAAKyrE,EAAQzrE,IACbuI,IAAKkjE,EAAQljE,IACb8U,SAAUouD,EAAQpuD,SAClB6jE,WAAYzV,EAAQyV,WACpB9kD,MAAO,CAAC33B,EAAMi9X,EAAMp4X,KAx9EJ,EAACgpI,EAAQ7tI,EAAMi9X,EAAMp4X,KACvC4la,GAAwB58R,GAAQ/hH,UAAU6L,MAAM33B,EAAMi9X,EAAMp4X,EAAK,EAw9E7DgrU,CAAYhiM,EAAQ7tI,EAAMi9X,EAAMp4X,EAAK,EAEvC0qD,OAAQ,CAACvvD,EAAMi9X,EAAMp4X,EAAMqjZ,KAx9EV,EAACr6Q,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,KAC9CuiB,GAAwB58R,GAAQ/hH,UAAUyjC,OAAOvvD,EAAMi9X,EAAMp4X,EAAMqjZ,EAAQ,EAw9EvEp4E,CAAajiM,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,EAAQ,EAEjDrrP,OAAQ,CAAC78J,EAAMi9X,EAAMp4X,KAx9EJ,EAACgpI,EAAQ7tI,EAAMi9X,EAAMp4X,KACxC4la,GAAwB58R,GAAQ/hH,UAAU+wI,OAAO78J,EAAMi9X,EAAMp4X,EAAK,EAw9E9Dw6a,CAAaxxS,EAAQ7tI,EAAMi9X,EAAMp4X,EAAK,EAExChG,MAAO,CAACmB,EAAMi9X,EAAMp4X,EAAMqjZ,IAt+EV,EAACr6Q,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,IAAYuiB,GAAwB58R,GAAQ/hH,UAAUjtB,MAAMmB,EAAMi9X,EAAMp4X,EAAMqjZ,GAs+EnFo3B,CAAYzxS,EAAQ7tI,EAAMi9X,EAAMp4X,EAAMqjZ,GAC5ExyY,QAAS4vB,GAn+ES,EAACuoG,EAAQvoG,IAAUmlY,GAAwB58R,GAAQ/hH,UAAUpW,QAAQ4vB,GAm+ErEi6Y,CAAc1xS,EAAQvoG,GACxCkjY,SAAU,CAACljY,EAAO23V,IAv+EE,EAACpvP,EAAQvoG,EAAO23V,IAASwtC,GAAwB58R,GAAQ/hH,UAAU08Y,SAASljY,EAAO23V,GAu+E5EuiD,CAAgB3xS,EAAQvoG,EAAO23V,GAC1DmrB,UAAW,CAACvjZ,EAAM7E,EAAMi9X,EAAMirB,IAv+EV,EAACr6Q,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,IAAYuiB,GAAwB58R,GAAQ/hH,UAAUs8X,UAAUvjZ,EAAM7E,EAAMi9X,EAAMirB,GAu+EvFu3B,CAAgB5xS,EAAQhpI,EAAM7E,EAAMi9X,EAAMirB,GACpFlvF,SAAUh5T,GAv+ES,EAAC6tI,EAAQ7tI,IAASyqa,GAAwB58R,GAAQ/hH,UAAUktS,SAASh5T,GAu+EtE0/a,CAAe7xS,EAAQ7tI,GACzC0yQ,cAAe,CAAC1rM,EAASrjE,EAAUukZ,EAASjrB,IA79E1B,EAACpvP,EAAQqmR,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,IAASwtC,GAAwB58R,GAAQ/hH,UAAU4mP,cAAcwhJ,EAA2BltV,EAASrjE,EAAUukZ,EAASjrB,GA69ErJvqH,CAAc7kI,EAAQoxS,EAAmBj4W,EAASrjE,EAAUukZ,EAASjrB,GAC1Hr9E,WAAY32L,EAAM22L,GAAY/xK,GAC/B,EAGG8xS,GAAsBhkQ,IAC1B,OAAQA,EAAIr+K,eACZ,IAAK,OACL,IAAK,OACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,EACT,EAmGIsib,GAAc/xS,IAClB,MAAMq4R,EAAiBn/N,KACjB6/N,EAAQn/P,GAAK,GACb/tK,EAAQ+tK,GAAK,GACbxP,EAAc,CAClBvsJ,KAAM,GACNo7Z,QAAQ,EACRG,aAAc,KAvnFG,EAACp5R,EAAQ+4R,EAAOV,KACnCuE,GAAwB58R,GAAQoqB,YAAYgvQ,aAAaL,EAAOV,EAAe,EAunF3Ee,CAAap5R,EAAQ+4R,EAAOV,EAAe,EAE7C7ta,IAAK,CAACmnQ,EAAO/mQ,IAvnFI,EAACo1I,EAAQoqB,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,IAAUgya,GAAwB58R,GAAQoqB,YAAY5/J,IAAI4/J,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,GAwnF/Konb,CAAahyS,EAAQoqB,EAAav+J,EAAOkta,EAAOV,EAAgB1mK,EAAO/mQ,GAEhFmib,eAAgB,KACd/sS,EAAO25R,UAAS,GAChB,MAAMhoK,EAAQumK,GAAiBl4R,GAC/B2xH,EAAMp6E,SAAWmlM,GAAgB18O,EAAOI,WACxCJ,EAAO7xH,SAAS,SAAU,CACxBwjP,QACA6nK,UAAW/4S,GAAM2pC,EAAYvsJ,KAAMhS,EAAM6B,OAAOqvH,kBAChD,EAEJ88S,KAAM,IAloFG,EAAC75R,EAAQoqB,EAAa2uQ,EAAOlta,IAAU+wa,GAAwB58R,GAAQoqB,YAAYyvQ,KAAKzvQ,EAAa2uQ,EAAOlta,GAmoF5Ggua,CAAK75R,EAAQoqB,EAAa2uQ,EAAOlta,GAE1Ckua,KAAM,IApoFG,EAAC/5R,EAAQn0I,EAAOgS,IAAS++Z,GAAwB58R,GAAQoqB,YAAY2vQ,KAAKlua,EAAOgS,GAqoFjFk8Z,CAAK/5R,EAAQn0I,EAAOu+J,EAAYvsJ,MAEzCX,MAAO,KAtoFG,EAAC8iI,EAAQoqB,EAAav+J,KAClC+wa,GAAwB58R,GAAQoqB,YAAYltJ,MAAMktJ,EAAav+J,EAAM,EAsoFjEqR,CAAM8iI,EAAQoqB,EAAav+J,EAAM,EAEnC48D,MAAO,KAtoFG,EAACu3E,EAAQoqB,KACrBwyQ,GAAwB58R,GAAQoqB,YAAY3hG,MAAM2hG,EAAY,EAsoF1D3hG,CAAMu3E,EAAQoqB,EAAY,EAE5B8vQ,QAAS,IAtoFG,EAACl6R,EAAQoqB,EAAav+J,IAAU+wa,GAAwB58R,GAAQoqB,YAAY8vQ,QAAQ9vQ,EAAav+J,GAuoFpGqua,CAAQl6R,EAAQoqB,EAAav+J,GAEtCuua,QAAS,IAxoFG,EAACp6R,EAAQoqB,EAAav+J,IAAU+wa,GAAwB58R,GAAQoqB,YAAYgwQ,QAAQhwQ,EAAav+J,GAyoFpGuua,CAAQp6R,EAAQoqB,EAAav+J,GAEtCsqL,SAAUrgL,GA1oFG,EAACkqI,EAAQoqB,EAAa2uQ,EAAOjja,IAAa8ma,GAAwB58R,GAAQoqB,YAAY+rB,SAAS/rB,EAAa2uQ,EAAOjja,GA2oFvHqgL,CAASn2C,EAAQoqB,EAAa2uQ,EAAOjja,GAE9Cq5I,OAAQr5I,IA5oFG,EAACkqI,EAAQ+4R,EAAOjja,KAC7B8ma,GAAwB58R,GAAQoqB,YAAYjb,OAAO4pR,EAAOjja,EAAS,EA4oF/Dq5I,CAAOnP,EAAQ+4R,EAAOjja,EAAS,EAEjC8jG,MAAO,CAAC4gU,EAAWC,KA5oFT,EAACz6R,EAAQoqB,EAAav+J,EAAO2ua,EAAWC,KACpDmC,GAAwB58R,GAAQoqB,YAAYxwD,MAAMwwD,EAAav+J,EAAO2ua,EAAWC,EAAU,EA4oFvF7gU,CAAMomC,EAAQoqB,EAAav+J,EAAO2ua,EAAWC,EAAU,GAO3D,OAJKc,GAAMv7R,IAnJU,EAACA,EAAQoqB,EAAa2uQ,KAC3C,MAAMkZ,EAAwBr4Q,IAAK,GAC7Bs4Q,EAAwB9+a,IAC5B4la,GAAU5uQ,GAAa,EAAO2uQ,GAC9B3uQ,EAAY5/J,IAAI,CAAC,EAAG4I,EAAE,EAExB4sI,EAAO8K,GAAG,QAAQ,KAChBsf,EAAY5/J,KAAK,IAEnBw1I,EAAO8K,GAAG,qBAAqB13I,IAC7B,MAAM06K,EAAM16K,EAAE+9L,QACT2gP,GAAoBhkQ,KACvBorP,GAAU9uQ,EAAa2uQ,GACvB3uQ,EAAYgvQ,eACd,IAEFp5R,EAAO8K,GAAG,eAAe13I,IACvB,MAAM06K,EAAM16K,EAAE+9L,QACT2gP,GAAoBhkQ,IACvBokQ,EAAsB9+a,EACxB,IAEF4sI,EAAO8K,GAAG,yBAAyB,KACjCsf,EAAYgvQ,cAAc,IAE5Bp5R,EAAO8K,GAAG,iCAAkConS,GAC5ClyS,EAAO8K,GAAG,UAAWonS,GACrBlyS,EAAO8K,GAAG,SAAS13I,IACjB,MAAM4rL,EAAU5rL,EAAE4rL,QAClB,GAAI5rL,EAAE2rL,qBACJ,OAEF,MAAMozP,EAAStjF,GAAIhhO,GAAGjB,WAAuB,SAAVx5H,EAAErF,KACjCixL,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,GAAkB5rL,EAAER,SAAWu/a,KACrGD,IACAlyS,EAAO0uB,eAEO,KAAZswB,GAA8B,IAAZA,GACpBh/C,EAAO0uB,cAELujR,EAAsBvkb,OAAS08J,EAAY6uQ,SAAWR,GAAOP,GAAiBl4R,GAASoqB,EAAYvsJ,KAAK,MACrGmiI,EAAOoyS,WACVpyS,EAAO25R,UAAS,GAElB35R,EAAO7xH,SAAS,cAChB8ja,EAAsBrkb,KAAI,GAC1BoyI,EAAO0uB,cACT,IAEF1uB,EAAO8K,GAAG,WAAW13I,IACnB,MAAM4rL,EAAU5rL,EAAE4rL,QAClB,GAAI5rL,EAAE2rL,qBACJ,OAEF,GAAIC,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,EAItE,YAHI50B,EAAY6uQ,QACdiZ,EAAsB9+a,IAI1B,MAAMi/a,EAASj/a,EAAER,UAAYQ,EAAEP,QAAUO,EAAET,QAC3C,IAAKqsL,EAAU,IAAMA,EAAU,KAAmB,MAAZA,GAA+B,KAAZA,IAAmB50B,EAAY6uQ,SAAWoZ,EAKjG,OAJAjoR,EAAYgvQ,eACZJ,GAAU5uQ,GAAa,EAAM2uQ,GAC7B3uQ,EAAY5/J,IAAI,CAAC,EAAG4I,QACpB6+a,EAAsBrkb,KAAI,IAGMihW,GAAIhhO,GAAGjB,UAAYx5H,EAAET,QAAUS,EAAER,UAAYQ,EAAEP,SAE/Eu3J,EAAYgvQ,cACd,IAEFp5R,EAAO8K,GAAG,aAAa13I,IACjBg3J,EAAY6uQ,QACdiZ,EAAsB9+a,EACxB,IAKF4sI,EAAO8K,GAAG,SAAS13I,IAFUxI,MAGvBwI,EAAEk/a,YAJqD,0BAIfl/a,EAJCk/a,WACW,gBAA7B1nb,EAG4CwI,GAH7Bk/a,WAA6C,OAAf1nb,EAAMiT,MAChDjT,IAA6B,oBAApBA,EAAM0nb,WAAuD,mBAApB1nb,EAAM0nb,UAETC,CAAwBn/a,KACnG8+a,EAAsB9+a,EACxB,IAEF4sI,EAAO8K,GAAG,gCAAgC13I,IACnCA,EAAE2rL,sBACL/+C,EAAO0uB,aACT,GACA,EA0DA9jB,CAAe5K,EAAQoqB,EAAa2uQ,GAxDX/4R,KAC3BA,EAAO0/C,YAAY,SAAU,GAAI,QACjC1/C,EAAO0/C,YAAY,sBAAuB,GAAI,OAAO,EAwDrD8yP,CAAqBxyS,GACdoqB,CAAW,EAGdqoR,GAAoB,CACxB,EACA,GACAr9C,GAAGM,KACHN,GAAGK,IACH,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAL,GAAGr2J,KACHq2J,GAAGv2J,GACHu2J,GAAGx2J,KACHw2J,GAAGt2J,OACHjyO,OAAOgiW,GAAIvhO,QAAQzB,YAAc,CAAC,KAAO,IACrC6mT,GAAkB,uBAClBC,GAAkBv/a,GAAgB,YAAXA,EAAEkD,MAAiC,UAAXlD,EAAEkD,KACjDs8a,GAAgBx/a,IACpB,MAAM4rL,EAAU5rL,EAAE4rL,QAClB,OAAOA,IAAYo2M,GAAGpjM,WAAahT,IAAYo2M,GAAGnjM,MAAM,EA4BpD4gP,GAAU7yS,IACd,IAAIrhI,EACJ,MAAMghH,EAAMqgB,EAAOrgB,IACbqyS,EAAY1wO,GAAmBthD,GAC/Bo2F,EAAgD,QAAjCz3N,EAAKshX,GAAejgP,UAA4B,IAAPrhI,EAAgBA,EAAK,GAC7Em0a,EAAoB,CAAC1/a,EAAGmtD,KAC5B,GAhC6BntD,KAC/B,GAAIu/a,GAAgBv/a,GAAI,CACtB,MAAM4rL,EAAU5rL,EAAE4rL,QAClB,OAAQ4zP,GAAcx/a,KAAOgiY,GAAGt2M,eAAe1rL,IAAMA,EAAEP,QAAUmsL,GAAW,KAAOA,GAAW,KAAO3hE,EAAWo1T,GAAmBzzP,GACrI,CACE,OAAO,CACT,EA0BM+zP,CAAyB3/a,GAC3B,OAEF,MAAMkO,EAAO0+H,EAAO5tC,UACd4gV,GA5BoB5/a,IAAKu/a,GAAgBv/a,MAAQw/a,GAAcx/a,IAAiB,UAAXA,EAAEkD,MAAkC,MAAdlD,EAAE4rL,SA4B3Ei0P,CAAsB7/a,IA3B1B,EAACusH,EAAK62L,EAAS0pG,KACrC,GAAIvgS,EAAI4uC,QAAQioJ,OAAS5mT,EAAW,CAChCokW,WAAW,EACXC,aAAa,IACX,CACJ,MAAM2D,EAAephD,EAAQlpD,kBAC7B,OAAKsqG,IAEMj4O,EAAI1jE,SAASu6P,EAAQlpD,kBAAmB,kBAAmB3tI,EAAI1jE,SAASu6P,EAAQlpD,kBAAmB,kBAGrG4yJ,IAAoBtoD,EAAah4O,SAASnwH,aAErD,CACE,OAAO,CACT,EAY6Dyjb,CAAgBvzT,EAAKr+G,EAAM0wZ,IAClB,KAAzCryS,EAAI6iB,UAAUlhI,EAAMoxa,MACpBM,GAAmBzyX,KAC5Co/D,EAAIyxE,UAAU9vL,EAAMoxa,GAAiBM,EAAkB58M,EAAc,MA/jX7C,EAACp2F,EAAQoxC,KACrCpxC,EAAO7xH,SAAS,oBAAqB,CAAEijK,SAAQ,EA+jX3C+hQ,CAAsBnzS,EAAQgzS,GAC9BhzS,EAAO8K,GAAGkoS,EAAkB,UAAY,QAASF,GACjD9yS,EAAO6lC,IAAImtQ,EAAkB,QAAU,UAAWF,GACpD,EAEExrT,GAAW8uG,IACbp2F,EAAO8K,GAAG,QAAQ13I,IAChB0/a,EAAkB1/a,GAAG,GACrB4sI,EAAO8K,GAAG,gCAAiCgoS,GAC3C9yS,EAAO8K,GAAG,SAAS13I,GAAK4pY,GAAMljN,iBAAiB95C,GAAQ,IAAM8yS,EAAkB1/a,MAAI,GAEvF,EAOIggb,GAAgB,CAAC5nb,EAAM0sC,KAAO,CAClC1sC,OACA0sC,OAEIm7Y,GAAmB,CAAC5tF,EAAUpsS,KAClC,MAAMm9P,EAAUz1L,GAAaS,QAAQikO,GAC/B6tF,EAAevyT,GAAaS,QAAQnoE,EAAIwB,aAC9C,OAAO2wV,GAAiBh1F,EAAS88H,GAAc1mb,KAAIg/L,GAX/B,EAACA,EAAOv1K,KAAa,CACzCu1K,QACAv1K,aAS4Dk9Z,CAAc3nP,EAAOvyI,IAAK,EAIlFm6X,GAAiB,CAAC1sY,EAAM/xC,IAGrBkrM,GAAUlrM,GADFiC,GAAQi9W,GAAcj9W,IAASu8V,GAAwBv8V,EAAK2oH,OAD5D3oH,GAAQ00B,GAAG10B,EAAM8vC,KAEQj1C,OAAOg+V,IAAatzO,MAAMz1E,GAwB9D2sY,GAAgB,CAACrjb,EAAQq1V,EAAUz6J,EAASrmC,KAChD,MAAM+uR,EAAeL,GAAiB5tF,EAAUg0B,GAAcG,eAAej1N,IACvEgvR,EAAaD,EAAax/W,MAAK0/W,GAAYtpD,GAAat/L,EAASy6J,EAAUmuF,EAASv9Z,UAAU69C,MAAKh8B,GAAMm7Y,GAAiB5tF,EAAUvtT,GAAItrC,KAAIgnb,GAfjI,EAACxjb,EAAQq1V,EAAUz6J,EAASuoP,IACzClgF,GAAOkgF,EAAcl9Z,SAASw4J,aAAeqS,GAAU9wL,EAAQmjb,EAAc3nP,OACxE6+L,IAAW,EAAO8oD,EAAc3nP,MAAMjsE,KAAKzrD,MAAK2/W,GACjDA,EAAoBl6D,QAAQ45D,EAAcl9Z,UACrCi0W,GAAat/L,EAASy6J,EAAUouF,GAAqB3/W,MAAKh8B,GAAMm7Y,GAAiB5tF,EAAUvtT,KAE3FwjF,EAAS/iH,KAAK46a,KAEtBh3T,MAAMg3T,GAEFA,EAKqJO,CAAW1jb,EAAQq1V,EAAUz6J,EAAS4oP,SACpM,OAAO5zP,GAAM0zP,EAAcC,EAAYP,IAAevhb,QAAOuhb,GA/BrCA,KAAkB1nZ,GAAG0nZ,EAAc5nb,KAAKogM,MAAOwnP,EAAcl7Y,GAAG0zJ,OA+BVmoP,CAAkBX,IAzB9E,EAAC3tF,EAAU2tF,KAC7B,MAAMtsY,EAAOi6E,GAAaS,QAAQikO,GAClC,OAAO/5T,GAAG8nZ,GAAe1sY,EAAMssY,EAAc5nb,KAAKogM,OAAQ4nP,GAAe1sY,EAAMssY,EAAcl7Y,GAAG0zJ,OAAO,EAuBWooP,CAAYvuF,EAAU2tF,IArBrHA,KAA4E,IAA3D5/E,GAAyB4/E,EAAc5nb,KAAKogM,MAAMjsE,OAA2E,IAAzD6zO,GAAyB4/E,EAAcl7Y,GAAG0zJ,MAAMjsE,KAqBEgiB,CAAayxS,IApBlJA,KACrB,MAAMa,EAAeroP,GAASkoL,GAAcloL,IAAU4rK,GAAa5rK,EAAMjsE,MAAQo0P,GAAanoL,GAC9F,OAAOqoP,EAAab,EAAc5nb,KAAKogM,QAAUqoP,EAAab,EAAcl7Y,GAAG0zJ,MAAM,EAkBoGsoP,CAAed,IAhCjLA,MAAmBt+a,GAASs+a,EAAcl7Y,GAAG0zJ,MAAOwnP,EAAc5nb,KAAKogM,QAAU92L,GAASs+a,EAAc5nb,KAAKogM,MAAOwnP,EAAcl7Y,GAAG0zJ,QAgC8DuoP,CAAiBf,IAAe,EAQtPgB,GAAkB,CAACxoP,EAAOx7L,KAC9B,MAAM+zH,EAL8B,EAACynE,EAAOx7L,KAC5C,MAAM+zH,EAAW+B,GAAW0lE,GAC5B,OAAO2hK,GAAYppO,GAAUpoE,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,MAAM+/D,KAAK9uG,EAASm3G,IAAWt4H,GAASs4H,EAAS50H,MAAM,EAAG1D,IAAO,EAGvGwob,CAA8BzoP,EAAOx7L,GAEtD,OADA+8V,EAAOhpO,EAAUyjF,IACVzjF,CAAQ,EAEXmwT,GAAkB,CAAClkb,EAAQq1V,EAAU75J,KACzC,MAAM/oE,EAAU4iR,GAAe75M,EAAO65J,GACtC,OAAOpvJ,GAAOxzE,EAAQpjH,WAAWjR,GAAW0yL,GAAU9wL,EAAQ5B,KAAU6sC,KAAKusK,GAAS,EAGlF2sO,GAAmB,CAAC9uF,EAAUogD,EAAW2uC,EAASpkb,EAAQqkb,KAC9D,GAAIvzP,GAAU9wL,EAAQokb,GAEpB,OADA//D,GAAkB+/D,GACX3pD,GAAgB2pD,EAAQ70T,KAJb,EAACvvH,EAAQ2rD,IAA2E,IAApEsxS,EAASmD,GAAaz0S,IAAKA,IAAOmlI,GAAU9wL,EAAQ2rD,KAAK1gD,OAMzFq5a,CAActkb,EAAQqkb,IAAmBvzP,GAAU9wL,EAAQy1Y,IAC7DviR,GAASmxT,EAAgB1zT,GAAaM,QAAQ,OAEhD,MAAMhrG,EAAWu0W,GAAa4pD,EAAQ70T,IAAK85P,GAAc7qR,OAAO6lV,EAAe90T,MAK/E,OAJAwtO,EAAOinF,GAAgBvuC,EAAWz1Y,IAASu2H,IACzCrD,GAASmxT,EAAgB9tT,EAAM,IAEjC2tT,GAAgBlkb,EAAQq1V,EAAUogD,GAC3BxvX,CAAQ,EAGXs+Z,GAAqB,CAAClvF,EAAUogD,EAAW2uC,EAASpkb,KACxD,GAAI8wL,GAAU9wL,EAAQokb,GAAU,CAC9B,GAAItzP,GAAU9wL,EAAQy1Y,GAAY,CAChC,MAAM+uC,EAA8B74X,IAClC,MAAMsgT,EAAS,CAACrlW,EAAM1B,IAAasuH,GAAW5sH,GAAM8kH,MAAK,IAAMxmH,IAAUqxH,GALhE,EAACv2H,EAAQ4G,IAAS5G,EAAOy6L,SAAS14L,GAAK6E,IAKkC6zL,CAASz6L,EAAQu2H,GAAS01O,EAAO11O,EAAOrxH,EAASzI,OAAOumX,GAAUzsP,KAAWrxH,IAC/J,OAAO+mW,EAAOtgT,EAAI,GAAG,EAEjB84X,EAA0B72T,EAAM42T,EAA4BJ,IAAU,CAAChmb,EAASq4H,KACpFy4E,GAAO9wM,EAASq4H,GACTA,IACN2tP,MACHjuV,GAAMs/W,GACNpiR,GAASoiR,EAAWgvC,EACtB,CAEA,OADAjtO,GAAS4sO,GACF3pD,GAAgBgb,EAAUlmR,IACnC,CACA,MAAMtpG,EAAWy0W,GAAe0pD,EAAQ70T,KAKxC,OAJAwtO,EAAOinF,GAAgBvuC,EAAWz1Y,IAASu2H,IACzClD,GAAS+wT,EAAS7tT,EAAM,IAE1B2tT,GAAgBlkb,EAAQq1V,EAAUogD,GAC3BxvX,CAAQ,EAMXy+Z,GAAoB,CAACjvC,EAAW2uC,IAAY1/a,GAAS0/a,EAAS3uC,GAJzC,EAAC2uC,EAAS5oP,KACnC,MAAMmpP,EAAmBtvC,GAAe75M,EAAO4oP,GAC/C,OAAO94T,EAASlwH,KAAKupb,EAAiBA,EAAiB15a,OAAS,GAAG,EAEY25a,CAAmBR,EAAS3uC,GAAanqR,EAASE,OAC7Hq5T,GAAS,CAAClyW,EAAO6oH,KACrB6+L,GAAW1nT,EAAO6oH,EAAMjsE,KAAKzrD,MAAK79C,GAAYqlG,EAASlwH,KAAK6qB,EAASw4J,aAAYjiL,IAAIm0H,GAAaS,SAAS3vH,OAAOgiX,IAAQx4U,KAAKusK,GAAS,EAEpIstO,GAAiB,CAACzvF,EAAUogD,EAAW2uC,EAASpkb,KACpD6kb,IAAO,EAAMpvC,GACbovC,IAAO,EAAOT,GACPM,GAAkBjvC,EAAW2uC,GAAS14T,KAAKV,EAAMu5T,GAAoBlvF,EAAUogD,EAAW2uC,EAASpkb,GAASgrH,EAAMm5T,GAAkB9uF,EAAUogD,EAAW2uC,EAASpkb,KAErK+kb,GAAc,CAAC1vF,EAAUz6J,EAASoqP,EAAQC,EAAQjlb,IAAW46L,EAAUkqP,GAAezvF,EAAU4vF,EAAQD,EAAQhlb,GAAU8kb,GAAezvF,EAAU2vF,EAAQC,EAAQjlb,GAEnKklb,GAAoB,CAACt1S,EAAQgrD,KACjC,MAAMy6J,EAAW1kO,GAAaS,QAAQwe,EAAO5tC,WACvC/7E,EAzEO,EAACjmB,EAAQq1V,EAAUz6J,EAASrmC,IAAQA,EAAI0N,UAAYohR,GAAcrjb,EAAQq1V,EAAUz6J,EAASrmC,GAAOjpC,EAASE,OAyEzG8rF,CAAO1nE,EAAO5vI,OAAQq1V,EAAS9lO,IAAKqrE,EAAShrD,EAAOI,UAAUwjC,UAAUh3K,KAAIwmb,GAAiB,KAC5G+B,GAAY1vF,EAAUz6J,EAASooP,EAAc5nb,KAAKogM,MAAOwnP,EAAcl7Y,GAAG0zJ,MAAO5rD,EAAO5vI,QAAQirC,MAAKge,IACnG2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,UAAU,GACtC,IAEJ,OAAOrjW,CAAQ,EAkBXk/Z,GAAmB,CAACzuY,EAAMwtU,KAC9B,MAAMt9W,EAAO+pH,GAAaS,QAAQ8yP,GAC5BxxP,EAAS1H,EAAM1vF,GAAIob,GACzB,OAAO+pT,GAAW75V,EAAMi9W,GAAenxP,GAAQ7G,QAAQ,EAGnDu5T,GAAuB,CAAC1uY,EAAM69G,KAClC,MAAM8wR,EAAa7qD,GAAa9jV,EAAK64E,IAAK85P,GAAcG,eAAej1N,IAAMzoC,SACvEw5T,EAAS/qD,GAAa7jV,EAAK64E,IAAK85P,GAAcI,aAAal1N,IAAMzoC,SACvE,OAJyB,EAACp1E,EAAM69G,IAAQ4wR,GAAiBzuY,EAAM69G,EAAIiN,iBAAmB2jR,GAAiBzuY,EAAM69G,EAAImN,cAIzG6jR,CAAmB7uY,EAAM69G,IAAQ8wR,GAAcC,CAAM,EAQzDE,GAAgB51S,IACpB,MAAMylN,EAAW1kO,GAAaS,QAAQwe,EAAO5tC,WACvCuyD,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAO4xQ,GAAqB/vF,EAAU9gM,GATpB3kB,IACXtkB,EAAS/iH,MAAK,KACnBqnI,EAAOwuB,WAAW,IAClBxuB,EAAOI,UAAUquB,mBAAmB,IAMOonR,CAAY71S,GAnC5B,EAACylN,EAAUrlN,EAAWhwI,KACnD,MAAMu0J,EAAMvkB,EAAUwjC,SACtB,OAAOoc,GAAMwrN,GAAiB/lD,EAAU1kO,GAAaS,QAAQmjC,EAAIiN,iBAAkB45O,GAAiB/lD,EAAU1kO,GAAaS,QAAQmjC,EAAImN,gBAAgB,CAACsjR,EAAQC,IACzJ3pZ,GAAG0pZ,EAAQC,GAQP35T,EAASE,OAPTF,EAAS/iH,MAAK,KACnBgsJ,EAAIynP,iBACJ+oC,GAAY1vF,GAAU,EAAM2vF,EAAQC,EAAQjlb,GAAQirC,MAAKge,IACvD+mF,EAAU0kB,OAAOzrG,EAAIqgU,UAAU,GAC/B,MAKLn9P,MAAMb,EAASE,OAAO,EAsB0Ck6T,CAAuBrwF,EAAUzlN,EAAOI,UAAWJ,EAAO5vI,OAAO,EAEhI2lb,GAAoB,CAAC/1S,EAAQg2S,IAAah2S,EAAOI,UAAU+8C,cAAgBzhE,EAASE,OAASg6T,GAAc51S,GAE3Gi2S,GAAY,CAACh5X,EAAW+iF,EAAQhpI,EAAM43F,EAAQgkF,IAAmBl3D,EAASlwH,KAAKw0I,EAAO+3Q,oBAAoBk+B,UAAUh5X,EAAWjmD,EAAM43F,EAAQgkF,IAM7I/tB,GAAa,CAAC7kB,EAAQhpI,IAChBgpI,EAAO7xH,SAAS,uBAAwB,CAAE1f,OAAQuI,IACtD+nL,qBACGrjE,EAASE,OAEXF,EAAS/iH,KAVG3B,KACnB,MAAM2tJ,EAAM3tJ,EAAKgiD,cAAc03G,cAE/B,OADA/L,EAAIE,WAAW7tJ,GACR2tJ,CAAG,EAOWuxR,CAAal/a,IAmB9Bm/a,GAAmB,CAACn2S,EAAQ/hG,EAAO20I,IAAmB30I,EAAMo0H,UAjBvC,EAACryB,EAAQ/hG,EAAO20I,KACzC,MAAM81M,EAAkBxlM,GAAe,EAAGljD,EAAO5tC,UAAWn0D,GACtD+0D,EAAgBymR,GAAcG,eAAe8O,GAC7C0tD,EAAoBpjV,EAAc67E,UACxC,GAAIw3M,GAAwB+vD,GAC1B,OAAOH,GAAU,EAAGj2S,EAAQo2S,GAAoBpjV,EAAcqiR,WAAW,GAE3E,MAAMghE,EAA0BrjV,EAAc67E,SAAQ,GACtD,GAAIw3M,GAAwBgwD,GAC1B,OAAOJ,GAAU,EAAGj2S,EAAQq2S,GAAyB,GAAO,GAE9D,MAAMC,EAASnkC,GAAyBnyQ,EAAOrgB,IAAIyhE,UAAWpuF,EAAc67E,WAC5E,OAAIw3M,GAAwBiwD,GACnBL,GAAU,EAAGj2S,EAAQs2S,GAAQ,EAAO1jQ,GAEtCl3D,EAASE,MAAM,EAEsD26T,CAAmBv2S,EAAQ/hG,EAAO20I,GAAgBr2D,MAAMt+E,GAASA,EAEzIu4Y,GAAmBn9X,GAAOisV,GAA6BjsV,IAAQ6rV,GAAc7rV,GAC7Eo9X,GAAkBp9X,GAAOksV,GAA4BlsV,IAAQ8rV,GAAa9rV,GAM1Eq9X,GAA4B,CAAC12S,EAAQ/hG,EAAOjnC,EAAMimD,EAAW+tI,EAAS2rP,KAC1EV,GAAUh5X,EAAW+iF,EAAQ22S,EAAkB9nQ,SAASmc,GAAUA,GAAS,GAAM3vJ,MAAKu7Y,IACpF,GAAI34Y,EAAMo0H,UAAW,CACnB,MAAMwkR,EAAc54Y,EAAMw5I,aACtBuT,EACF6rP,EAAY5xR,OAAO2xR,EAAWhlR,eAAgBglR,EAAW/kR,aAEzDglR,EAAY7xR,SAAS4xR,EAAW9kR,aAAc8kR,EAAW7kR,WAE3D8kR,EAAYzqC,gBACd,MACEnuW,EAAMmuW,iBAERpsQ,EAAOI,UAAU0kB,OAAO8xR,EAAW,IAlBb,EAACj3T,EAAK3oH,KAC1Bi8V,GAASj8V,IAA8B,IAArBA,EAAK6G,KAAKxC,QAC9BskH,EAAIj+D,OAAO1qD,EACb,EAiBA8/a,CAAkB92S,EAAOrgB,IAAK3oH,EAAK,EA2B/B+/a,GAAoB,CAAC/2S,EAAQgrD,IAzBR,EAAChrD,EAAQgrD,KAClC,MAAM/sJ,EAAQ+hG,EAAOI,UAAUwjC,SAC/B,IAAKqvL,GAASh1T,EAAMotJ,yBAClB,OAAO3vE,EAASE,OAElB,MAAM3+D,EAAY+tI,EAAU+9L,GAAWa,SAAWb,GAAWkB,UACvD6rB,EAAc9rB,GAAYhqP,EAAO5tC,WACjC4kV,EAAe57T,EAAMwtQ,GAAwB59L,EAAU8qN,EAAY1/V,KAAO0/V,EAAY59V,MACtF++X,EAAajsP,EAAUwrP,GAAmBC,GAC1CzjV,EAAgBy1R,GAA2BxrU,EAAW+iF,EAAO5tC,UAAWn0D,GACxEi5Y,EAAoBF,EAAahkV,GACjCmkV,EAA8BD,EAAoBlsC,GAAkBhgN,EAASksP,GAAqBA,EACxG,IAAKC,IAAgCtuD,GAAsB71R,EAAemkV,GACxE,OAAOz7T,EAASE,OACX,GAAIq7T,EAAWE,GACpB,OAAOz7T,EAAS/iH,MAAK,IAAM+9a,GAA0B12S,EAAQ/hG,EAAO+0D,EAAc67E,UAAW5xH,EAAW+tI,EAASmsP,KAEnH,MAAMR,EAAoBK,EAAaG,GACvC,OAAIR,GAAqBM,EAAWN,IAC9B9tD,GAAsBsuD,EAA6BR,GAC9Cj7T,EAAS/iH,MAAK,IAAM+9a,GAA0B12S,EAAQ/hG,EAAO+0D,EAAc67E,UAAW5xH,EAAW+tI,EAAS2rP,KAG9Gj7T,EAASE,MAAM,EAEuBw7T,CAAmBp3S,EAAQgrD,GAEpEqsP,GAAqB,CAACr3S,EAAQs3S,KAClC,MAAMxwY,EAAOk5F,EAAO5tC,UACpB,OAAOklV,EAAUzsD,GAAgB/jV,GAAMj1C,OAAOyzY,IAAgCxa,GAAehkV,GAAMj1C,OAAO0zY,GAA4B,EAElIgyC,GAAsBv3S,IAC1B,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAQjf,EAAI0N,YAAcglR,GAAmBr3S,GAAQ,GAAM3jB,QAAOhjE,GAAOA,EAAIsgU,QAAQF,GAAcG,eAAej1N,OAAU0yR,GAAmBr3S,GAAQ,GAAO3jB,QAAOhjE,GAAOA,EAAIsgU,QAAQF,GAAcI,aAAal1N,MAAO,EAItN6yR,GAAej9R,GAAa,CAChC,CAAE74F,OAAQ,CAAC,YACX,CAAE+1X,cAAe,CAAC,YAClB,CAAEC,eAAgB,CAAC,eAWfC,GAA8B,CAACvnb,EAAQ02C,EAAMkkJ,EAASx/L,EAAM0sC,KAChE,MAAM0/Y,EAAW1/Y,EAAG22I,SAASmc,GAC7B,OAAOwgN,GAAiBzqR,GAAaS,QAAQ16E,GAAOi6E,GAAaS,QAAQh2H,EAAKqjL,YAAYjiL,KAAIirb,GAAY32P,GAAU9wL,EAAQynb,GAAYL,GAAa91X,OAAOm2X,EAASl4T,KAAO63T,GAAaC,cAAcG,KAAWh7T,SAAQ,IAAMlB,EAAS/iH,KAAK6+a,GAAaC,cAAcG,KAAW,EAEhRE,GAAkB,CAAChxY,EAAMkkJ,EAASx/L,EAAM4E,IAAWk6X,GAAat/L,EAASlkJ,EAAMt7C,GAAM0oE,MAAKh8B,IAC9F,OApBwBlhC,EAoBFkhC,EAAG22I,UApBO7zD,EAAchkH,KAAUi9W,GAAclzP,GAAaS,QAAQxqH,KAAU+8W,GAAahzP,GAAaS,QAAQxqH,MAWlG,EAAC8vC,EAAMkkJ,EAASx/L,EAAM0sC,EAAI9nC,KAC/D,MAAM04X,EAAcjgQ,GAAOz4H,EAAOy6L,SAAShiE,EAAIjJ,SAASnwH,iBAAmBk4X,GAAcn8X,EAAM0sC,EAAI4O,GACnG,OAAO0hV,IAAmBx9L,EAASx/L,GAAMswH,MAAK,IAAM0sQ,GAAkBx9L,EAAS9yJ,GAAI4jF,KAAKN,EAAOstQ,IAAcA,EAAY,EAS9GivD,CAA+BjxY,EAAMkkJ,EAASx/L,EAAM0sC,EAAI9nC,GAD1DsrH,EAASE,OAGPovE,GAAWwoK,GAAyBt7T,EAAG22I,aAEtCmc,GAAWwoK,GAAyBt7T,EAAG22I,SAAQ,IADlD8oQ,GAA4Bvnb,EAAQ02C,EAAMkkJ,EAASx/L,EAAM0sC,GAGvD8yJ,GAAWu6M,GAA4B/5Y,KAEtCw/L,GAAWs6M,GAA6B95Y,GAD3CkwH,EAAS/iH,KAAK6+a,GAAaE,eAAex/Y,IAI1CwjF,EAASE,OAjCM5kH,KAkCxB,IAoBIghb,GAA2B,CAAClxY,EAAMkkJ,EAASx/L,EAAM4E,IAhDjB,EAAC46L,EAASx/L,KAC9C,MAAMq9H,EAAMr9H,EAAKqjL,SAASmc,GACpBitP,EAAgBjtP,EAAU,QAAU,SAC1C,OAAO0nK,GAAY7pO,IAAQA,EAAIx1H,aAAa,oBAAsB4kb,CAAa,EA8C3EC,CAA8BltP,EAASx/L,GAnBP,EAACw/L,EAASniE,IAC1C5N,EAAW4N,GACNnN,EAASE,OACPovE,GAAWwoK,GAAyB3qO,EAAI3F,aAC1CxH,EAAS/iH,KAAK6+a,GAAaC,cAAc5uT,EAAI3F,eAC1C8nE,GAAWwoK,GAAyB3qO,EAAI5F,iBAC3CvH,EAAS/iH,KAAK6+a,GAAaC,cAAc5uT,EAAI5F,kBAE7CvH,EAASE,OAYTu8T,CAA8BntP,EAASx/L,EAAKqjL,SAASmc,IAAUpuE,SAAQ,IAAMk7T,GAAgBhxY,EAAMkkJ,EAASx/L,EAAM4E,KAElH0nb,GAAgBhxY,EAAMkkJ,EAASx/L,EAAM4E,GAAQ8jE,MAAK+4U,GAXd,EAACnmW,EAAMt7C,EAAMyhZ,IAAiBA,EAAanxR,MAAK+M,GAAOnN,EAAS/iH,KAAK6+a,GAAa91X,OAAOmnE,MAAOA,GAAOnN,EAAS/iH,KAAK6+a,GAAaC,cAAc5uT,MAAO3wF,GAChMyvV,GAAcn8X,EAAM0sC,EAAI4O,GACnB40E,EAASE,OAETF,EAAS/iH,KAAK6+a,GAAaE,eAAex/Y,MAOwBkgZ,CAAuCtxY,EAAMt7C,EAAMyhZ,KAkC1HorC,GAAgB,CAACr4S,EAAQhpI,IAAS0kH,EAASlwH,KAAK2mZ,GAAyBnyQ,EAAO5tC,UAAWp7F,IAC3Fg5L,GAAuB,CAAChwD,EAAQgrD,KACpC,MAAM4kN,EAAe5vQ,EAAOI,UAAUyuC,UACtC,OAAOwpQ,GAAcr4S,EAAQ4vQ,GAAc/9Y,OAAO2hW,IAA0B13O,MAAK,IAlCtE,EAACh1E,EAAMkkJ,EAASrmC,EAAKv0J,KAChC,MAAMs4X,EAAkBxlM,GAAe8H,EAAU,GAAK,EAAGlkJ,EAAM69G,GACzDn5J,EAAOiuX,GAAcG,eAAe8O,GACpCt0B,EAAcrzO,GAAaS,QAAQ16E,GACzC,OAAKkkJ,GAAWu6M,GAA4B/5Y,GACnCkwH,EAAS/iH,KAAK6+a,GAAa91X,OAAOl2D,EAAKqjL,SAAQ,KAC7Cmc,GAAWs6M,GAA6B95Y,GAC1CkwH,EAAS/iH,KAAK6+a,GAAa91X,OAAOl2D,EAAKqjL,aACpCmc,GAAWs6M,GAA6B95Y,IAAS66Y,GAAUjyC,EAAa5oW,EAAM4E,GACjFm2Y,GAAenyC,EAAa5oW,EAAM4E,GAAQxD,KAAI+oK,GAAM6hR,GAAa91X,OAAOi0G,EAAGkZ,aACzEmc,GAAWu6M,GAA4B/5Y,IAAS46Y,GAAahyC,EAAa5oW,EAAM4E,GAClFo2Y,GAAWpyC,EAAa5oW,EAAM4E,GAAQxD,KAAI+oK,GAAM6hR,GAAa91X,OAAOi0G,EAAGkZ,aAEvEmpQ,GAAyBlxY,EAAMkkJ,EAASx/L,EAAM4E,EACvD,EAoBuF4e,CAAKgxH,EAAO5tC,UAAW44F,EAAShrD,EAAOI,UAAUwjC,SAAU5jC,EAAO5vI,QAAQxD,KAAIqgZ,GAAgB,IAAMA,EAAanxR,KAjBlL,EAACkkB,EAAQgrD,IAAYx8L,IAC3CwxI,EAAO+3Q,oBAAoBugC,gBAC3BnuC,GAAgBnqQ,EAAQgrD,EAASjqE,GAAaS,QAAQhzH,KAC/C,GAcsM+pb,CAAgBv4S,EAAQgrD,GAZjN,EAAChrD,EAAQgrD,IAAYx8L,IACzC,MAAM6qD,EAAM2xI,EAAUyuL,GAAc7qR,OAAOpgG,GAAWirX,GAAc5qR,MAAMrgG,GAE1E,OADAwxI,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,YACrB,CAAI,EASoO+9D,CAAcz3S,EAAQgrD,GAPhPhrD,IAAU3mF,IAC/B2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,YACrB,GAKwQg+D,CAAe13S,QAAW,IAAMtkB,EAAS/iH,KAAK8hC,IAAM,EAK/T01J,GAAuB,CAACnwD,EAAQgrD,KACpC,MAAM4kN,EAAe5vQ,EAAOI,UAAUyuC,UACtC,GAAI2kL,GAAyBo8C,KAAkBn8C,GAAcm8C,GAAe,CAE1E,OADuByoC,GAAcr4S,EAAQ4vQ,EAAaloX,YAAY71B,OAAO2hW,IACvD13O,MAAK,IAAMJ,EAAS/iH,MAAK,KAPlBy7V,QAQFrzO,GAAaS,QAAQwe,EAAO5tC,WAPzD+6P,EAAOhnO,GAAYiuO,EAAa,4BAA6BxsJ,IAQzDuiM,GAAgBnqQ,EAAQgrD,EAASjqE,GAAaS,QAAQwe,EAAOI,UAAUyuC,YACvE68N,GAAc1rQ,EAAO,MACnB,IAAMtkB,EAAS/iH,KAAK8hC,IAC1B,CACA,OAAI88Y,GAAoBv3S,GACftkB,EAAS/iH,MAAK,KACnBwzY,GAAoBnsQ,EAAQA,EAAOI,UAAUwjC,SAAU7iD,GAAaS,QAAQwe,EAAO5tC,WAAW,IAG3FspB,EAASE,MAAM,EAElB48T,GAAmBx4S,IACvB,MAAMrgB,EAAMqgB,EAAOrgB,IAAKygB,EAAYJ,EAAOI,UACrCk2S,EAASnkC,GAAyBnyQ,EAAO5tC,UAAWguC,EAAUyuC,WACpE,GAAI0kL,GAAwB+iF,IAAW32T,EAAI2gB,QAAQg2S,IAAW32T,EAAI4uC,QAAQ+nR,GAAS,CACjF,MAAM3gR,EAAKh2C,EAAIn7G,OAAO,KAAM,CAAE,iBAAkB,MAChDm7G,EAAIgsP,QAAQ2qE,EAAQ,IACpBA,EAAOnvZ,YAAYwuI,GACnBv1B,EAAU0kB,OAAO20N,GAAc7qR,OAAO+mE,GAAI+jN,UAC5C,CACA,OAAO,CAAI,EAEP++D,GAAoB,CAACz4S,EAAQgrD,IAC7BhrD,EAAOI,UAAU+8C,cACZ6S,GAAqBhwD,EAAQgrD,GAE7BmF,GAAqBnwD,EAAQgrD,GAIlC0tP,GAAiBC,GAAYA,EAAS3ob,eAAe,QACrD4ob,GAAoBD,GAAYA,EAAS3ob,eAAe,UACxDwnL,GAAc,CAACv5I,EAAO46Y,KAC1B,MAAMC,EAAc,CAACj+X,EAAW/Q,KAC9B,GAAImpT,GAASp4S,GACX,MAAO,CACLtkC,KAAMskC,EACN/Q,UAEG,CACL,MAAMxsB,EAASu7Z,IACT10T,EAAWtpE,EAAUumE,WAC3B,OAAIt3E,EAASq6E,EAAS9oH,QACpBw/C,EAAU0oE,aAAajmG,EAAQ6mG,EAASr6E,IACjC,CACLxsB,SACAsxE,QAAQ,KAGV/zC,EAAU1zB,YAAY7J,GACf,CACLA,SACAsxE,QAAQ,GAGd,GAEI7kF,EAAM+ua,EAAY76Y,EAAM6zH,aAAc7zH,EAAM8zH,WAElD,MAAO,CACL3lK,MAFY0sb,EAAY76Y,EAAM2zH,eAAgB3zH,EAAM4zH,aAGpD9nJ,MACD,EAEGugL,GAAkBmvO,IACtB,IAAI96Z,EAAI+/I,EACR,MAAM,MAACtyJ,EAAK,IAAE2d,GAAO0vZ,EACf90Q,EAAM,IAAI91J,OAAOkqb,MAyBvB,OAxBIL,GAAetsb,GACjBu4J,EAAIK,SAAS54J,EAAMmqB,KAAMnqB,EAAM09C,QAE3B8uY,GAAkBxsb,KAChBA,EAAMwiG,OACR+1D,EAAIqM,eAAe5kK,EAAMkxB,QAEzBqnI,EAAIsM,cAAc7kK,EAAMkxB,QAES,QAAlC3e,EAAKvS,EAAMkxB,OAAOoK,kBAA+B,IAAP/oB,GAAyBA,EAAGgpB,YAAYv7B,EAAMkxB,SAGzFo7Z,GAAe3ua,GACjB46I,EAAIM,OAAOl7I,EAAIwM,KAAMxM,EAAI+/B,QAErB8uY,GAAkB7ua,KAChBA,EAAI6kF,OACN+1D,EAAIuM,aAAannJ,EAAIuT,QAErBqnI,EAAIwM,YAAYpnJ,EAAIuT,QAEW,QAAhCohI,EAAK30I,EAAIuT,OAAOoK,kBAA+B,IAAPg3H,GAAyBA,EAAG/2H,YAAY5d,EAAIuT,SAGlFqnI,CAAG,EAGNq0R,GAAoB,CAACh5S,EAAQgrD,KACjC,IAAIrsL,EACJ,MAAMghH,EAAMqgB,EAAOrgB,IACbs5T,EAAat5T,EAAIwgB,UAAUH,EAAOI,UAAUC,WAAY1gB,EAAI2gB,SAC5D44S,EAAWv5T,EAAIwgB,UAAUH,EAAOI,UAAUzC,SAAUhe,EAAI2gB,SACxDh/H,EAAO0+H,EAAO5tC,UAEpB,GAAuB,SADuF,QAAtFzzF,EAAoB,OAAfs6a,QAAsC,IAAfA,OAAwB,EAASA,EAAWr5T,gBAA6B,IAAPjhH,OAAgB,EAASA,EAAGlP,gBAClHwpb,GAAcC,GAAYD,IAAe33a,EAAKsiH,YAAcs1T,IAAa53a,EAAK8+K,YAAczgE,EAAI4uC,QAAQjtJ,GAAO,CAC7I,MAAMuiH,EAAUo1T,EAAW30T,WAAU,GAC/B2oR,EAAe,KAMnB,GALIjiN,EACFsgN,GAA+BtrQ,GAE/BqrQ,GAAwBrrQ,GAEtB1+H,EAAKsiH,aAAeq1T,EAAY,CAClC,MAAM1hQ,EAAWC,GAAYx3C,EAAOI,UAAUwjC,UAAU,IAAM90K,SAAS+3B,cAAc,UACrFt7B,MAAMC,KAAK8V,EAAK8/G,YAAY90H,SAAQ0K,GAAQ6sH,EAAQ18F,YAAYnwB,KAChEsK,EAAK6lB,YAAY08F,GACjBmc,EAAOI,UAAU0kB,OAAOwlC,GAAgB/S,GAC1C,GAEF,OAAO77D,EAAS/iH,KAAKs0Y,EACvB,CACA,OAAOvxR,EAASE,MAAM,EAOlBu9T,GAAoB,CAACn5S,EAAQgrD,IAAYhrD,EAAOI,UAAU+8C,cAJ1C,EAACn9C,EAAQgrD,KAC7B,MAAM8gN,EAAUryB,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC9D,OAAO0mN,GAAat/L,EAAShrD,EAAO5tC,UAAW05S,GAASj6Y,QAAOwnD,GAAO2xI,EAAUg6M,GAAmB3rV,GAAO4rV,GAAkB5rV,KAAM6a,MAAK7a,GAAOyuU,GAA6B98L,EAAU,GAAK,EAAG3xI,KAAMzsD,KAAIi8H,GAAO,IAAMmX,EAAOI,UAAU9sI,OAAOu1H,IAAK,EAEnKuwT,CAAcp5S,EAAQgrD,GAAWtvE,EAASE,OAEpHy9T,GAAWpmF,GACXqmF,GAA2Btib,GAAQqib,GAASrib,IAASA,EAAK6G,KAAK,KAAO62W,GACtE6kE,GAAyBvib,GAAQqib,GAASrib,IAASA,EAAK6G,KAAK7G,EAAK6G,KAAKxC,OAAS,KAAOq5W,GACvF8kE,GAAaxib,IACjB,IAAI2H,EAEJ,OAD0C,QAA7BA,EAAK3H,EAAKgiD,qBAAkC,IAAPr6C,EAAgBA,EAAK7P,UAC5DyyH,eAAemzP,GAAO,EAkD7B+kE,GAAe,CAAC7qV,EAAQ53F,IAAS43F,EAhDhB53F,KACrB,IAAI2H,EACJ,GAAI06a,GAASrib,EAAKisH,iBAChB,OAAIs2T,GAAuBvib,EAAKisH,kBAG9BjsH,EAAKisH,gBAAgB6oQ,WAAWpX,IAFzB19W,EAAKisH,gBAKT,GAAIo2T,GAASrib,GAClB,OAAIsib,GAAyBtib,IAG3BA,EAAKoyY,WAAW,EAAG10B,IAFZ19W,EAKJ,CACL,MAAMkyY,EAAUswC,GAAWxib,GAE3B,OAD2B,QAA1B2H,EAAK3H,EAAK0wB,kBAA+B,IAAP/oB,GAAyBA,EAAG4kH,aAAa2lR,EAASlyY,GAC9EkyY,CACT,GA4B8CwwC,CAAe1ib,GA1BzCA,KACpB,IAAI2H,EAAI+/I,EACR,GAAI26R,GAASrib,EAAKksH,aAChB,OAAIo2T,GAAyBtib,EAAKksH,cAGhClsH,EAAKksH,YAAYkmR,WAAW,EAAG10B,IAFxB19W,EAAKksH,YAKT,GAAIm2T,GAASrib,GAClB,OAAIuib,GAAuBvib,IAGzBA,EAAK80X,WAAWpX,IAFT19W,EAKJ,CACL,MAAMkyY,EAAUswC,GAAWxib,GAM3B,OALIA,EAAKksH,YACoB,QAA1BvkH,EAAK3H,EAAK0wB,kBAA+B,IAAP/oB,GAAyBA,EAAG4kH,aAAa2lR,EAASlyY,EAAKksH,aAE/D,QAA1Bw7B,EAAK1nJ,EAAK0wB,kBAA+B,IAAPg3H,GAAyBA,EAAGv3H,YAAY+hX,GAEtEA,CACT,GAEqEywC,CAAc3ib,GAC/E4ib,GAAqBx+T,EAAMq+T,IAAc,GACzCI,GAAoBz+T,EAAMq+T,IAAc,GAExCK,GAAkB,CAACzgY,EAAKu1C,IACxBqkQ,GAAS55S,EAAIwB,aACR4+X,GAAa7qV,EAAQv1C,EAAIwB,aAEzB4+X,GAAa7qV,EAAQv1C,EAAIw1H,WAG9BkrQ,GAAsB,CAAC1gY,EAAKs2C,KAChC,MAAMqqV,EAAYrqV,EAAMjiG,MACxB,OAAOssb,GAAa3gY,EAAIwB,cAAgBm/X,GAAajlE,GAAuBilE,EAAU,EAElFC,GAAc,CAACtqV,EAAO0nB,IAAaA,EAASyE,MAAKttH,IACrDy5M,GAASt4G,EAAMjiG,OACf,MAAM6oB,EAAOqja,GAAmBprb,GAEhC,OADAmhG,EAAM/hG,IAAI2oB,GACHmlG,EAAS/iH,KAAK8gX,GAAcljW,EAAMA,EAAKlb,OAAS,GAAG,IACzD7M,GAAWq8X,GAAgBr8X,GAAS5B,KAAIysD,IACzC,GAAK0gY,GAAoB1gY,EAAKs2C,GAKvB,CACL,MAAM34F,EAAO24F,EAAMjiG,MACnB,OAAO+rX,GAAcziX,EAAM,EAC7B,CARsC,CACpCixM,GAASt4G,EAAMjiG,OACf,MAAM6oB,EAAOuja,GAAgBzgY,GAAK,GAElC,OADAs2C,EAAM/hG,IAAI2oB,GACHkjW,GAAcljW,EAAM,EAC7B,CAGA,MACE/nB,GAAWs8X,GAAet8X,GAAS5B,KAAIysD,IACzC,GAAK0gY,GAAoB1gY,EAAKs2C,GAKvB,CACL,MAAM34F,EAAO24F,EAAMjiG,MACnB,OAAO+rX,GAAcziX,EAAMA,EAAKqE,OAAS,EAC3C,CARsC,CACpC4sM,GAASt4G,EAAMjiG,OACf,MAAM6oB,EAAOuja,GAAgBzgY,GAAK,GAElC,OADAs2C,EAAM/hG,IAAI2oB,GACHkjW,GAAcljW,EAAMA,EAAKlb,OAAS,EAC3C,CAGA,MACE7M,IACFy5M,GAASt4G,EAAMjiG,OACf,MAAM6oB,EAAOsja,GAAkBrrb,GAE/B,OADAmhG,EAAM/hG,IAAI2oB,GACHmlG,EAAS/iH,KAAK8gX,GAAcljW,EAAM,GAAG,IAGxC2ja,GAAgB,CAACC,EAAKn3a,KAC1B,IAAK,IAAI8N,EAAI,EAAGA,EAAIqpa,EAAI9+a,OAAQyV,IAAK,CACnC,MAAMjC,EAASsra,EAAIrpa,GAAGgZ,MAAM,KAAM9mB,GAClC,GAAI6L,EAAOotG,SACT,OAAOptG,CAEX,CACA,OAAO6sG,EAASE,MAAM,EAGlBw+T,GAAW7/R,GAAa,CAC5B,CAAE3rD,OAAQ,CAAC,YACX,CAAExiG,MAAO,CAAC,YACV,CAAE2d,IAAK,CAAC,YACR,CAAE8kF,MAAO,CAAC,cAENwrV,GAAY,CAAC50F,EAAUzuV,KAC3B,MAAMkpI,EAAcwnP,GAAiB1wX,EAAMyuV,GAC3C,OAAOvlN,GAA4BulN,CAAQ,EAEvC72P,GAAS,CAACg8S,EAAgBnlD,EAAUpsS,KACxC,MAAMihY,EAAOrvC,GAAkB5xV,GACzBtkD,EAAQslb,GAAU50F,EAAU60F,EAAKz/X,aACvC,OAAOiwV,GAAeF,EAAgB71Y,EAAOulb,GAAMx+T,MAAK,IAAM6uQ,GAAa51X,EAAOulb,GAAMpmX,KAAKknD,EAAM0vR,GAAgBF,EAAgB71Y,IAAQnI,KAAI+/K,GAAUytQ,GAASxrV,OAAO+9E,MAAUjxD,EAASE,KAAK,EAE7L2+T,GAAkC,CAAC90F,EAAU58N,IAAmD,OAA3CoiQ,GAAwBxlC,EAAU58N,GACvF2xT,GAAuB,CAAC5vC,EAAgBnlD,EAAUpsS,IAAQyxV,GAAeF,EAAgBnlD,EAAUpsS,GAAKxnD,OAAOupH,EAAMm/T,GAAiC90F,IACtJg1F,GAAU,CAAC7vC,EAAgBnlD,EAAUpsS,KACzC,MAAMihY,EAAOpvC,GAAmB7xV,GAChC,OAAOmhY,GAAqB5vC,EAAgBnlD,EAAU60F,GAAMpmX,MAAKy4G,GAC/Ci+M,GAAaj+M,EAAQ2tQ,GACtBp+T,SAAWR,EAAS/iH,KAAKyhb,GAAShub,MAAMugL,IAAWjxD,EAASE,QAC3E,EAEE7xG,GAAM,CAAC6gY,EAAgBnlD,EAAUpsS,KACrC,MAAMihY,EAAOrvC,GAAkB5xV,GAC/B,OAAOmhY,GAAqB5vC,EAAgBnlD,EAAU60F,GAAMpmX,MAAKy4G,GAC/Cg+M,GAAah+M,EAAQ2tQ,GACtBp+T,SAAWR,EAAS/iH,KAAKyhb,GAASrwa,IAAI4iK,IAAWjxD,EAASE,QACzE,EAEE/sB,GAAQ,CAAC+7S,EAAgBnlD,EAAUpsS,KACvC,MAAMihY,EAAOpvC,GAAmB7xV,GAC1BtkD,EAAQslb,GAAU50F,EAAU60F,EAAKz/X,aACvC,OAAOiwV,GAAeF,EAAgB71Y,EAAOulb,GAAMx+T,MAAK,IAAM8uQ,GAAa71X,EAAOulb,GAAMpmX,KAAKknD,EAAM0vR,GAAgBF,EAAgB71Y,IAAQnI,KAAI+/K,GAAUytQ,GAASvrV,MAAM89E,MAAUjxD,EAASE,KAAK,EAE5L8+T,GAAkBrjU,IAAa+c,GAAMrsG,GAAWsvF,IAChDsjU,GAAe,CAAC/vC,EAAgBnlD,EAAUpsS,IAC7B6gY,GAAc,CAC7BtrV,GACA6rV,GACA1wa,GACA8kF,IACC,CACD+7S,EACAnlD,EACApsS,IAEcxnD,OAAO6ob,IAEnB3yZ,GAAasvF,GAAYA,EAASyE,KAAKZ,EAAUA,EAAUA,EAAUA,GACrE0/T,GAAUvjU,GAAYA,EAASyE,KAAK9uG,EAAS,UAAWA,EAAS,SAAUA,EAAS,OAAQA,EAAS,UACrGgxE,GAAUq5B,GAAYA,EAASyE,KAAKs+T,GAASxrV,OAAQwrV,GAASxrV,OAAQwrV,GAASvrV,MAAOurV,GAASvrV,OAC/F3wC,GAASm5D,GAAYA,EAASyE,KAAKs+T,GAAShub,MAAOgub,GAAShub,MAAOgub,GAASrwa,IAAKqwa,GAASrwa,KAE1F8wa,GAAiB,CAAC7vP,EAAS4/M,EAAgBnlD,EAAUj6V,EAAM0sC,EAAIm/E,IAAa2oE,GAAM8qN,GAAeF,EAAgBnlD,EAAUj6V,GAAOs/Y,GAAeF,EAAgBnlD,EAAUvtT,IAAK,CAAC4iZ,EAAYC,IAC7LD,IAAeC,GAhnTM,EAACt1F,EAAUyiC,EAAOC,KAC3C,MAAMitD,EAAS1tD,GAAiBQ,EAAOziC,GACjC4vF,EAAS3tD,GAAiBS,EAAO1iC,GACvC,OAAOzqO,EAAco6T,IAAWA,IAAWC,CAAM,EA6mTlB2F,CAAmBv1F,EAAUq1F,EAAYC,GAC/DX,GAASvrV,MAAMm8F,EAAU8vP,EAAaC,GAEtC1jU,IAERkF,MAAMlF,GACH4jU,GAAiB,CAACC,EAAcC,IAAeD,EAAap/T,KAAKL,GAAQy/T,IAAgB,OARtEE,EAQ0FD,IAR5EP,GAAzBS,EAQuFH,KARvCN,GAAQQ,IAAcrzZ,GAAWszZ,KAAetzZ,GAAWqzZ,IAA5G,IAACC,EAAWD,CAQqG,IAOxHE,GAAqB,CAACtwP,EAAS3zE,IAC/B2zE,EACK3zE,EAASyE,KAAK42E,EAAQh3E,EAAS/iH,KAAMyhb,GAAShub,OAAQsvH,EAASE,KAAM82E,EAAQh3E,EAAS/iH,KAAMyhb,GAASvrV,OAAQ6sB,EAASE,MAEtHvE,EAASyE,KAAKJ,EAASE,KAAM82E,EAAQh3E,EAAS/iH,KAAMyhb,GAASxrV,QAAS8sB,EAASE,KAAM82E,EAAQh3E,EAAS/iH,KAAMyhb,GAASrwa,MAG1Hwxa,GAAiB,CAACvwP,EAAS4/M,EAAgBnlD,EAAUpsS,KACzD,MAAM7tD,EAAOw/Y,GAAkBhgN,EAAS3xI,GAClC6hY,EAAeP,GAAa/vC,EAAgBnlD,EAAUj6V,GAC5D,OAAOmvb,GAAa/vC,EAAgBnlD,EAAUj6V,GAAM0oE,KAAKknD,EAAMkgU,GAAoBtwP,IAAUpuE,SAAQ,IAhB1E,EAACouE,EAAS4/M,EAAgBnlD,EAAUy1F,EAAc7hY,KAC7E,MAAM7tD,EAAOw/Y,GAAkBhgN,EAAS3xI,GAGxC,OAFWixU,GAAat/L,EAASy6J,EAAUj6V,GAAMoB,IAAIwuH,EAAM4vR,GAAmBhgN,IAC1DlvE,MAAK,IAAMo/T,EAAatub,IAAIoxF,MAAU9lD,GAAMyiZ,GAAa/vC,EAAgBnlD,EAAUvtT,GAAItrC,IAAIwuH,EAAMy/T,GAAgB7vP,EAAS4/M,EAAgBnlD,EAAUj6V,EAAM0sC,IAAKrmC,OAAOupH,EAAM6/T,GAAgBC,MAChMrpb,OAAO6ob,GAAgB,EAYoEc,CAAqBxwP,EAAS4/M,EAAgBnlD,EAAUy1F,EAAc7hY,IAAK,EAMlLoiY,GAAU,CAACzwP,EAAS5qD,EAAW/mF,KACnC,MAAMpT,EAAQ+kJ,EAAU,GAAK,EAG7B,OAFA5qD,EAAU0kB,OAAO20N,GAAcpgU,EAAIwB,YAAaxB,EAAIvP,SAAW7D,GAAOyzU,WACtEt5O,EAAU+sP,SAASuuD,OAAO,OAAQ1wP,EAAU,UAAY,WAAY,SAC7D,CAAI,EAEP2wP,GAAa,CAAC3wP,EAAShrD,KAC3B,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SACvBvqH,EAAM2xI,EAAUyuL,GAAcI,aAAal1N,GAAO80N,GAAcG,eAAej1N,GACrF,QAZ4B3kB,IACrBxwH,EAAWwwH,EAAOI,UAAU+sP,SAASuuD,QAWvCE,CAAsB57S,KAEhBgrD,GAAWkqL,GAAe77T,GAC5BoiY,IAAQ,EAAMz7S,EAAOI,UAAW/mF,KAC7B2xI,IAAWoqL,GAAc/7T,KAC5BoiY,IAAQ,EAAOz7S,EAAOI,UAAW/mF,GAG1C,EAGF,IAAIwiY,IACH,SAAUA,GACTA,EAAUA,EAAc,GAAI,GAAK,KACjCA,EAAUA,EAAiB,MAAI,GAAK,QACpCA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAe,IAAI,GAAK,KACpC,CALA,CAKEA,KAAcA,GAAY,CAAC,IAC7B,MAAMntY,GAAO,CAACuO,EAAW/D,IAAc+D,IAAc8rU,GAAWkB,UAAYxqX,GAAQy5C,GAAaA,EAC3F4iY,GAAS,CAAC7+X,EAAW64V,EAAaz8V,IAAQ4D,IAAc8rU,GAAWa,SAAWksB,EAAY1/V,KAAKiD,GAAOy8V,EAAY59V,KAAKmB,GACvH0iY,GAAe,CAAChnb,EAAOkoD,EAAW++X,EAAYx0C,IAC9Cn0C,GAAOm0C,EAAQ34N,QAAQ5xH,IAAc8rU,GAAWa,WAC3CiyD,GAAUI,IAC+B,IAAvCt0D,GAAcq0D,EAAYx0C,GAC5Bq0C,GAAUK,MAEVL,GAAUM,KAGfC,GAAoB,CAACz3U,EAAW1nD,EAAWloD,EAAO3I,KACtD,MAAM0pZ,EAAc9rB,GAAYj1X,GAChC,IAAIinb,EAAa5vb,EACjB,MAAM8sD,EAAY,GAClB,KAAO8iY,GAAY,CACjB,MAAMx0C,EAAUs0C,GAAO7+X,EAAW64V,EAAakmC,GAC/C,IAAKx0C,EACH,MAEF,GAAIn0C,GAAOm0C,EAAQ34N,SAAQ,IACzB,OAAI5xH,IAAc8rU,GAAWa,SACpB,CACL1wU,UAAWxK,GAAKuO,EAAW/D,GAAWrsD,OAAO,CAAC26Y,IAC9C60C,UAAWR,GAAUI,GACrBK,QAAS5gU,EAAS/iH,KAAK6uY,IAGlB,CACLtuV,UAAWxK,GAAKuO,EAAW/D,GAC3BmjY,UAAWR,GAAUI,GACrBK,QAAS5gU,EAAS/iH,KAAK6uY,IAI7B,GAAKA,EAAQn7L,YAAb,CAIA,GAAI1nG,EAAUq3U,EAAYx0C,GAAU,CAClC,MAAM60C,EAAYN,GAAahnb,EAAOkoD,EAAW++X,EAAYx0C,GAC7D,MAAO,CACLtuV,UAAWxK,GAAKuO,EAAW/D,GAC3BmjY,YACAC,QAAS5gU,EAAS/iH,KAAK6uY,GAE3B,CACAtuV,EAAUlrD,KAAKw5Y,GACfw0C,EAAax0C,CAVb,MAFEw0C,EAAax0C,CAajB,CACA,MAAO,CACLtuV,UAAWxK,GAAKuO,EAAW/D,GAC3BmjY,UAAWR,GAAUU,IACrBD,QAAS5gU,EAASE,OACnB,EAEG4gU,GAA2B,CAACv/X,EAAWw/X,EAAwB1nb,EAAO3I,IAAUqwb,EAAuB1nb,EAAO3I,GAAOkwb,QAAQ1vb,KAAIysD,IACrI,MAAMH,EAAYujY,EAAuB1nb,EAAOskD,GAAKH,UACrD,OAAO+D,IAAc8rU,GAAWkB,UAAY/wU,EAAUrsD,OAAOwsD,GAAO,CAACA,GAAKxsD,OAAOqsD,EAAU,IAC1FqjE,MAAM,IACHmgU,GAAyC,CAACxjY,EAAWnjC,IAAMmoG,EAAMhlE,GAAW,CAACoI,EAAKmgK,IAAWngK,EAAIw6D,MAAK,IAAMJ,EAAS/iH,KAAK8oN,KAAS4mL,GAAWroN,GAAM90K,GAAKm9X,EAAQlrO,kBAAmBjyJ,GAAKu2M,EAAOtkD,mBAAmB,CAACw/Q,EAAUC,KAClO,MAAMC,EAAWvhb,KAAK8b,IAAIrB,EAAI4ma,EAASjxb,MAEvC,OADgB4P,KAAK8b,IAAIrB,EAAI6ma,EAAQlxb,OACnBmxb,EAAWp7N,EAAS4mL,CAAO,IAC5C5rR,GAAGn7D,MAAOo6D,EAASE,QAChBkhU,GAAgC,CAAC5jY,EAAWG,IAAQnuC,GAAKmuC,EAAI8jH,kBAAkBjpG,MAAK6oX,GAAcL,GAAuCxjY,EAAW6jY,EAAWrxb,QAC/Jsxb,GAAgC5hU,EAAMghU,GAAmB3iE,GAAchsC,SAAU,GACjFwvG,GAA4B7hU,EAAMghU,GAAmB3iE,GAAc/rC,QAAS,GAC5EwvG,GAAoB9hU,EAAMohU,IAA2B,EAAGQ,IACxDG,GAAoB/hU,EAAMohU,GAA0B,EAAGS,IACvDG,GAAgB,CAACrob,EAAOskD,IAAQ2jY,GAA8Bjob,EAAOskD,GAAKijY,QAAQpgU,SAClFmhU,GAAe,CAACtob,EAAOskD,IAAQ4jY,GAA0Blob,EAAOskD,GAAKijY,QAAQpgU,SAG7EohU,GAA0B,CAACvob,EAAOskD,IAAQyjY,GAA8BI,GAAkBnob,EAAOskD,GAAMA,GACvGkkY,GAA0B,CAACxob,EAAOskD,IAAQyjY,GAA8BK,GAAkBpob,EAAOskD,GAAMA,GAEvGmkY,GAA2BhqF,GAC3BiqF,GAAuB,CAAChlE,EAAYv+T,IAAY5+C,KAAK8b,IAAIqhW,EAAW/sX,KAAOwuD,GAC3EwjY,GAAwB,CAACjlE,EAAYv+T,IAAY5+C,KAAK8b,IAAIqhW,EAAW9sX,MAAQuuD,GAE7EyjY,GAAwB,CAACjlE,EAAax+T,IAAYxtD,GAAOgsX,GAAa,CAACklE,EAAenlE,KAC1F,MAAMolE,EAAcvib,KAAKyW,IAAI0ra,GAAqBG,EAAe1jY,GAAUwjY,GAAsBE,EAAe1jY,IAC1G4jY,EAAcxib,KAAKyW,IAAI0ra,GAAqBhlE,EAAYv+T,GAAUwjY,GAAsBjlE,EAAYv+T,IAC1G,OAAI4jY,IAAgBD,GAJW5rT,GAIqBwmP,EAJG,SAIY+kE,GAAyB/kE,EAAWzhX,OAGnG8mb,EAAcD,EAFTplE,EAKFmlE,CAAa,IAGhBG,GAAqB/mb,IACzB,MAAMgnb,EAAkBtlE,GACfxrB,EAAMwrB,GAAaxqU,IACxB,MAAMuqU,EAAar0P,GAAQl2E,GAE3B,OADAuqU,EAAWzhX,KAAOA,EACXyhX,CAAU,IAGrB,GAAI/lB,GAAY17V,GACd,OAAOgnb,EAAgBhnb,EAAKmmK,kBACvB,GAAI81L,GAASj8V,GAAO,CACzB,MAAM2tJ,EAAM3tJ,EAAKgiD,cAAc03G,cAG/B,OAFA/L,EAAIK,SAAShuJ,EAAM,GACnB2tJ,EAAIM,OAAOjuJ,EAAMA,EAAK6G,KAAKxC,QACpB2ib,EAAgBr5R,EAAIwY,iBAC7B,CACE,MAAO,EACT,EAEIA,GAAiBpmK,GAASq8L,GAAOr8L,EAAOgnb,IAE9C,IAAIE,IACH,SAAUA,GACTA,EAAWA,EAAe,IAAK,GAAK,KACpCA,EAAWA,EAAiB,KAAI,GAAK,MACvC,CAHA,CAGEA,KAAeA,GAAa,CAAC,IAC/B,MAQMC,GAAY,CAACjhY,EAAWkhY,EAAWC,EAAYt3Y,EAAM0gV,EAAax0R,KACtE,IAAI7jD,EAAO,EACX,MAAMtgC,EAAS,GACTrkB,EAAMwM,IACV,IAAI0hX,EAAcv7M,GAAe,CAACnmK,KACf,IAAfimD,IACFy7T,EAAcA,EAAYj5W,WAE5B,IAAK,IAAIqR,EAAI,EAAGA,EAAI4nW,EAAYr9W,OAAQyV,IAAK,CAC3C,MAAM2nW,EAAaC,EAAY5nW,GAC/B,IAAIsta,EAAW3lE,EAAY4lE,GAA3B,CAOA,GAJIxva,EAAOxT,OAAS,GAAK8ib,EAAU1lE,EAAYx6O,GAAOpvH,KACpDsgC,IAEFspU,EAAWtpU,KAAOA,EACdq4U,EAAY/O,GACd,OAAO,EAET5pW,EAAO7gB,KAAKyqX,EARZ,CASF,CACA,OAAO,CAAK,EAER4lE,EAAmBpgT,GAAOjrC,EAAcmqE,kBAC9C,IAAKkhR,EACH,OAAOxva,EAET,MAAM7X,EAAOg8F,EAAc67E,UAK3B,OAJI73K,IACFxM,EAAIwM,GAtCU,EAACimD,EAAWnW,EAAM0gV,EAAaxwX,KAC/C,IAAIm2P,EAAcn2P,EAClB,KAAOm2P,EAAco6H,GAASp6H,EAAalwM,EAAWs6T,GAA4BzwU,IAChF,GAAI0gV,EAAYr6H,GACd,MAEJ,EAiCE9uI,CAAUphE,EAAWnW,EAAMt8C,EAAKwM,IAE3B6X,CAAM,EAITyva,GAAUljU,EAAM8iU,GAAWD,GAAWM,GAAItoE,GAAWE,IACrDqoE,GAAYpjU,EAAM8iU,GAAWD,GAAWQ,KAAMtoE,GAAWF,IACzDyoE,GAAoB1rV,GACjBirC,GAAOjrC,EAAcmqE,kBA2CxBwhR,GAAcC,GAAcnmE,GAhDV,EAACmmE,EAAYnmE,IAAeA,EAAWtpU,KAAOyvY,EAgDtBC,CAAgBD,EAAYnmE,GACtEqmE,GAASF,GAAcnmE,GAhDR,EAACmmE,EAAYnmE,IAAeA,EAAWtpU,OAASyvY,EAgD1BG,CAAaH,EAAYnmE,GAE9DumE,GAAc,CAACh/S,EAAQ2kB,KAC3B3kB,EAAOI,UAAU0kB,OAAOH,GACxBw3O,GAAoBn8P,EAAQA,EAAOI,UAAUwjC,SAAS,EAElDq7Q,GAAsB,CAACj/S,EAAQ/hG,EAAO20I,IAAmBl3D,EAAS/iH,KAAKw9a,GAAiBn2S,EAAQ/hG,EAAO20I,IACvGssQ,GAAmB,CAACl/S,EAAQ/iF,EAAWhf,EAAOkhZ,EAAUC,EAASp/T,KACrE,MAAM2zP,EAAW12T,IAAc8rU,GAAWa,SACpCksB,EAAc9rB,GAAYhqP,EAAO5tC,WACjC4kV,EAAe57T,EAAMwtQ,GAAwBjV,EAAWmiC,EAAY1/V,KAAO0/V,EAAY59V,MACvF++X,EAAatjE,EAAWwrE,EAAWC,EACzC,IAAKnhZ,EAAMo0H,UAAW,CACpB,MAAMr7J,EAAOu/W,GAAgBt4U,GAC7B,GAAI+hF,EAAUhpH,GACZ,OAAOi/a,GAAUh5X,EAAW+iF,EAAQhpI,EAAMimD,IAAc8rU,GAAWkB,WAAW,GACzE,GAAIstD,GAAoBv3S,GAAS,CACtC,MAAMq6P,EAAWp8V,EAAMw5I,aAEvB,OADA4iN,EAASnwO,SAASjtG,IAAc8rU,GAAWkB,WACpCvuQ,EAASlwH,KAAK6uY,EACvB,CACF,CACA,MAAMrnS,EAAgBy1R,GAA2BxrU,EAAW+iF,EAAO5tC,UAAWn0D,GAC9E,GAAIg5Y,EAAWjkV,GACb,OAAO6xD,GAAW7kB,EAAQhtC,EAAc67E,SAAS8kM,IAEnD,IAAIujE,EAAoBF,EAAahkV,GACrC,MAAMqsV,EAA0BzpE,GAA6B33U,GAC7D,IAAKi5Y,EACH,OAAOmI,EAA0B3jU,EAAS/iH,KAAKslC,GAASy9E,EAASE,OAInE,GAFEs7T,EAAoBlsC,GAAkBr3B,EAAUujE,GAE9CD,EAAWC,GACb,OAAOjB,GAAUh5X,EAAW+iF,EAAQk3S,EAAkBroQ,SAAS8kM,GAAWA,GAAU,GAEtF,MAAMgjE,EAAoBK,EAAaE,GACvC,OAAIP,GAAqBM,EAAWN,IAC9B9tD,GAAsBquD,EAAmBP,GACpCV,GAAUh5X,EAAW+iF,EAAQ22S,EAAkB9nQ,SAAS8kM,GAAWA,GAAU,GAGpF0rE,EACKJ,GAAoBj/S,EAAQk3S,EAAkBx9D,WAAW,GAE3Dh+P,EAASE,MAAM,EAElB0jU,GAAiB,CAACt/S,EAAQ/iF,EAAWhf,EAAOkhZ,EAAUC,EAASp/T,KACnE,MAAMhtB,EAAgBy1R,GAA2BxrU,EAAW+iF,EAAO5tC,UAAWn0D,GACxEshZ,EAAkBthT,GAAOjrC,EAAcmqE,kBACvCw2M,EAAW12T,IAAcghY,GAAWQ,KACpC33Y,EAAOk5F,EAAO5tC,UACpB,IAAKmtV,EACH,OAAO7jU,EAASE,OAElB,GAAI27T,GAAoBv3S,GAAS,CAC/B,MAAMhtC,EAAgB2gR,EAAW8F,GAAcI,aAAa57U,GAASw7U,GAAcG,eAAe37U,GAElG,OADsB01U,EAAqC4pE,GAA1BD,IACbx2Y,EAAMksD,GAAe4pB,SAAQ,IAAMlB,EAASlwH,KAAKwnG,KAAgBpmG,KAAIysD,GAAOA,EAAIqgU,WACtG,CACA,MACM8lE,GADW7rE,EAAW6qE,GAAYF,IACTx3Y,EAAM63Y,GAAY,GAAI3rV,GAC/CysV,EAAoBpyF,EAASmyF,EAAeV,GAAO,IACnD5kY,EAAUqlY,EAAgB7zb,KAC1Bg0b,EAAe/B,GAAsB8B,EAAmBvlY,GAC9D,GAAIwlY,GAAgB1/T,EAAU0/T,EAAa1ob,MAAO,CAChD,MAAM2ob,EAAQrkb,KAAK8b,IAAI8iC,EAAUwlY,EAAah0b,MACxCk0b,EAAQtkb,KAAK8b,IAAI8iC,EAAUwlY,EAAa/zb,OAC9C,OAAOsqb,GAAUh5X,EAAW+iF,EAAQ0/S,EAAa1ob,KAAM2ob,EAAQC,GAAO,EACxE,CACA,IAAIzyL,EAQJ,GANEA,EADEgyL,EAASnsV,GACGA,EAAc67E,UACnBuwQ,EAAQpsV,GACHA,EAAc67E,SAAQ,GAEtB0nM,GAAgBt4U,GAE5BkvN,EAAa,CACf,MAAM0yL,EAzHa,EAAC5iY,EAAWnW,EAAM0gV,EAAaxwX,KACpD,MAAM8+Y,EAAc9rB,GAAYljV,GAChC,IAAImnJ,EACA6xP,EACA3B,EACAnrV,EACJ,MAAMnkF,EAAS,GACf,IAAIsgC,EAAO,EACO,IAAd8N,GACFgxI,EAAS6nN,EAAY1/V,KACrB0pY,EAAY3pE,GACZgoE,EAAYloE,GACZjjR,EAAgBymR,GAAc5qR,MAAM73F,KAEpCi3L,EAAS6nN,EAAY59V,KACrB4nY,EAAY7pE,GACZkoE,EAAYhoE,GACZnjR,EAAgBymR,GAAc7qR,OAAO53F,IAEvC,MAAMqnb,EAAmBK,GAAkB1rV,GAC3C,EAAG,CACD,IAAKA,EAAcq5G,YACjB,SAEF,MAAMn+J,EAAOwwY,GAAkB1rV,GAC/B,GAAImrV,EAAUjwY,EAAMmwY,GAClB,SAEExva,EAAOxT,OAAS,GAAKykb,EAAU5xY,EAAM+vF,GAAOpvH,KAC9CsgC,IAEF,MAAMspU,EAAar0P,GAAQl2E,GAG3B,GAFAuqU,EAAWpiW,SAAW28E,EACtBylR,EAAWtpU,KAAOA,EACdq4U,EAAY/O,GACd,OAAO5pW,EAETA,EAAO7gB,KAAKyqX,EACd,OAASzlR,EAAgBi7F,EAAOj7F,IAChC,OAAOnkF,CAAM,EAkFYkxa,CAAe9iY,EAAWnW,EAAM63Y,GAAY,GAAIxxL,GACvE,IAAI6yL,EAAsBrC,GAAsBtwF,EAASwyF,EAAgBf,GAAO,IAAK5kY,GACrF,GAAI8lY,EACF,OAAOf,GAAoBj/S,EAAQggT,EAAoB3pa,SAASqjW,WAAW,GAG7E,GADAsmE,EAAsB/hT,GAAOovN,EAASwyF,EAAgBf,GAAO,KACzDkB,EACF,OAAOf,GAAoBj/S,EAAQggT,EAAoB3pa,SAASqjW,WAAW,EAE/E,CACA,OAAiC,IAA7B+lE,EAAkBpkb,OACb4kb,GAAgBjgT,EAAQ2zO,GAAU9hX,OAAO8hX,EAAWyrE,EAAUD,GAAUvyb,KAAIysD,GAAO88X,GAAiBn2S,EAAQ3mF,EAAIqgU,WAAW,KAE7Hh+P,EAASE,MAAM,EAElBqkU,GAAkB,CAACjgT,EAAQgrD,KAC/B,MAAMrmC,EAAM3kB,EAAOI,UAAUwjC,SACvBp4K,EAAOw/L,EAAUyuL,GAAcI,aAAal1N,GAAO80N,GAAcG,eAAej1N,GAChFjsG,GAxicgB1hD,EAwicMxL,EAAKqvD,YAxicL4qS,EAwickBzlN,EAAO5tC,UAric9Cy+P,GAAW9vO,GAAaS,QAAQxqH,IAFtBA,GAAQ2vX,GAAwB3vX,EAAK2oH,OACvC3oH,GAAQA,EAAK2oH,MAAQ8lO,IAC4B74V,KAAIi8H,GAAOA,EAAIlJ,MAAKpD,MAAMkpO,IAHrE,IAACzuV,EAAMyuV,EAyic5B,GAAIz6J,EAAS,CACX,MAAMk1P,EAAWjD,GAA0BvkY,EAAMltD,GACjD,OAAOkzH,GAAOwhU,EAAShnY,UACzB,CAAO,CACL,MAAMgnY,EAAWlD,GAA8BtkY,EAAMltD,GACrD,OAAO0f,GAAKg1a,EAAShnY,UACvB,GAEIinY,GAAuB,CAACngT,EAAQgrD,EAASivL,IAAsBgmE,GAAgBjgT,EAAQgrD,GAASn5L,OAAOooX,GAAmB59P,QAAOhjE,IACrI2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,YACrB,KAGH0mE,GAAmB,CAACpgT,EAAQ3mF,KAChC,MAAMsrG,EAAM3kB,EAAOrgB,IAAIilC,YACvBD,EAAIK,SAAS3rG,EAAIwB,YAAaxB,EAAIvP,UAClC66G,EAAIM,OAAO5rG,EAAIwB,YAAaxB,EAAIvP,UAChCk2F,EAAOI,UAAU0kB,OAAOH,EAAI,EAExB07R,GAAc,CAACjvQ,EAAOvoD,KACtBuoD,EACFvoD,EAAIpjH,aAAa,oBAAqB,mBAEtCojH,EAAInjH,gBAAgB,oBACtB,EAEI46a,GAAsB,CAACtgT,EAAQrwC,EAAO0nB,IAAa4iU,GAAYtqV,EAAO0nB,GAAUzqH,KAAIysD,IACxF+mY,GAAiBpgT,EAAQ3mF,GAClBg+D,KAWHkpU,GAAe,CAACvgT,EAAQrwC,EAAOq7F,KACnC,MAAMy6J,EAAWzlN,EAAO5tC,UAClB5mG,EAXqB,EAACyyC,EAAO6I,EAAMkkJ,KACzC,MAAM5+L,EAAQqtX,GAAcG,eAAe37U,GAC3C,GAAIA,EAAMo0H,UACR,OAAOjmK,EACF,CACL,MAAM2d,EAAM0vW,GAAcI,aAAa57U,GACvC,OAAO+sJ,EAAU4/L,GAAa9jV,EAAM/8B,GAAKwyG,MAAMxyG,GAAO4gX,GAAa7jV,EAAM16C,GAAOmwH,MAAMnwH,EACxF,GAIao0b,CAAqBxgT,EAAOI,UAAUwjC,SAAU6hL,EAAUz6J,GACjEy1P,EAAmBrlU,EAAMwvR,GAAgB5qQ,GAE/C,OADiBu7S,GAAevwP,EAASy1P,EAAkBh7F,EAAUj6V,GACrD0oE,MAAKmjD,GAAYipU,GAAoBtgT,EAAQrwC,EAAO0nB,IAAU,EAS1EqpU,GAA2B,CAAC1gT,EAAQrwC,KACxC,MAAMgxV,EAAahxV,EAAMjiG,MACzB,GAAIsyI,EAAOI,UAAU+8C,gBAAkBn9C,EAAOy4P,WAAakoD,EAAY,CACrE,MAAMtnY,EAAMogU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UACtD61M,GAAcO,eAAe3gU,KAjhUpBA,IAAO67T,GAAe77T,IAAQ+7T,GAAc/7T,GAihUfunY,CAASvnY,KACjD+mY,GAAiBpgT,EAAQglP,GAAoB27D,EAAYtnY,IACzDs2C,EAAM/hG,IAAI,MAEd,GAWIizb,GAAS,CAAC7gT,EAAQrwC,EAAOq7F,MAAYw1L,GAA0BxgP,IAAUugT,GAAavgT,EAAQrwC,EAAOq7F,GAAS/uE,SAC9G6kU,GAAW,CAAC91P,EAAShrD,EAAQ+gT,MAAWvgE,GAA0BxgP,IAAU27S,GAAW3wP,EAAShrD,GAChGghT,GAAqBhhT,IACzB,MAAMrwC,EAAQiqE,GAAK,MACb6mR,EAAmBrlU,EAAMwvR,GAAgB5qQ,GAQ/C,OAPAA,EAAO8K,GAAG,cAAc13I,IAClBotX,GAA0BxgP,KAhCZ,EAAC4qQ,EAAgBjrR,EAAKqkE,KAC1C,MAAMi9P,EAAmB/zF,EAAM/mO,GAAYpF,GAAaS,QAAQ7B,EAAIyhE,WAAY,2CAA2ChuL,GAAKA,EAAEusH,MAC5HuhU,EAAkB7zF,EAAS4zF,EAAkBr2C,GAC7Cu2C,EAAgB9zF,EAASrpK,EAAM4mN,GACrCz9C,EAAOx4O,GAAWusU,EAAiBC,GAAgB/lU,EAAMilU,IAAa,IACtElzF,EAAOx4O,GAAWwsU,EAAeD,GAAkB9lU,EAAMilU,IAAa,GAAM,EA4BxEe,CAAcX,EAAkBzgT,EAAOrgB,IAAKvsH,EAAEyvH,SAC9C69T,GAAyB1gT,EAAQrwC,GAjBP,EAACi7S,EAAgB5qQ,EAAQrwC,EAAOq0F,KAC9D,GAAIhkD,EAAOI,UAAU+8C,cAAe,CAClC,MAAMkkQ,EAAUh0F,EAASrpK,EAAM4mN,GAC/Bz9C,EAAOk0F,GAASC,IACd,MAAMjoY,EAAMogU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC1D+2Q,GAAa/vC,EAAgB5qQ,EAAO5tC,UAAW/4C,GAAK6a,MAAKmjD,GAAYipU,GAAoBtgT,EAAQrwC,EAAO0nB,IAAU,GAEtH,GAWIkqU,CAAwBd,EAAkBzgT,EAAQrwC,EAAOv8F,EAAEyvH,SAC7D,IAEKlzB,CAAK,EAER6xV,GAAepmU,EAAM0lU,IAAU,GAC/BW,GAAermU,EAAM0lU,IAAU,GAC/BY,GAAuB,CAAC1hT,EAAQgrD,EAASr7F,KAC7C,GAAI6wR,GAA0BxgP,GAAS,CACrC,MAAM2hT,EAAY1B,GAAgBjgT,EAAQgrD,GAAStuE,YAAW,KAC5D,MAAMioC,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAOonB,EAAUyuL,GAAcI,aAAal1N,GAAO80N,GAAcG,eAAej1N,EAAI,IAEtF,OAAOg2R,GAAav/T,EAAMwvR,GAAgB5qQ,GAASA,EAAO5tC,UAAWuvV,GAAWtlU,QAAOo6E,IACrF,MAAMmrP,EAAa5jW,GAAQy4G,GAC3B,OAAOwjP,GAAYtqV,EAAOiyV,GAAYvlU,QAAOhjE,IAC3C+mY,GAAiBpgT,EAAQ3mF,IAClB,IACP,GAEN,CACE,OAAO,CACT,EAcIwoY,GAAmB,CAAC7hT,EAAQrwC,IAAU0nB,GAAY4iU,GAAYtqV,EAAO0nB,GAAUzqH,KAAIysD,GAAO,IAAM+mY,GAAiBpgT,EAAQ3mF,KACzHyoY,GAAe,CAAC9hT,EAAQrwC,EAAOnkG,EAAM0sC,KACzC,MAAMutT,EAAWzlN,EAAO5tC,UAClBquV,EAAmBrlU,EAAMwvR,GAAgB5qQ,GAC/CA,EAAOoqB,YAAYjb,QAAO,KACxBnP,EAAOI,UAAU0kB,OAhBM,EAACt5J,EAAM0sC,KAChC,MAAM+F,EAAQnvC,SAAS4hK,cAGvB,OAFAzyH,EAAM+mH,SAASx5J,EAAKqvD,YAAarvD,EAAKs+C,UACtC7L,EAAMgnH,OAAO/sH,EAAG2iB,YAAa3iB,EAAG4R,UACzB7L,CAAK,EAYc8jZ,CAAmBv2b,EAAM0sC,IACjDmzW,GAAwBrrQ,GACxB26S,GAAa8F,EAAkBh7F,EAAUg0B,GAAcG,eAAe55O,EAAOI,UAAUwjC,WAAWh3K,IAAIsxD,IAAQgW,KAAK2tX,GAAiB7hT,EAAQrwC,IAAQt0D,KAAKnwC,EAAK,IAEhK80I,EAAO0uB,aAAa,EAMhBszR,GAA2B,CAAChiT,EAAQrwC,EAAOq7F,EAASx/L,KACxD,MAAMi6V,EALQ,EAACA,EAAUzuV,KACzB,MAAMkpI,EAAcwnP,GAAiB1wX,EAAMyuV,GAC3C,OAAOvlN,GAA4BulN,CAAQ,EAG1Bw8F,CAAQjiT,EAAO5tC,UAAW5mG,EAAKqvD,aAC1C4lY,EAAmBrlU,EAAMwvR,GAAgB5qQ,GACzCk7S,EAAeP,GAAa8F,EAAkBh7F,EAAUj6V,GAQ9D,OAPiB0vb,EAAahnX,MAAKmjD,GAC7B2zE,EACK3zE,EAASyE,KAAK9uG,EAAS0uG,EAAS/iH,KAAKulD,GAAOm5D,KAAaqE,EAASE,KAAM5uG,EAAS0uG,EAAS/iH,KAAKqlF,GAAQq5B,KAAaqE,EAASE,MAE7HvE,EAASyE,KAAKJ,EAASE,KAAM5uG,EAAS0uG,EAAS/iH,KAAKqlF,GAAQq5B,KAAaqE,EAASE,KAAM5uG,EAAS0uG,EAAS/iH,KAAKulD,GAAOm5D,QAGjHzqH,IAAIi1b,GAAiB7hT,EAAQrwC,IAAQ+sB,YAAW,KAC9D,MAAMwlU,EAAa7oR,GAAS2xB,EAASy6J,EAAUj6V,GACzC2vb,EAAa+G,EAAWhuX,MAAK7a,GAAOshY,GAAa8F,EAAkBh7F,EAAUpsS,KACnF,OAAO2mI,GAAMk7P,EAAcC,GAAY,IAAMrwC,GAAe21C,EAAkBh7F,EAAUj6V,GAAM0oE,MAAK20D,GAlCjEA,IAAOm3D,GAAM6qM,GAAgBhiQ,GAAMiiQ,GAAejiQ,IAAM,CAACm/Q,EAAUK,KACvG,MAAM0D,EAAqBf,IAAkB,EAAMhD,GAC7CgE,EAAoBhB,IAAkB,EAAO3C,GACnD,OAAO1d,GAAa9hQ,EAAKkjR,GAAoBzvR,QAAOjjE,GAAOA,EAAIsgU,QAAQqyB,IAAmB,IACzFzvR,OAAM,GA+BC4lU,CAA8Bt5T,GACzBnN,EAAS/iH,MAAK,KACnBwxY,GAAgBnqQ,EAAQgrD,EAASjqE,GAAaS,QAAQqH,GAAK,IAGtDnN,EAASE,WAEhBc,YAAW,IAAMy+T,EAAWjnX,MAAK,IAAMguX,EAAWt1b,KAAIsrC,GACjD,KACD8yJ,EACF82P,GAAa9hT,EAAQrwC,EAAOnkG,EAAM0sC,GAElC4pZ,GAAa9hT,EAAQrwC,EAAOz3D,EAAI1sC,EAClC,OAEA,GACJ,EAEE42b,GAAoB,CAACpiT,EAAQrwC,EAAOq7F,KACxC,GAAIhrD,EAAOI,UAAU+8C,eAAiBqjM,GAA0BxgP,GAAS,CACvE,MAAMx0I,EAAOiuX,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC3D,OAAOo+Q,GAAyBhiT,EAAQrwC,EAAOq7F,EAASx/L,EAC1D,CACA,OAAOkwH,EAASE,MAAM,EAIlBymU,GAAkB,CAACriT,EAAQviB,KAC/B,MAAM+4L,EAAUz1L,GAAaS,QAAQwe,EAAO5tC,WACtCwmS,EAAW73Q,GAAaS,QAAQwe,EAAOI,UAAUC,YACjDxd,EAAU4iR,GAAe7M,EAAUpiF,GACzC,OAAO+2C,GAAY1qO,EAASpF,GAAM3B,KAAK9uG,EAAS61G,IAAUh3H,GAASg3H,EAAQtzH,MAAM,EAAG1D,IAAO,EAEvFy2b,GAAkBz5T,GAAgC,IAAzB6nO,GAAgB7nO,GACzC05T,GAAwCviT,GAAUqiT,GAAgBriT,GAAQnX,GAAOmX,EAAO5vI,OAAOkwI,QAAQnuI,GAAK02H,KARtFA,IAAO6nO,GAAgB7nO,GAAO,EAQiE25T,CAAoB35T,KAEzI45T,GAAiB,CAACziT,EAAQ0iT,KAC9B,MAAMC,EAAoBvnU,EAAMkiS,GAAiBt9Q,GACjD,OAAOozD,GAAOsvP,GAAe75T,GAAO85T,EAAkB95T,GAAO,CAACA,EAAIlJ,KAAO,IAAG,EAExEijU,GAAwB5iT,IAC5B,MAAM0iT,EANiB1iT,IAAUqiT,GAAgBriT,GAAQjkF,GAAMikF,EAAO5vI,OAAOkwI,QAAQnuI,GAAK4pD,MAMpE8mY,CAAiB7iT,GACvC,OAAOyiT,GAAeziT,EAAQ0iT,EAAc,EAWxCI,GAAgB,CAAC9iT,EAAQgrD,KAC7B,MAAM03P,EAAgBr1F,EAASk1F,GAAsCviT,GAASsiT,IAC9E,OAAO5jU,GAAOgkU,GAAexuX,MAAKzlE,IAChC,MAAMq9Y,EAAUryB,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC9D,OAAIioO,GAAgC7gN,EAAS8gN,EAASr9Y,EAAOkxH,OAAS6wQ,GAA0B/hY,GACvFitH,EAAS/iH,MAAK,IAdA,EAACqyL,EAAShrD,EAAQvxI,EAAQi0b,KACnD,MAAM5mC,EAAc2mC,GAAeziT,EAAQ0iT,GAC3C,GAA2B,IAAvB5mC,EAAYzgZ,OACd8uY,GAAgBnqQ,EAAQgrD,EAASv8L,OAC5B,CACL,MAAM4qD,EAAMgkW,GAAuB5uZ,EAAOkxH,IAAKm8R,GAC/C97Q,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,UAC9B,GAO+BqpE,CAAmB/3P,EAAShrD,EAAQvxI,EAAQi0b,KAEhEhnU,EAASE,MAClB,GACA,EAOEonU,GAA2B,CAAChjT,EAAQ87Q,KACxC,MAAMljB,EAAW54P,EAAOI,UAAUC,WAC5BhnF,EAPmB,EAAC2mF,EAAQnX,KAClC,MAAMiuO,EAAYjuO,EAAI/lH,cACtB,OAAOuwV,GAAOxqO,KAAShO,EAAOi8O,IAAc92N,EAAOrgB,IAAI4uC,QAAQuoM,EAAU,EAK7DmsF,CAAmBjjT,EAAQ44P,KAHpB/vQ,EAG8C+vQ,EAHvCpI,GAA0BzvQ,GAAaS,QAAQqH,KAGIw0R,GAAuBzkB,EAAUkjB,GA/jR7E,EAACn3P,EAAKm3P,KACvC,MAAM,eAACrmC,EAAc,cAAEziR,GAAiBmqT,GAAkBrB,GAE1D,OADAn3P,EAAIy1N,WAAW3E,EAAe91P,KACvB3sB,CAAa,EA4jRyGkwV,CAA2BljT,EAAOI,UAAUwjC,SAAUk4O,GAHhKjzR,MAInBmX,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,UAAU,EAQlCypE,GAA6Bx+R,GAAOsuM,GAAStuM,EAAIiN,gBAejDwxR,GAAiCz+R,GATAA,KACrC,MAAM0+R,EAAc1+R,EAAIiN,eAAelqI,WACjC47Z,EAAY3+R,EAAImN,aAAapqI,WACnC,OAAQmzF,EAAOwoU,KAAiBxoU,EAAOyoU,IAAcD,EAAYE,YAAYD,EAAU,EAM3CE,CAA+B7+R,IAJxCA,KACnC,MAAMmN,EAAenN,EAAImN,aACzB,OAAOnN,EAAIoN,aAAekhM,GAASnhM,GAAgBA,EAAaz2J,OAASy2J,EAAa1wC,WAAW/lH,OAAO,EAErBoob,CAA6B9+R,GAG5G++R,GAA8B1jT,IAClC,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SAC7B,MAnBwCjf,IAA2B,IAApBA,EAAIkN,aAAqBsxR,GAA2Bx+R,GAmB5Fg/R,CAAkCh/R,IAlBH,EAAC3kB,EAAQ2kB,KAC/C,MAAM0+R,EAAc1+R,EAAIiN,eAAe9uJ,cACvC,OAAQ+3G,EAAOwoU,IAAgB/lC,GAAgBt9Q,EAAQjf,GAAaS,QAAQ6hU,GAAa,EAgBxCO,CAAgC5jT,EAAQ2kB,IAH7CA,IAAOy+R,GAA+Bz+R,IAD1CA,KAAQA,EAAImN,aAAayxR,YAAY5+R,EAAI0mC,yBACSw4P,CAAkCl/R,GAG3Bm/R,CAAsCn/R,EAAI,EAEvIo/R,GAAgB/jT,IACpB,GAAI0jT,GAA4B1jT,GAAS,CACvC,MAAM87Q,EAAc8mC,GAAsB5iT,GAC1C,OAAOtkB,EAAS/iH,MAAK,KACnB0yY,GAAwBrrQ,GAhCJ,EAACA,EAAQgkT,KACjC,MAAMC,EAAiBtvU,GAAWqvU,EAAepB,GAAsB5iT,IACnEikT,EAAe5ob,OAAS,GAC1B2nb,GAAyBhjT,EAAQikT,EACnC,EA6BIC,CAAkBlkT,EAAQ87Q,EAAY,GAE1C,CACE,OAAOpgS,EAASE,MAClB,EAEIuoU,GAAoB,CAACnkT,EAAQgrD,IAAYhrD,EAAOI,UAAU+8C,cAAgB2lQ,GAAc9iT,EAAQgrD,GAAW+4P,GAAc/jT,GAEzHokT,GAAgCpkT,IAAUqkT,OADhBx7T,EACuC9H,GAAaS,QAAQwe,EAAOI,UAAUC,YADxEjwI,EACqF4vI,EAAO5vI,OADjFo2H,GAAWqC,GAAK7xH,GAAQg0X,GAAYh0X,EAAK2oH,OAAM5jE,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,MAA1F,IAAC8sE,EAAKz4H,CACmG,EAKlIk0b,GAAetkT,IAJgBA,KACnC,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAOjf,EAAI0N,YAAc8wR,GAA2Bx+R,IAAQ3kB,EAAOrgB,IAAI4uC,QAAQ5J,EAAIiN,mBAAqBwyR,GAA8BpkT,EAAO,EAGzIukT,CAA6BvkT,IAC/BgjT,GAAyBhjT,EAAQ,KAE5B,GAGHwkT,GAAgB,CAACxkT,EAAQgrD,EAASx8L,IAClCwsH,EAAcxsH,GACTktH,EAAS/iH,MAAK,KACnBqnI,EAAO+3Q,oBAAoBugC,gBAC3BnuC,GAAgBnqQ,EAAQgrD,EAASjqE,GAAaS,QAAQhzH,GAAS,IAG1DktH,EAASE,OAiBd6oU,GAAoB,CAACzkT,EAAQgrD,IAAYhrD,EAAOI,UAAU+8C,cAd5C,EAACn9C,EAAQgrD,KAC3B,MAAM05P,EAAc15P,EAAUk6M,GAAgBC,GACxCloV,EAAY+tI,EAAU+9L,GAAWa,SAAWb,GAAWkB,UACvD6hB,EAAUrjB,GAA2BxrU,EAAW+iF,EAAO5tC,UAAW4tC,EAAOI,UAAUwjC,UACzF,OAAI8gR,EAAY54C,GACP04C,GAAcxkT,EAAQgrD,EAAS8gN,EAAQj9N,SAASmc,IAEhDtvE,EAASlwH,KAAKw/Y,GAAkBhgN,EAAS8gN,IAAUj6Y,QAAOwnD,GAAOqrY,EAAYrrY,IAAQwvU,GAAsBijB,EAASzyV,KAAM6a,MAAK7a,GAAOmrY,GAAcxkT,EAAQgrD,EAAS3xI,EAAIw1H,SAASmc,KAC3L,EAM8E25P,CAAY3kT,EAAQgrD,GAJhF,EAAChrD,EAAQgrD,KAC3B,MAAM4kN,EAAe5vQ,EAAOI,UAAUyuC,UACtC,OAAO8kL,GAAUi8C,GAAgB40C,GAAcxkT,EAAQgrD,EAAS4kN,GAAgBl0R,EAASE,MAAM,EAEci7T,CAAY72S,EAAQgrD,GAG7H45P,GAAmBz2b,GAASmgW,GAAgB,OAAVngW,QAA4B,IAAVA,EAAmBA,EAAQ,IAAIouH,MAAM,GACzFsoU,GAAqB,CAACC,EAAWt2b,KACbs2b,GAtqhBe,UAAf3yb,GAsqhBuB3D,GAAW,SAAW,YACtB,QAAhCgqI,GAAMhqI,EAAS,aAAyB,SAAW,SAoB9Du2b,GAAa/kT,IACjB,MAAMyyL,EAASuyH,GAAkBhlT,GACjC,OAAQA,EAAOhkH,KAAK+wJ,eAAiB0lJ,EAAOp3T,OAAS,GARhC,EAAC2kI,EAAQyyL,IAAWn2M,GAAOm2M,GAAQ7mI,IACxD,MAAMq5P,EAAkBJ,GAAmBrlE,GAAsBx/O,GAAS4rD,GACpEs5P,EAAcnjT,GAAO6pD,EAAOq5P,GAAiBr4b,IAAIg4b,IAAkBroU,MAAM,GAE/E,MAA2B,UADHyjB,EAAOrgB,IAAI4rE,mBAAmBK,EAAMjsE,MACtBulU,EAAc,CAAC,IAIKC,CAAenlT,EAAQyyL,GAAQ,EAErF2yH,GAAkBrpY,GAAM6hG,GAAO7hG,IAAOg4T,GAAah4T,GAEnDipY,GAAoBhlT,GAAUqtN,EAASvsO,GAAUkf,EAAOI,UAAUwjD,sBAAsB7nI,IAAOqpY,GAAgBrpY,KADvFA,IAAM7G,GAAO6G,GAAIsgE,OAAO+oU,IACuEC,CAAsBtpY,IA9BtHkkJ,GA8BwIlkJ,GA9BtH8sE,GAAO0qO,GAAwB1qO,EAAIlJ,MAAQ6zO,GAAyB3qO,EAAIlJ,OAAMtD,QAAOwM,GAAO0qO,GAAwB1qO,EAAIlJ,SA+BjKgiD,GAAS,CAAC3hC,EAAQmxD,KACtB,IAAIxyL,EAAI+/I,EACR,GAAI1e,EAAOhkH,KAAK+wJ,aACd,OAEF,MAAM,IAACptD,GAAOqgB,EACR6oD,EAAc42L,GAAez/O,GAC7BslT,EAAwG,QAA1F5mS,EAA8C,QAAxC//I,EAAK,YAAYqY,KAAK6xK,UAAiC,IAAPlqL,OAAgB,EAASA,EAAG,UAAuB,IAAP+/I,EAAgBA,EAAK,KACrI6mS,EAAcX,GAAiB/7P,GAC/Bi8P,EAAYtlE,GAAsBx/O,GACxCmtN,EAAO63F,GAAkBhlT,IAAS4rD,IAlCd,EAACjsE,EAAKwxE,EAAS2zP,EAAW32b,EAAOssB,EAAMjsB,KAC3D,MAAMy2b,EAAkBJ,GAAmBC,EAAW/jU,GAAaS,QAAQhzH,IACrEg8D,EAAco6X,GAAiBjlU,EAAI1jE,SAASztD,EAASy2b,IAC3D,GAAgB,YAAZ9zP,EAAuB,CACzB,MAAMv4I,EAAat9C,KAAKC,IAAI,EAAGivD,EAAcr8D,GAC7CwxH,EAAIliC,SAASjvF,EAASy2b,EAAiBrsY,EAAaA,EAAan+B,EAAO,GAC1E,KAAO,CACL,MAAMm+B,EAAa4R,EAAcr8D,EAAQssB,EACzCklG,EAAIliC,SAASjvF,EAASy2b,EAAiBrsY,EACzC,GA0BE4sY,CAAc7lU,EAAKwxE,EAAS2zP,EAAWS,EAAaD,EAAY15P,EAAMjsE,IAAI,GAC1E,EAGE8lU,GAAUzlT,GAAU2hC,GAAO3hC,EAAQ,WAEnC0lT,GAAoB1lT,IACxB,GAAIA,EAAOI,UAAU+8C,eAAiB4nQ,GAAW/kT,GAAS,CACxD,MAAMrgB,EAAMqgB,EAAOrgB,IACbglC,EAAM3kB,EAAOI,UAAUwjC,SACvBvqH,EAAMogU,GAAcG,eAAej1N,GACnCinC,EAAQjsE,EAAIwgB,UAAUwkB,EAAIiN,eAAgBjyC,EAAI2gB,SACpD,GAAc,OAAVsrD,GAAkBm6M,GAAiBhlR,GAAaS,QAAQoqE,GAAQvyI,EAAK2mF,EAAO5vI,QAC9E,OAAOsrH,EAAS/iH,MAAK,IAAM8sb,GAAQzlT,IAEvC,CACA,OAAOtkB,EAASE,MAAM,EAGlB+pU,GAAa,CAAC3lT,EAAQrwC,EAAOq7F,IAAYrsE,GAAQ,CACrD+mU,GACAjN,GACA1B,GACA,CAAC/2S,EAAQgrD,IAAYo3P,GAAkBpiT,EAAQrwC,EAAOq7F,GACtDsqP,GACArjC,GACAknC,GACAsL,GACA1O,GACAoO,GACAnL,KACC97Y,GAAQA,EAAK8iG,EAAQgrD,KAAUn5L,QAAO5C,GAAK+wI,EAAOI,UAAUme,eAkBzDqnS,GAAU,CAAC5lT,EAAQrwC,KACvBqwC,EAAOyvB,WAAW,UAAU,KAlBR,EAACzvB,EAAQrwC,KACdg2V,GAAW3lT,EAAQrwC,GAAO,GAClCmsB,MAAK,KACNkkB,EAAOI,UAAUme,eACnB8sP,GAAwBrrQ,GACxB0rQ,GAAc1rQ,GAChB,GACC90I,EAAK,EAYN26b,CAAc7lT,EAAQrwC,EAAM,IAE9BqwC,EAAOyvB,WAAW,iBAAiB,KAZR,EAACzvB,EAAQrwC,KACrBg2V,GAAW3lT,EAAQrwC,GAAO,GAClCmsB,MAAK,KACNkkB,EAAOI,UAAUme,cACnB+sP,GAA+BtrQ,EACjC,GACC90I,EAAK,EAON46b,CAAqB9lT,EAAQrwC,EAAM,GACnC,EAKEukL,GAAWtpR,QACOgF,IAAlBhF,EAAMgvD,SAAkD,IAAzBhvD,EAAMgvD,QAAQv+C,OACxCqgH,EAASE,OAEXF,EAAS/iH,KAAK/N,EAAMgvD,QAAQ,IAO/BmsY,GAAU/lT,IACd,MAAMo0I,EAAYl7E,KACZm7E,EAAiBz6G,IAAK,GACtBosR,EAAoBtlZ,IAAKttC,IAC7B4sI,EAAO7xH,SAAS,YAAa,IACxB/a,EACHkD,KAAM,cAER+9Q,EAAezmR,KAAI,EAAK,GApBJ,KAsBtBoyI,EAAO8K,GAAG,cAAc13I,IACtB8gR,GAAS9gR,GAAGioC,MAAKk5O,IACfyxK,EAAkBvkY,SAClB,MAAM5jD,EAAO,CACXkY,EAAGw+P,EAAMr6N,QACTvkC,EAAG4+P,EAAMp6N,QACT1rD,OAAQ2E,EAAE3E,QAEZu3b,EAAkB1/Q,SAASlzK,GAC3BihR,EAAezmR,KAAI,GACnBwmR,EAAUxmR,IAAIiQ,EAAK,GACnB,IACD,GACHmiI,EAAO8K,GAAG,aAAa13I,IACrB4yb,EAAkBvkY,SAClByyN,GAAS9gR,GAAGioC,MAAKk5O,IACfH,EAAUtpI,IAAGjtI,IA/BC,EAAC02Q,EAAO12Q,KAC1B,MAAM22Q,EAAQl5Q,KAAK8b,IAAIm9P,EAAMr6N,QAAUr8C,EAAKkY,GACtC0+P,EAAQn5Q,KAAK8b,IAAIm9P,EAAMp6N,QAAUt8C,EAAK8X,GAC5C,OAAO6+P,EAXgB,GAWYC,EAXZ,CAWoC,EA6BjDC,CAAYH,EAAO12Q,KACrBu2Q,EAAUl3Q,QACVm3Q,EAAezmR,KAAI,GACnBoyI,EAAO7xH,SAAS,mBAClB,GACA,GACF,IACD,GACH6xH,EAAO8K,GAAG,wBAAwB13I,IAChC4yb,EAAkBvkY,SACH,gBAAXruD,EAAEkD,MAGN89Q,EAAU1mR,MAAMmE,QAAOgM,GAAQA,EAAKpP,OAAO80b,YAAYnwb,EAAE3E,UAAS4sC,MAAK,KACjEg5O,EAAe3mR,MACjB0F,EAAE9E,iBAEF0xI,EAAO7xH,SAAS,MAAO,IAClB/a,EACHkD,KAAM,OAEV,GACA,IACD,EAAK,EAGJ2vb,GAAiB,CAACllQ,EAAe/pL,IAAS08L,GAAM3S,EAAe/pL,EAAK4oH,UACpEsmU,GAAgB,CAAC91b,EAAQ4G,MACzBi8V,GAASj8V,MAEF07V,GAAY17V,MACbivb,GAAe71b,EAAOsxL,mBAAoB1qL,KAAU01X,GAAiB11X,KAAUogW,GAAmBhnW,EAAQ4G,KAAUw+V,GAAqBx+V,IAU/Imvb,GAAuB,CAACplQ,EAAe/pL,KAC3C,GAAIi8V,GAASj8V,GAAO,CAClB,GAAyB,IAArBA,EAAK6G,KAAKxC,OACZ,OAAO,EACF,GAAI,QAAQjK,KAAK4F,EAAK6G,MAC3B,OAAQ7G,EAAKksH,aAAe+iU,GAAellQ,EAAe/pL,EAAKksH,cAAgBsyO,GAAqBx+V,EAAKksH,YAE7G,CACA,OAAO,CAAK,EAERkjU,GAAkBpmT,GAAUA,EAAOrgB,IAAIn7G,OAAO88K,GAAmBthD,GAASuhD,GAAwBvhD,IAClGkyR,GAAgBlyR,IACpB,MAAMrgB,EAAMqgB,EAAOrgB,IAAKygB,EAAYJ,EAAOI,UACrChwI,EAAS4vI,EAAO5vI,OAChB2wL,EAAgB3wL,EAAOsxL,mBACvBgK,EAAYtrD,EAAUC,WACtBolN,EAAWzlN,EAAO5tC,UACxB,IAAI2/T,EACA1iH,EACAoqH,EAAK,KACT,MAAMvZ,EAAkB5+N,GAAmBthD,GAC3C,IAAK0rD,IAAcgnK,GAAYhnK,GAC7B,OAEF,MAAM26P,EAAe5gG,EAAS7lO,SAASnwH,cACvC,IAAKW,EAAOm0L,aAAa8hQ,EAAcnmC,EAAgBzwZ,gBA9BlC,EAACsxL,EAAej6I,EAAM9vC,IACpCqlH,EAAOwG,GAAQ9B,GAAaS,QAAQxqH,GAAO+pH,GAAaS,QAAQ16E,KAAQ+hF,GACtEo9T,GAAellQ,EAAel4D,EAAIlJ,OA4B8B2mU,CAAevlQ,EAAe0kK,EAAU/5J,GAC/G,OAEF,GAAI+5J,EAAS7hO,aAAe6hO,EAASrlK,WAAaizK,GAAO5N,EAAS7hO,YAMhE,OALAmuS,EAAgBq0B,GAAgBpmT,GAChC+xR,EAAc5qY,YAAYqtV,KAAkB70P,KAC5C8lO,EAASsmB,aAAagmD,EAAetsE,EAAS7hO,YAC9Coc,EAAOI,UAAUquB,kBAAkBsjQ,EAAe,QAClD/xR,EAAO0uB,cAGT,IAAI13J,EAAOyuV,EAAS7hO,WACpB,KAAO5sH,GAIL,GAHI07V,GAAY17V,IACdg2D,GAAc58D,EAAQ4G,GAEpBkvb,GAAc91b,EAAQ4G,GAAO,CAC/B,GAAImvb,GAAqBplQ,EAAe/pL,GAAO,CAC7Cq4S,EAAWr4S,EACXA,EAAOA,EAAKksH,YACZvD,EAAIj+D,OAAO2tP,GACX,QACF,CACA,IAAK0iH,EAAe,CAIlB,IAHK0H,GAAMz5R,EAAOyyC,aAChBgnP,EAAKjiP,GAAYx3C,EAAOI,UAAUwjC,UAAU,IAAM90K,SAAS+3B,cAAc,YAEtE7vB,EAAK0wB,WAAY,CACpB1wB,EAAO,KACP,KACF,CACA+6Z,EAAgBq0B,GAAgBpmT,GAChCylN,EAASliO,aAAawuS,EAAe/6Z,EACvC,CACAq4S,EAAWr4S,EACXA,EAAOA,EAAKksH,YACZ6uS,EAAc5qY,YAAYkoR,EAC5B,MACE0iH,EAAgB,KAChB/6Z,EAAOA,EAAKksH,YAGZu2S,IACFz5R,EAAOI,UAAU0kB,OAAOwlC,GAAgBmvO,IACxCz5R,EAAO0uB,cACT,EAEI63R,GAAkB,CAACvmT,EAAQl5F,EAAMy/U,KACrC,MAAM36L,EAAQ7qE,GAAaS,QAAQ4kU,GAAgBpmT,IAC7C21B,EAAK6+M,KACX/wP,GAASmoE,EAAOj2B,GAChB4wN,EAAYz/U,EAAM8kJ,GAClB,MAAMjnC,EAAM71J,SAAS4hK,cAGrB,OAFA/L,EAAIqM,eAAe2E,EAAGh2C,KACtBglC,EAAIuM,aAAayE,EAAGh2C,KACbglC,CAAG,EAMNyoN,GAAWo5E,GAAkBxvb,IAAsE,KAA7D,IAAMA,EAAK6pH,KAAK,SAAW,KAAKj4F,QAAQ49Z,GAC9EC,GAAuB,CAACzmT,EAAQ1uI,EAASslL,IACtC,SAAU5lL,GACf,MAAMgS,EAAOuB,UAAW1Y,EAAQmX,EAAKA,EAAK3H,OAAS,GAC7Cqrb,EAAW76b,EAAQ,EAAIyF,EAAQhC,OAAOzD,EAAQ,GAAK,GACzD,GAAiB,MAAb66b,EACF,OAAO11b,EAET,GAAiB,MAAb01b,EAAkB,CACpB,MAAMC,EAAoBr1b,EAAQykG,YAAY,IAAKlqG,GACnD,IAA2B,IAAvB86b,EAA0B,CAE5B,IAAoD,IADpCr1b,EAAQwqB,UAAU6qa,EAAmB96b,GACzC+8B,QAAQ,2BAClB,OAAO53B,CAEX,CACF,CACA,MAAO,gBAAkB4lL,EAAM,uBAAyB52C,EAAOrgB,IAAI22D,OAAOtzK,EAAK,IAAM,KAAOg9H,EAAOrgB,IAAI22D,OAA0B,kBAAZtzK,EAAK,GAAkBA,EAAK,GAAKA,EAAK,IAAM,SACnK,EAYI4jb,GAAiB,CAACC,EAAoBv1b,IACnCgrH,GAAOuqU,GAAoBC,IAChC,MAAMh2b,EAAUQ,EAAQN,MAAM81b,GAC9B,OAAmB,OAAZh2b,GAAoBA,EAAQ,GAAGuK,SAAW/J,EAAQ+J,MAAM,IAG7D0rb,GAAU/mT,IACd,MAAMgnT,EAA0B,kBAC1BC,EAAY,IAAM1sU,GAAMxpH,KAAKqyX,GAAiBpjP,IAAW,IACzDknT,EAAe,IAAM3sU,GAAMxpH,KAAKoyX,GAAoBnjP,IAAW,IAC/DmnT,EAAe/5E,GAAS65E,GACxBG,EAAkBh6E,GAAS85E,GAC3BL,EAAqBxjE,GAAsBrjP,GAC7C6mT,EAAmBxrb,OAAS,GAC9B2kI,EAAO8K,GAAG,oBAAoB13I,IAxBE,EAAC4sI,EAAQ6mT,EAAoBzzb,KAC/D,IAAI0d,EAAI+1a,EAAmBxrb,OAAQ/J,EAAU8B,EAAE9B,QAC/C,GAAiB,QAAb8B,EAAEwyC,OAAN,CAGA,KAAO90B,KACLxf,EAAUA,EAAQtC,QAAQ63b,EAAmB/1a,GAAI21a,GAAqBzmT,EAAQ1uI,EAAS6xX,GAAoBnjP,KAE7G5sI,EAAE9B,QAAUA,CAJZ,CAImB,EAiBf+1b,CAA4BrnT,EAAQ6mT,EAAoBzzb,EAAE,IAG9D4sI,EAAOzjC,OAAO63R,mBAAmB,SAASr9X,IACxC,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACfq2a,EAAanwb,GACfA,EAAK6pH,KAAKmmU,EAAyB,QAC1BI,EAAgBpwb,IACzBA,EAAK6pH,KAAKmmU,EAAyB,QAEvC,KAEFhnT,EAAOiL,WAAWmpP,mBAAmB4yD,GAAyBjwb,IAC5D,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB,IAAKq2a,EAAanwb,KAAUowb,EAAgBpwb,GAC1C,SAEF,MAAM1F,EAAU0F,EAAK6pH,KAAK,oBACtBgmU,EAAmBxrb,OAAS,GAAK/J,EAC/Bs1b,GAAeC,EAAoBv1b,IACrC0F,EAAK7E,KAAO,QACZ6E,EAAKV,KAAO,EACZU,EAAKghB,KAAM,EACXhhB,EAAK7I,MAAQmD,GAEb0F,EAAK0qD,SAGP1qD,EAAK6pH,KAAKmmU,EAAyB,KAEvC,IACA,EAIEhvC,GAA0B,CAACh4Q,EAAQsnT,KACnCA,EAAoBvvb,aAAa,oBACnCy9W,GAAwB8xE,GACxBtnT,EAAOI,UAAU0kB,OAAO9kB,EAAOI,UAAUwjC,UACzC5jC,EAAOI,UAAUwyC,eAAe00Q,GAClC,EAEIC,GAAuB,CAACvnT,EAAQ5sI,KACpC,MAAMk0b,EATwBtnT,IAAUhC,GAAajd,GAAaS,QAAQwe,EAAO5tC,WAAY,qBAAqBxlG,KAAIi8H,GAAOA,EAAIlJ,MAAK7C,YAS1G0qU,CAAwBxnT,GACpD,GAAKsnT,EAGL,MAAe,qBAAXl0b,EAAEkD,MACJlD,EAAE9E,iBACF8E,EAAEhF,uBACF4pZ,GAAwBh4Q,EAAQsnT,SAG9BryE,GAAWqyE,KACbtvC,GAAwBh4Q,EAAQsnT,GAChCtnT,EAAOoqB,YAAY5/J,OACrB,EAMIi9b,GAA2Bj0F,GAY3Bk0F,GAAe,CAAC1nT,EAAQ/iF,EAAWhf,KACvC,MAAM63W,EAAc9rB,GAAYhqP,EAAO5tC,WACjCu1V,EAA2BvsU,EAAMwtQ,GAAsC,IAAd3rU,EAAkB64V,EAAY1/V,KAAO0/V,EAAY59V,MAChH,GAAIja,EAAMo0H,UAAW,CACnB,MAAMx+I,EAAMmsH,EAAOrgB,IAAIwgB,UAAUliG,EAAM2zH,eAAgB,OACvD,IAAK/9I,EACH,OAGF,IADiB8za,EAAyBluE,GAAcG,eAAe37U,IACxD,CACb,MAAMqkJ,EAAWvhE,GAAaS,QAfZwe,KACtB,MAAM+hD,EAAY/hD,EAAOrgB,IAAIn7G,OAAO88K,GAAmBthD,IAEvD,OADA+hD,EAAUtlK,UAAY,0BACfslK,CAAS,EAY0BP,CAAgBxhD,IACpC,IAAd/iF,EACF6mE,GAAQ/C,GAAaS,QAAQ3tG,GAAMyuK,GAEnCh/D,GAASvC,GAAaS,QAAQ3tG,GAAMyuK,GAEtCtiD,EAAOI,UAAU9sI,OAAOgvL,EAAS3iE,KAAK,GACtCqgB,EAAOI,UAAU8pB,UACnB,CACF,GAEI09R,GAAqB,CAAC5nT,EAAQgrD,KAClC,MAAM/tI,EAAY+tI,EAAU+9L,GAAWa,SAAWb,GAAWkB,UACvDhsV,EAAQ+hG,EAAOI,UAAUwjC,SAC/B,MAnCgC,EAAC3mH,EAAW+iF,EAAQ/hG,IAAUihZ,GAAiBl/S,EAAQ/iF,EAAWhf,EAAOqnW,GAA8BC,GAA6BkiD,IAmC7JI,CAA0B5qY,EAAW+iF,EAAQ/hG,GAAO2+E,SAAQ,KACjE8qU,GAAa1nT,EAAQ/iF,EAAWhf,GACzBy9E,EAASE,SAChB,EAEEksU,GAAmB,CAAC9nT,EAAQn2H,KAChC,MAAMozC,EAAYpzC,EAAO,GAAK,EACxBo0B,EAAQ+hG,EAAOI,UAAUwjC,SAC/B,MA1C8B,EAAC3mH,EAAW+iF,EAAQ/hG,IAG3CqhZ,GAAet/S,EAAQ/iF,EAAWhf,GAFxB+0D,GAAiBsyS,GAA6BtyS,IAAkBoyS,GAAcpyS,KAC/EA,GAAiBuyS,GAA4BvyS,IAAkBqyS,GAAaryS,IACzBy0V,IAuC5DM,CAAwB9qY,EAAW+iF,EAAQ/hG,GAAO2+E,SAAQ,KAC/D8qU,GAAa1nT,EAAQ/iF,EAAWhf,GACzBy9E,EAASE,SAChB,EAMEosU,GAAU,CAAChoT,EAAQgrD,IAAY48P,GAAmB5nT,EAJlC,EAACI,EAAW4qD,KAChC,MAAMniE,EAAMmiE,EAAU5qD,EAAUzC,QAAO,GAAQyC,EAAUC,UAAS,GAClE,OAAOjM,GAAMvL,IAAQmiE,EAAUA,CAAO,EAEwBi9P,CAAcjoT,EAAOI,UAAW4qD,IAAU3uE,QAAOg+Q,IAC/G2kD,GAAYh/S,EAAQq6P,IACb,KAEH6tD,GAAU,CAACloT,EAAQn2H,IAASi+a,GAAiB9nT,EAAQn2H,GAAMwyG,QAAOg+Q,IACtE2kD,GAAYh/S,EAAQq6P,IACb,KAEH8tD,GAAuB,CAACnoT,EAAQgrD,IAE7Bm1P,GAAqBngT,EAAQgrD,EADdA,EAAUu6M,GAA8BD,IAG1D8iD,GAAmB,CAACpoT,EAAQgrD,IAAYqsP,GAAmBr3S,GAASgrD,GAASp+L,KAAIysD,IACrF,MAAMsrG,EAAMtrG,EAAIqgU,UACV2uE,EAASroT,EAAOI,UAAUwjC,SAMhC,OALIonB,EACFrmC,EAAIK,SAASqjS,EAAOz2R,eAAgBy2R,EAAOx2R,aAE3ClN,EAAIM,OAAOojS,EAAOv2R,aAAcu2R,EAAOt2R,WAElCpN,CAAG,IACTtoC,QAAOsoC,IACRq6R,GAAYh/S,EAAQ2kB,IACb,KAGH1L,GAAWjiJ,GAAQqmH,EAAW,CAAC,cAAelrH,GAAK6E,IAMnDsxb,GAA0B,CAACtoT,EAAQgrD,KACvC,MAAMlkJ,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACnC/4C,EAAMogU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC1D,MAR4B,EAACvqH,EAAKvS,EAAM12C,KACxC,MAAM0yH,EAAS1H,EAAM1vF,GAAIob,GACzB,OAAOm5J,GAAUl/E,GAAaS,QAAQnoE,EAAIwB,cAAckB,GAAM3rD,EAAOkwI,QAAQnuI,GAAK4pD,KAAM+mE,GAAQjxH,OAAOonJ,GAAS,EAMzGsvS,CAAsBlvY,EAAKvS,EAAMk5F,EAAO5vI,QAAQisH,QAAO,KAC5D,GALwB,EAACv1E,EAAMkkJ,EAAS3xI,IAAQ2xI,EAAUqyP,GAAav2Y,EAAK64E,IAAKtmE,GAAO+jY,GAAct2Y,EAAK64E,IAAKtmE,GAK5GmvY,CAAoB1hZ,EAAMkkJ,EAAS3xI,GAAM,CAC3C,MACMsrG,EAAM4hS,GAAgBvmT,EAAQl5F,EADnBkkJ,EAAUvnE,GAAWC,IAGtC,OADAsc,EAAOI,UAAU0kB,OAAOH,IACjB,CACT,CACE,OAAO,CACT,GACA,EAEE8jS,GAAU,CAACzoT,EAAQgrD,MACnBhrD,EAAOI,UAAU+8C,eACZmrQ,GAAwBtoT,EAAQgrD,GA4BrC09P,GAAS,CAAC1oT,EAAQgrD,IAClBA,EACKtvE,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUyuC,UAAW,YAAYjiL,KAAIsG,GAbzE,EAAC8sI,EAAQ9sI,KACxB,MAAMyxJ,EAAM3kB,EAAOI,UAAUwjC,SACvBvqH,EAAMogU,GAAcG,eAAej1N,GAEzC,QADa3kB,EAAO5tC,UACXguF,YAAcltL,IAAWmqb,GAAanqb,EAASmmD,MACtD2mF,EAAO+tC,YAAY,wBACZ,EAGT,EAImG9X,CAASj2B,EAAQ9sI,KAAUqpH,OAAM,GAE3Hb,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUyuC,UAAW,YAAY36G,MAAKy0X,GAAWjtU,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUwoT,EAAS,YAAY/7b,KAAIsG,GA1BnJ,EAAC8sI,EAAQ9sI,EAASy1b,KAC/B,MAAMhkS,EAAM3kB,EAAOI,UAAUwjC,SACvBvqH,EAAMogU,GAAcG,eAAej1N,GAEzC,QADa3kB,EAAO5tC,UACXwxB,aAAe1wH,IAAWkqb,GAAcuL,EAAStvY,MACxD2mF,EAAO+tC,YAAY,yBACZ,EAGT,EAiB2K7X,CAAOl2B,EAAQ9sI,EAASy1b,OAAWpsU,OAAM,GAGhNqsU,GAAU,CAAC5oT,EAAQgrD,IAAY09P,GAAO1oT,EAAQgrD,GAE9C69P,GAAiB,CACrB/1b,UAAU,EACVD,QAAQ,EACRD,SAAS,EACTD,SAAS,EACTqsL,QAAS,GAUL8pQ,GAAe,CAAC72b,EAAS4qL,IAAQA,EAAImC,UAAY/sL,EAAQ+sL,SAAWnC,EAAI/pL,WAAab,EAAQa,UAAY+pL,EAAIhqL,SAAWZ,EAAQY,QAAUgqL,EAAIjqL,UAAYX,EAAQW,SAAWiqL,EAAIlqL,UAAYV,EAAQU,QACrMo2b,GAAU,CAACj7U,EAAU+uE,IAAQuW,GATXtlF,IAAYo/O,EAAMp/O,GAAU77G,IAAW,IAC1D42b,MACA52b,MAOqC+2b,CAAgBl7U,IAAW77G,GAAW62b,GAAa72b,EAAS4qL,GAAO,CAAC5qL,GAAW,KACnHg3b,GAAe,CAACn7U,EAAU+uE,IAAQuW,GANTtlF,IAAYo/O,EAAMp/O,GAAU77G,IAAW,IACjE42b,MACA52b,MAI0Ci3b,CAAuBp7U,IAAW77G,GAAW62b,GAAa72b,EAAS4qL,GAAO,CAAC5qL,GAAW,KAC/H6B,GAAS,CAACy3B,KAAMxV,IAAM,IAAMwV,EAAEzB,MAAM,KAAM/T,GAC1CmvI,GAAU,CAACp3C,EAAU+uE,IAAQwZ,GAAO0yP,GAAQj7U,EAAU+uE,IAAM5qL,GAAWA,EAAQ6B,WAC/Eq1b,GAA2B,CAACr7U,EAAU+uE,IAAQl+D,GAAQsqU,GAAan7U,EAAU+uE,IAAM5qL,GAAWA,EAAQ6B,WAEtGs1b,GAAU,CAACppT,EAAQgrD,KACvB,MAAM/tI,EAAY+tI,EAAU+9L,GAAWa,SAAWb,GAAWkB,UACvDhsV,EAAQ+hG,EAAOI,UAAUwjC,SAC/B,OAAOs7Q,GAAiBl/S,EAAQ/iF,EAAWhf,EAAOinW,GAAeC,GAAcxxC,IAAWt3O,QAAOg+Q,IAC/F2kD,GAAYh/S,EAAQq6P,IACb,IACP,EAEEgvD,GAAU,CAACrpT,EAAQn2H,KACvB,MAAMozC,EAAYpzC,EAAO,GAAK,EACxBo0B,EAAQ+hG,EAAOI,UAAUwjC,SAC/B,OAAO07Q,GAAet/S,EAAQ/iF,EAAWhf,EAAOinW,GAAeC,GAAcxxC,IAAWt3O,QAAOg+Q,IAC7F2kD,GAAYh/S,EAAQq6P,IACb,IACP,EAEEivD,GAAqB,CAACtpT,EAAQgrD,IAE3Bm1P,GAAqBngT,EAAQgrD,EADhBA,EAAUm6M,GAAeD,IAIzCxqP,GAAMH,GAAa,CACvB,CAAE3+B,KAAM,CAAC,YACT,CAAE74C,MAAO,CAAC,YACV,CACEq4E,OAAQ,CACN,UACA,WAGJ,CAAE16G,KAAM,CAAC,cAGL6oZ,GAAe,IAChB7uS,GACH9+B,KAHWv/E,GAAWq+G,GAAI9+B,KAAKv/E,IAS3BssF,GAAmB,CAAC5zH,EAAO+C,EAAU6sG,IAClCyuF,GAAOltE,GAAWnxH,IAAQghB,GAC3B0sG,GAAK1sG,EAAGje,GACH6sG,EAAU5uF,GAAK,CAACA,GAAK,GAErB4yG,GAAiB5yG,EAAGje,EAAU6sG,KAerCwjB,GAAO,CAAC35H,EAASs0H,IAVN,EAAC8F,EAAMp6H,EAASs0H,EAAStH,IACpCsH,EAAOt0H,GACFktH,EAASE,OAEdyB,EAAWuL,EAAMz2H,GAAK3D,IACjBktH,EAAS/iH,KAAKnK,GAGhB6xL,GAAW7xL,EAASo6H,EAAK36H,KAAK,MADV46H,GAAOpG,GAAKoG,EAAK,UAAY/F,EAAO+F,KAG/Bs2M,CAAS,CACzC,KACA,MACC3wU,EAASs0H,GACNiC,GAAQwB,GA1BLoC,GA0B4BpC,EAAU,QA1BJ9K,GA2BrCr7E,GAAQ,CAAC5xC,EAASs0H,IAAW+3F,GAAUrsN,EAAS,QAASs0H,GAEzD4sO,GAAO,CAAC7rS,EAAKxnB,EAASxwC,EAAOoxD,EAAWusY,EAAa/tU,KACzD,MAAMk4P,EAAyB,IAAd12T,EACjB,IAAK02T,GAAY9nX,GAAS,EACxB,OAAO09b,GAAaxmX,MAAMlf,EAAI,IACzB,GAAI8vT,GAAY9nX,GAASg4D,EAAIxoD,OAAS,EAC3C,OAAOkub,GAAa7oZ,KAAKmjB,EAAIA,EAAIxoD,OAAS,IACrC,CACL,MAAM+pO,EAAWv5O,EAAQoxD,EACnB4kE,EAAOh+D,EAAIuhL,GACjB,OAAOokN,EAAW3nU,GAAQ0nU,GAAanuS,OAAO/+G,EAASwlF,GAAQ6tO,GAAK7rS,EAAKxnB,EAAS+oM,EAAUnoL,EAAWusY,EACzG,GAEIv/T,GAAS,CAAC5tF,EAASymF,IAChB1iF,GAAM/D,EAASymF,GAAQ5uD,MAAK9zB,IACjC,MAAMyjB,EAAMkhE,GAAM3kF,GAElB,OADcmtT,GAAY1pS,GAAK9tC,GAAK2V,GAAG2Q,EAAStmB,KACnCnpB,KAAIf,IAAS,CACxBA,QACAg4D,SACC,IAoBD4lY,GAA+B1tY,IAAMwhF,OAp2iBzB/uI,EAo2iBmCutD,EAp2iBxBu4E,GAAMiJ,UAAU/uI,IAo2iBYqD,QAAO0kB,GAA+B,IAAvBA,EAAKxlB,OAAOsK,QAAgBkb,EAAKqS,QAAQ6oU,KAAS,IAAGx1O,SAp2iB3GztH,KAo2iBmH,EAE/HovI,GAA6B,CACjC,MACA,MAEIC,GAAmBhc,GACG4nU,GAA6B5nU,IAC3BxE,EAAWugB,GAA4BzrI,GAAK0vH,KAPzCA,IAAQ+tO,GAAgB/tO,IAA4C,UAAnC4N,GAAM5N,EAAM,mBAOM6nU,CAAyB7nU,GAiCvG8nU,GAAiB,CAACC,EAAeC,EAAgBzpZ,EAAOrqB,EAAGJ,KAC/D,MAAMovG,EAAQoB,GAAYpF,GAAaS,QAAQphF,GAAQ,iBAAiBxzC,KAAIwG,GAAKA,EAAEusH,MAC7EmqU,EAAUz8F,EAtBC,EAACu8F,EAAeG,IAAQ32P,GAAO22P,GAAKzuT,IACrD,MAAMptF,EATQ,EAACA,EAAMjI,KAAU,CAC/Bv6C,KAAMwiD,EAAKxiD,KAAOu6C,EAClB5lB,IAAK6tB,EAAK7tB,IAAM4lB,EAChBt6C,MAAOuiD,EAAKviD,MAAgB,EAARs6C,EACpB4D,OAAQqE,EAAKrE,OAAiB,EAAR5D,EACtBprB,MAAOqzB,EAAKrzB,MAAQorB,EACpB3lB,OAAQ4tB,EAAK5tB,OAAS2lB,IAGT+jZ,CAAQ5lU,GAAQkX,EAAGrhF,0BAA2B,GAC3D,MAAO,CACL,CACElkC,EAAGm4B,EAAKxiD,KACRiqB,EAAGi0a,EAAc17Y,GACjBi6E,KAAMmT,GAER,CACEvlH,EAAGm4B,EAAKviD,MACRgqB,EAAGi0a,EAAc17Y,GACjBi6E,KAAMmT,GAET,IASwB2uT,CAAWL,EAAe7kU,IAAQmlU,GAAUL,EAAeK,EAAQv0a,KAC5F,MARwB,EAACm0a,EAAS/za,EAAGJ,IAAMuoG,EAAM4rU,GAAS,CAACxoY,EAAK6oY,IAAc7oY,EAAIw6D,MAAK,IAAMJ,EAAS/iH,KAAKwxb,KAAYC,IACvH,MAAMC,EAAU/ub,KAAK4jC,KAAK5jC,KAAK8b,IAAIgza,EAAUr0a,EAAIA,GAAKza,KAAK8b,IAAIgza,EAAUz0a,EAAIA,IACvE20a,EAAUhvb,KAAK4jC,KAAK5jC,KAAK8b,IAAI+ya,EAAUp0a,EAAIA,GAAKza,KAAK8b,IAAI+ya,EAAUx0a,EAAIA,IAC7E,OAAO+lG,EAAS/iH,KAAK2xb,EAAUD,EAAUF,EAAYC,EAAU,KAC7D1uU,EAASE,QAIJ2uU,CAAkBT,EAAS/za,EAAGJ,GAAG/oB,KAAIs9b,GAAUA,EAAO/hU,MAAK,EAM9DqiU,GAAsBpvU,EAAMuuU,IAJXz7Y,GAAQA,EAAKrE,SAEpB,CAACqgZ,EAAQv0a,IAAMu0a,EAAOv0a,EAAIA,IAGpC80a,GAAsBrvU,EAAMuuU,IAJdz7Y,GAAQA,EAAK7tB,MAEjB,CAAC6pa,EAAQv0a,IAAMu0a,EAAOv0a,EAAIA,IAGpC+0a,GAAiC,CAACtqZ,EAAOiZ,IAAQnuC,GAAKmuC,EAAI8jH,kBAAkBjpG,MAAKhmB,GAAQs8Y,GAAoBpqZ,EAAO8N,EAAKxiD,KAAMwiD,EAAK7tB,OAAM6zC,MAAKi0D,IAAQ20T,UAjtCvHhyD,GAAT/1X,EAitCmLozH,GAjtCpJv7H,KAAIysD,GAAO2jY,GAA8Bjob,EAAOskD,GAAKH,UAAUrsD,OAAOwsD,KAAMkjE,MAAM,IAitCyEljE,GAjtC1LtkD,KAitC8L,IACrN41b,GAAiC,CAACvqZ,EAAOiZ,IAAQqlE,GAAOrlE,EAAI8jH,kBAAkBjpG,MAAKhmB,GAAQu8Y,GAAoBrqZ,EAAO8N,EAAKxiD,KAAMwiD,EAAK7tB,OAAM6zC,MAAKi0D,IAAQ20T,UAntCxHjyD,GAAT91X,EAmtCqLozH,GAntCrJv7H,KAAIysD,GAAO,CAACA,GAAKxsD,OAAOowb,GAA0Blob,EAAOskD,GAAKH,aAAYqjE,MAAM,IAmtC4EljE,GAntC5LtkD,KAmtCgM,IAKxN61b,GAAoB,CAACxO,EAAmBrnb,EAAOskD,KACnD,MAAM6mY,EAAW9D,EAAkBrnb,EAAOskD,GAC1C,MAJ0B6mY,IAAYA,EAAS7D,YAAcR,GAAUM,MAAsC,IAA9B+D,EAAShnY,UAAU79C,OAI9Fwvb,CAAoB3K,KAAc7sF,GAAOh6S,EAAIw1H,YAHzBqxQ,IAAYA,EAAS7D,YAAcR,GAAUI,IAAoC,IAA9BiE,EAAShnY,UAAU79C,OAG/Byvb,CAAkB5K,IAL9D,EAAC9D,EAAmBrnb,EAAOmrb,IAAaA,EAAS5D,QAAQjgU,QAAO0uU,GAAY3O,EAAkBrnb,EAAOg2b,GAAUzO,QAAQrgU,WAMhI+uU,CAAa5O,EAAmBrnb,EAAOmrb,GAExCA,EAAS5D,QAAQpgU,QAC1B,EAEI+uU,GAAyB7vU,EAAMwvU,GAAmB5N,IAClDkO,GAAwB9vU,EAAMwvU,GAAmB3N,IAKjDkO,GAAuB,CAACnrT,EAAQgrD,EAAS5qJ,EAAOgrZ,KACpD,MAAMzmS,EAAM3kB,EAAOI,UAAUwjC,SACvB3mH,EAAY+tI,EAAU,GAAK,EACjC,SAAIy7L,OAP6B,EAACz7L,EAASrmC,EAAKvkH,KAChD,MAAMs+V,EAAWjlB,GAAcG,eAAej1N,GAC9C,OAAO8lO,IAAYz/L,EAAS5qJ,GAAOi8E,QAAOhjE,GAAOA,EAAIsgU,QAAQ+kB,IAAU,EAKtC2sD,CAA2BrgQ,EAASrmC,EAAKvkH,MACxE61Y,GAAUh5X,EAAW+iF,EAAQ5/F,GAAQ4qJ,GAAS,GAAO3vJ,MAAK49U,IACxD+lE,GAAYh/S,EAAQi5O,EAAO,KAEtB,EAEG,EAIRqyE,GAAW,CAAC78Y,EAAU4K,KAC1B,MAAMriD,EAAOqiD,EAAIw1H,QAAQpgI,GACzB,OAAOskT,GAAU/7V,GAAQ0kH,EAAS/iH,KAAK3B,GAAQ0kH,EAASE,MAAM,EAS1DwuR,GAAY,CAACpqQ,EAAQn2H,EAAMwvC,KAC/B,MAAMjZ,EAAekrZ,KAAPzhb,EAAsBwvC,GAC9B3Y,GAAgB,IAAT72B,EACbu2B,EAAM07E,MAAK,IAAMkjU,GAAYh/S,EAAQ3mF,EAAIqgU,aAAYt5U,GAASqqV,GAAW/pV,EAAMs/F,EAAO5tC,WAAWvgG,QAAOw2Y,GAAWA,EAAQ1uB,QAAQtgU,KAAMyiE,MAAK,IAAMkjU,GAAYh/S,EAAQ3mF,EAAIqgU,aAAYzqX,GAVtK,EAAC4a,EAAMm2H,EAAQ5/F,KACjC4/F,EAAOoqB,YAAY+rB,UAAS,KAC1B,MAAMo1Q,EAAW1hb,EAAOi6G,GAAUR,GAC5BqhC,EAAM4hS,GAAgBvmT,EAAQjf,GAAaS,QAAQphF,GAAQmrZ,GACjEvM,GAAYh/S,EAAQ2kB,EAAI,GACxB,EAK2L6mS,CAAY3hb,EAAMm2H,EAAQ5/F,MAAQ,EAE3NqrZ,GAAqB,CAACzrT,EAAQn2H,EAAMu2B,EAAOk7F,KAC/C,MAAMqpB,EAAM3kB,EAAOI,UAAUwjC,SACvBvqH,EAAMogU,GAAcG,eAAej1N,GACnC79G,EAAOk5F,EAAO5tC,UACpB,IAAKvoF,GAAQohb,GAAuB3vT,EAAIjiF,GAAM,CAC5C,MAAMooK,EAvBsB,EAAC36K,EAAM1G,EAAOh0C,IAAUs+b,GAA+BtqZ,EAAOh0C,GAAOwwH,SAAQ,IAAM1xG,GAAK9e,EAAM+wK,kBAAkBjpG,MAAKhmB,GAAQwuY,GAAuCQ,GAAkBp2Y,EAAM2yU,GAAc7qR,OAAOxuD,IAAS8N,EAAKxiD,UAAQ6wH,MAAMk9P,GAAc7qR,OAAOxuD,IAuB/QsrZ,CAAwB5kZ,EAAM1G,EAAOiZ,GAEpD,OADA+wV,GAAUpqQ,EAAQn2H,EAAM43M,IACjB,CACT,CAAO,GAAI53M,GAAQqhb,GAAsB5vT,EAAIjiF,GAAM,CACjD,MAAMooK,EA1BsB,EAAC36K,EAAM1G,EAAOh0C,IAAUu+b,GAA+BvqZ,EAAOh0C,GAAOwwH,SAAQ,IAAM1xG,GAAK9e,EAAM+wK,kBAAkBjpG,MAAKhmB,GAAQwuY,GAAuCS,GAAkBr2Y,EAAM2yU,GAAc5qR,MAAMzuD,IAAS8N,EAAKxiD,UAAQ6wH,MAAMk9P,GAAc5qR,MAAMzuD,IA0B7QurZ,CAAwB7kZ,EAAM1G,EAAOiZ,GAEpD,OADA+wV,GAAUpqQ,EAAQn2H,EAAM43M,IACjB,CACT,CACE,OAAO,CACT,EAEIqjB,GAAS,CAAC9kG,EAAQgrD,EAAS4gQ,IAAUlwU,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUyuC,UAAW,UAAU36G,MAAKonE,GAAM5f,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAU7E,EAAI,UAAU1uI,KAAIwzC,GAASwrZ,EAAM5rT,EAAQgrD,EAAS5qJ,EAAOk7F,OAAM/e,OAAM,GACjOsvU,GAAQ,CAAC7rT,EAAQgrD,IAAY85C,GAAO9kG,EAAQgrD,EAASmgQ,IACrDW,GAAQ,CAAC9rT,EAAQgrD,IAAY85C,GAAO9kG,EAAQgrD,EAASygQ,IAKrDM,GAAQ,CAAC/rT,EAAQld,EAAQqF,IACtBA,EAAKrM,KAAKJ,EAASE,KAAMF,EAASE,MAAM,CAACowU,EAAU51Y,KACxD,OAnHU5nD,EAmHG4nD,EAnHQ06S,GAAatiW,EAASqvI,KAmHxBjxI,KAAIu7H,GANQA,KACjC,MAAMiY,EAAYq6B,GAAatI,MAAMhqC,EAAM,EAAGA,EAAM,GACpD,OAAO2wQ,GAAS14P,EAAU,EAKf6rT,CAA2B9jU,KApH1B35H,KAqHR,IACD6tC,GACG2jG,EAAOhkH,KAAK+wJ,aACPrxD,EAASE,QAElBokB,EAAO+tC,YAAY,0BACZm+Q,GAAWlsT,EAAQld,EAAQzmF,MAGhC6vZ,GAAa,CAAClsT,EAAQld,EAAQqF,IAAS4jU,GAAM/rT,EAAQld,EA1J9C,EAACzmF,EAASmtZ,EAAY1mU,IACfmH,GAAO5tF,EAASymF,GACjBhH,MAAK,IACbytU,GAAa3tU,KAAKv/E,KACxB0V,GACM29S,GAAK39S,EAAK8R,IAAKxnB,EAAS0V,EAAKlmD,MAAO,EAAG29b,KAqJiBpzY,CAAK+xE,EAAM4oO,KACxEo7F,GAAc,CAACnsT,EAAQld,EAAQqF,IAAS4jU,GAAM/rT,EAAQld,EAnJ/C,EAACzmF,EAASmtZ,EAAY1mU,IACfmH,GAAO5tF,EAASymF,GACjBhH,MAAK,IACbytU,GAAa3tU,SACnB7pE,GACM29S,GAAK39S,EAAK8R,IAAKxnB,EAAS0V,EAAKlmD,OAAQ,EAAG29b,KA8IiBtxY,CAAKiwE,EAAM4oO,KACzE7qH,GAAY,CAAClmG,EAAQgrD,KACzB,MAAMohQ,EAAe,CACnB,QACA,KACA,MAEI9qb,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnC0wB,EAASt0H,IACb,MAAM8sK,EAASnpK,GAAK3D,GACpB,OAAOk9B,GAAGl9B,EAAS8S,IAAS+7G,EAAW+uU,EAAc9wR,EAAO,EAExD3W,EAAM3kB,EAAOI,UAAUwjC,SACvB/oH,EAAYkmE,GAAaS,QAASwpE,EAA+BrmC,EAAImN,aAAzBnN,EAAIiN,gBACtD,OAAOzpC,GAAKttE,EAAWioE,GAAQl2H,KAAIu7H,IACjC/nF,GAAM+nF,EAAMrF,GAAQznF,MAAK+E,IACvB4/F,EAAOoK,MAAMhqG,MAAMskH,mBAAmBtkH,EAAMu/E,IAAI,IAElDqgB,EAAOI,UAAU8pB,UAAU8gC,GAM3B,OALoBA,EAAwBkhQ,GAAdC,IACPnsT,EAAQld,EAAQqF,GACnC9sF,MAAK4C,IACP+hG,EAAOI,UAAU0kB,OAAO7mH,EAAM,KAEzB,CAAI,IACVs+E,OAAM,EAAM,EAgHX8vU,GAAU,CAACrsT,EAAQrwC,KACvBqwC,EAAO8K,GAAG,WAAW+xC,IACdA,EAAIkC,sBA/GoB,EAAC/+C,EAAQrwC,EAAOktF,KAC/C,MAAMwiF,EAAQwvF,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,QACzCw4B,GAAQ,CACN,CACE85B,QAASo2M,GAAGt2J,MACZhrO,OAAQA,GAAOk0b,GAAShoT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGx2J,KACZ9qO,OAAQA,GAAOk0b,GAAShoT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAOo0b,GAASloT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAOo0b,GAASloT,GAAQ,OAE/Bq/H,EAAQ,CACT,CACErgF,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAOs0b,GAAkBpoT,GAAQ,GACzCrtI,SAAS,EACTG,UAAU,GAEZ,CACEksL,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAOs0b,GAAkBpoT,GAAQ,GACzCrtI,SAAS,EACTG,UAAU,IAEV,GACJ,CACEksL,QAASo2M,GAAGt2J,MACZhrO,OAAQA,GAAO+3b,GAAO7rT,GAAQ,IAEhC,CACEg/C,QAASo2M,GAAGx2J,KACZ9qO,OAAQA,GAAO+3b,GAAO7rT,GAAQ,IAEhC,CACEg/C,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAOg4b,GAAO9rT,GAAQ,IAEhC,CACEg/C,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAOg4b,GAAO9rT,GAAQ,IAEhC,CACEg/C,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAOg4b,GAAO9rT,GAAQ,IAEhC,CACEg/C,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAO80b,GAAS5oT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAO80b,GAAS5oT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGt2J,MACZhrO,OAAQA,GAAOs1b,GAASppT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGx2J,KACZ9qO,OAAQA,GAAOs1b,GAASppT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAOu1b,GAASrpT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAOu1b,GAASrpT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGt2J,MACZhrO,OAAQA,GAAO+sb,GAAQ7gT,EAAQrwC,GAAO,IAExC,CACEqvF,QAASo2M,GAAGx2J,KACZ9qO,OAAQA,GAAO+sb,GAAQ7gT,EAAQrwC,GAAO,IAExC,CACEqvF,QAASo2M,GAAGt2J,MACZlsO,SAAUysQ,EACVxsQ,OAAQwsQ,EACRvrQ,OAAQA,GAAO0tb,GAAcxhT,EAAQrwC,IAEvC,CACEqvF,QAASo2M,GAAGx2J,KACZhsO,SAAUysQ,EACVxsQ,OAAQwsQ,EACRvrQ,OAAQA,GAAO2tb,GAAczhT,EAAQrwC,IAEvC,CACEqvF,QAASo2M,GAAGv2J,GACZ/qO,OAAQA,GAAO20b,GAASzoT,GAAQ,IAElC,CACEg/C,QAASo2M,GAAGr2J,KACZjrO,OAAQA,GAAO20b,GAASzoT,GAAQ,KAEjC68C,GAAKxhJ,MAAKpsC,IACX4tL,EAAIvuL,gBAAgB,GACpB,EAKEg+b,CAAyBtsT,EAAQrwC,EAAOktF,EAC1C,GACA,EAGErhK,GAAQ,CAACq/B,EAAW/Q,KAAW,CACnC+Q,YACA/Q,WAGIyiZ,GAAQ9hF,GAASvoL,IACjBsqQ,GAAa9gQ,GAAa10L,GAAQ00L,IAAc10L,GAAQ,EAAI,EAO5Dy1b,GAAa,CAACz1b,EAAM8yC,EAAQ27S,KAChC,GAAIwN,GAASj8V,IAAS8yC,GAAU,EAC9B,OAAO4xE,EAAS/iH,KAAK6iB,GAAMxkB,EAAM8yC,IAC5B,CACL,MAAMonV,EAAa3d,GAAWg5E,IAC9B,OAAO7wU,EAASlwH,KAAK0lY,EAAWxd,UAAU18W,EAAM8yC,EAAQ0iZ,GAAWx1b,GAAOyuV,IAAW74V,KAAIsrD,GAAQ18B,GAAM08B,EAAK2C,UAAW3C,EAAK2C,UAAUh9C,KAAKxC,SAC7I,GAUIqxb,GAAW,CAAC11b,EAAM8yC,EAAQ27S,KAC9B,IAAKwN,GAASj8V,GACZ,OAAO0kH,EAASE,OAElB,MAAMrlG,EAAOvf,EAAK6G,KAClB,GAAIisC,GAAU,GAAKA,GAAUvzB,EAAKlb,OAChC,OAAOqgH,EAAS/iH,KAAK6iB,GAAMxkB,EAAM8yC,IAC5B,CACL,MAAMonV,EAAa3d,GAAWg5E,IAC9B,OAAO7wU,EAASlwH,KAAK0lY,EAAWxd,UAAU18W,EAAM8yC,EAAQ0iZ,GAAWx1b,GAAOyuV,IAAWvxR,MAAKhc,IACxF,MAAM0lX,EAAW1lX,EAAK2C,UAAUh9C,KAChC,OAAO6ub,GAASx0Y,EAAK2C,UAAW/Q,EAAS8zX,EAASvia,OAAQoqV,EAAS,GAEvE,GAEIknG,GAAY,CAAC31b,EAAM8yC,EAAQ27S,KAC/B,IAAKwN,GAASj8V,GACZ,OAAO0kH,EAASE,OAElB,MAAMrlG,EAAOvf,EAAK6G,KAClB,GAAIisC,GAAUvzB,EAAKlb,OACjB,OAAOqgH,EAAS/iH,KAAK6iB,GAAMxkB,EAAM8yC,IAC5B,CACL,MAAMonV,EAAa3d,GAAWg5E,IAC9B,OAAO7wU,EAASlwH,KAAK0lY,EAAWvd,SAAS38W,EAAM8yC,EAAQ0iZ,GAAWx1b,GAAOyuV,IAAWvxR,MAAK9d,GAAQu2Y,GAAUv2Y,EAAKyE,UAAW/Q,EAASvzB,EAAKlb,OAAQoqV,IACnJ,GAEImnG,GAAa,CAACjtU,EAAK3oH,EAAM8yC,EAAQ6uH,EAAS8sL,KAC9C,MAAM96N,EAAS4oP,GAAW5zP,EAlDTA,IAAO3oH,GAAQ2oH,EAAI2gB,QAAQtpI,IAASqmH,EAAW,CAChE,KACA,MACA,KACA,SACCrmH,EAAK4oH,WAA8C,UAAjCD,EAAI4rE,mBAAmBv0L,GA6CX8uI,CAAWnmB,IAC1C,OAAOjE,EAASlwH,KAAKm/H,EAAO+oP,UAAU18W,EAAM8yC,EAAQ6uH,EAAS8sL,GAAU,EAKnEonG,GAAe/8Q,GAAe,KAARA,IAAoD,IAAtC,kBAAoBlnJ,QAAQknJ,GAEhEg9Q,GAAe,CAACv2a,EAAMiqD,IAAYjqD,EAAKuF,UAAU0kD,EAAQnlE,QAezDguB,GAAa,CAACs2F,EAAKotU,EAAWvsX,EAASwsX,GAAoB,KAC/D,KApBuBroS,EAoBDooS,GApBY16R,YAAa4gM,GAAStuM,EAAIiN,gBAqB1D,OAAOl2C,EAASE,OArBK+oC,MAuBvB,MAAMgtC,EAAS,CACbp7K,KAAM,GACNuzB,OAAQ,GAOJhD,EAAO64E,EAAIwgB,UAAU4sT,EAAUn7R,eAAgBjyC,EAAI2gB,UAAY3gB,EAAIyhE,UACzE,OAAOwrQ,GAAWjtU,EAAKotU,EAAUn7R,eAAgBm7R,EAAUl7R,aANlC,CAACrjK,EAASs7C,EAAQvzB,KACzCo7K,EAAOp7K,KAAOA,EAAOo7K,EAAOp7K,KAC5Bo7K,EAAO7nJ,QAAUA,EAxBD,EAACvzB,EAAM1qB,EAAO20E,EAASwsX,GAAoB,KAC7D,IAAIl8a,EACJ,MAAMm8a,EAAYzsX,EAAQlxE,OAAO,GACjC,IAAKwhB,EAAIjlB,EAAQ,EAAGilB,GAAK,EAAGA,IAAK,CAC/B,MAAM5hB,EAAOqnB,EAAKjnB,OAAOwhB,GACzB,IAAKk8a,GAAqBH,GAAa39b,GACrC,OAAOwsH,EAASE,OAElB,GAAIqxU,IAAc/9b,GAAQqzH,GAAWhsG,EAAMiqD,EAAS1vD,EAAGjlB,GACrD,KAEJ,CACA,OAAO6vH,EAAS/iH,KAAKmY,EAAE,EAado8a,CAAYv7P,EAAOp7K,KAAMo7K,EAAO7nJ,OAAQ02B,EAASwsX,GAAmBzwU,MAAMzyE,KAGOhD,GAAMotB,MAAKilG,IACnG,MAAMl7H,EAAQ8uZ,EAAUt1Q,aAGxB,GAFAx5I,EAAM+mH,SAASmU,EAAKt+G,UAAWs+G,EAAKrvH,QACpC7L,EAAMgnH,OAAO8nS,EAAUj7R,aAAci7R,EAAUh7R,WAC3C9zH,EAAMo0H,UACR,OAAO32C,EAASE,OAElB,MAAMrlG,EAvCMouI,IAAOgwN,GAAOhwN,EAAIpzJ,WAAWvC,QAAQ,UAAW,MAuC/C62I,CAAQ5nG,GAErB,OAAqB,IADA1nB,EAAKw/E,YAAYv1B,GAE7Bk7C,EAASE,OAETF,EAAS/iH,KAAK,CACnB4d,KAAMu2a,GAAav2a,EAAMiqD,GACzBviC,QACAuiC,WAEJ,GACA,EAKE2sX,GAASn2b,IACb,GAHeA,IAhjsBJ,IAgjsBYA,EAAKM,SAGxB81b,CAASp2b,GACX,OAAOwkB,GAAMxkB,EAAMA,EAAK6G,KAAKxC,QACxB,CACL,MAAM8oH,EAAWntH,EAAKoqH,WACtB,OAAO+C,EAAS9oH,OAAS,EAAI8xb,GAAOhpU,EAASA,EAAS9oH,OAAS,IAAMmgB,GAAMxkB,EAAMmtH,EAAS9oH,OAC5F,GAEIgyb,GAAS,CAACr2b,EAAM8yC,KACpB,MAAMq6E,EAAWntH,EAAKoqH,WACtB,OAAI+C,EAAS9oH,OAAS,GAAKyuC,EAASq6E,EAAS9oH,OACpCgyb,GAAOlpU,EAASr6E,GAAS,GACvBq6E,EAAS9oH,OAAS,GAbbrE,IAljsBF,IAkjsBUA,EAAKM,SAaK0oH,CAAUhpH,IAASmtH,EAAS9oH,SAAWyuC,EAChEqjZ,GAAOhpU,EAASA,EAAS9oH,OAAS,IAElCmgB,GAAMxkB,EAAM8yC,EACrB,EAWIwjZ,GAAgB3tU,GAAOglC,IAC3B,MAAMyvC,EAAOi5P,GAAO1oS,EAAIiN,eAAgBjN,EAAIkN,aAC5C,OAV4B,EAAClyC,EAAKy0E,KAClC,IAAIz1L,EACJ,MAAMmoC,EAA6D,QAArDnoC,EAAKghH,EAAIwgB,UAAUi0D,EAAKv5I,UAAW8kE,EAAI2gB,gBAA6B,IAAP3hI,EAAgBA,EAAKghH,EAAIyhE,UACpG,OAAOwrQ,GAAWjtU,EAAKy0E,EAAKv5I,UAAWu5I,EAAKtqJ,QAAQ,CAAC9oC,EAAU8oC,IAAsB,IAAXA,GAAgB,EAAIA,GAAQhD,GAAMj1C,QAAOsnK,IACjH,MAAMjqK,EAAOiqK,EAAKt+G,UAAUh9C,KAAKvO,OAAO6pK,EAAKrvH,OAAS,GACtD,OAAQ+iZ,GAAa39b,EAAK,IACzB+sH,QAAQ,EAIHsxU,CAAsB5tU,EAAKy0E,EAAK,EAGpCtrE,GAAS,CAACkX,EAAQwtT,KACtB,MAAMC,EAAWD,IACX7oS,EAAM3kB,EAAOI,UAAUwjC,SAC7B,MAJwB,EAACjkD,EAAKotU,EAAWU,IAAa9uU,GAAQ8uU,EAASC,UAAUltX,GAAWn3C,GAAWs2F,EAAKotU,EAAWvsX,KAIhHmtX,CAAkB3tT,EAAOrgB,IAAKglC,EAAK8oS,GAAUv5X,MAAKrgE,GAAW+5b,GAAkB5tT,EAAQwtT,EAAa35b,IAAS,EAEhH+5b,GAAoB,CAAC5tT,EAAQwtT,EAAa35b,EAAS6/Q,EAAe,CAAC,KACvE,IAAI/0Q,EACJ,MAAM8ub,EAAWD,IAEXK,EAAoD,QAAvClvb,EADPqhI,EAAOI,UAAUwjC,SACDhS,eAAep0B,iBAA8B,IAAP7+H,EAAgBA,EAAK,GACjFmvb,EAAiBzgG,EAASogG,EAASM,gBAAgBl6b,EAAQ2sE,UAAUmyM,GAAiB9+Q,EAAQ0iB,KAAKlb,QAAUs3Q,EAAcutB,UAAYvtB,EAAc7hR,QAAQ4rH,YAAW,IAAM4wU,GAActtT,EAAOrgB,MAA5DgzJ,CAAkE9+Q,EAAQoqC,MAAO4vZ,EAAWh6b,EAAQ0iB,QACjP,GAA8B,IAA1Bu3a,EAAezyb,OACjB,OAAOqgH,EAASE,OAElB,MAAMm3J,EAAanoQ,QAAQi5C,IAAIqpS,EAAM4gG,GAAgBE,GAC/BA,EAAG51b,MAAMvE,EAAQ0iB,KAAMy3a,EAAGC,WAAYv6K,GACvC3vN,MAAKsoF,IAAW,CACjC80H,UAAWttQ,EAAQ0iB,KACnB4qB,MAAOkrG,EACP/Z,QAAS07T,EAAG17T,QACZ09C,SAAUg+Q,EAAGh+Q,SACbiyF,YAAa+rL,EAAG/rL,mBAGpB,OAAOvmJ,EAAS/iH,KAAK,CACnBo6Q,aACAl/Q,WACA,EAGJ,IAAIwjM,IACH,SAAUA,GACTA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,OACpD,CAHA,CAGEA,KAAqBA,GAAmB,CAAC,IAC3C,MAAMC,GAAS,CAACv0I,EAAK6wF,EAASN,IAAYvwF,EAAIw0I,QAAUF,GAAiB7jM,MAAQogJ,EAAQ7wF,EAAIy0I,QAAUlkD,EAAQvwF,EAAI00I,QA8C7GA,GAASjtL,IAAK,CAClB+sL,MAAOF,GAAiBK,MACxBD,OAAQjtL,IAEJgtL,GAASpkM,IAAK,CAClBmkM,MAAOF,GAAiB7jM,MACxBgkM,OAAQpkM,IAIJukM,GAFW50I,GAAOu0I,GAAOv0I,EAAK0wF,GAAOvmJ,MAAOumJ,GAAOtlJ,OAEnDwpM,GAGJF,GAHIE,GAvDYtrD,IAChB,MAAM5/I,EAAS,GACTmrM,EAAS,GAIf,OAHAu1J,EAAO9gN,GAASp8H,IACdqnL,GAAOrnL,GAAKgW,GAAO2xK,EAAO5pM,KAAKi4B,KAAM+T,GAAOvtC,EAAOuB,KAAKgsC,IAAK,IAExD,CACLvtC,SACAmrM,SACD,EA8CGD,GAKJH,GALIG,GAjBY,CAAC50I,EAAKx3B,IAClBw3B,EAAIw0I,QAAUF,GAAiB7jM,MAC1B+3B,EAAEw3B,EAAIy0I,QAENz0I,EAaL40I,GAlCM,CAAC50I,EAAKx3B,IACZw3B,EAAIw0I,QAAUF,GAAiBK,MAC1B,CACLH,MAAOF,GAAiBK,MACxBD,OAAQlsK,EAAEw3B,EAAI00I,SAGT10I,EA2BL40I,GA5CW,CAAC50I,EAAKx3B,IACjBw3B,EAAIw0I,QAAUF,GAAiB7jM,MAC1B,CACL+jM,MAAOF,GAAiB7jM,MACxBgkM,OAAQjsK,EAAEw3B,EAAIy0I,SAGTz0I,EAqCL40I,GAUEL,GAGFyB,GAAY5lM,GACTynC,EAASznC,IAAUrF,GAAKqF,GAAOkI,OAAS,IAAM,uBAAyB5H,KAAKsa,UAAU5a,EAAO,KAAM,GAYtGuxH,GAAK,CAAC1lC,EAAMi6G,IACTtB,GAAoB,CAAC,CACxB34G,OACAi6G,kBAQA0C,GAAa,CAAC38G,EAAM7rF,EAAO4nJ,EAAU6gD,IAC1Bh0E,GAAMmzB,EAAU6gD,GACjB9/E,MAAK,IALC,EAAC98B,EAAM+7D,EAAU8gD,IAAWn3E,GAAG1lC,GAAM,IAAM,uBAAyB68G,EAAS,gCAAkC9C,GAAUh+C,KAKpH+gD,CAAc98G,EAAM+7D,EAAU6gD,KAAKG,GAAMA,EAAGrqD,QAAQ1yD,EAAKnyF,OAAO,CAAC,WAAa+uM,IAAMzoM,KAEzGypM,GAAW,CAAC7uM,EAAKgtJ,KAMd,CACLrJ,QANc,CAAC1yD,EAAM7rF,IACNy0H,GAAMz0H,EAAOpF,GACd+tH,MAAK,IAXJ,EAAC98B,EAAMjxF,IAAQ22H,GAAG1lC,GAAM,IAAM,8CAAgDjxF,EAAM,MAW1EkuM,CAAWj9G,EAAMjxF,KAAMmuM,GAAUP,GAAW38G,EAAM7rF,EAAO4nJ,EAAUmhD,KAK5F3qM,SAHe,IAAM,YAAcxD,EAAM,uBAAyBD,GAAKitJ,KAcrEo9C,GAAY/7J,GACT,IAAIg8J,KACT,GAAuB,IAAnBA,EAAQ/8L,OACV,MAAM,IAAI7H,MAAM,4BAElB,MAAMolC,EAAM,CAAC,EACb,IAAK,IAAI5mB,EAAI,EAAGA,EAAIomL,EAAQ/8L,OAAQ2W,IAAK,CACvC,MAAMqmL,EAAYD,EAAQpmL,GAC1B,IAAK,MAAMjkB,KAAOsqM,EACZ3E,GAAM2E,EAAWtqM,KACnB6qC,EAAI7qC,GAAOquC,EAAOxD,EAAI7qC,GAAMsqM,EAAUtqM,IAG5C,CACA,OAAO6qC,CAAG,EAGR0/J,GAAYH,IArBL,CAAC5yB,EAAK7gD,IACGh1G,EAAc61J,IAAQ71J,EAAcg1G,GACnC4zE,GAAU/yB,EAAK7gD,GAAMA,IAoBtC90G,GAAQuoL,IAzBE,CAAC5yB,EAAK7gD,IACbA,IAkCH+zE,GAAc7mJ,IAJoB,CACtC+pE,IAAK,iBACLg9C,QAE6C3rJ,EAAS4kC,KAOlDs8Y,GAAct2P,GAAUlF,EAAQiF,GAAqBr5E,GAA7Bo0E,CAAsCkF,GAS9DiB,GAJiBT,IACrB,MAAMU,EAAanB,GAAuBS,GAC1C,OAAOU,EAAWlB,OAAOv8L,OAAS,EAAI6yb,GAAYp1P,EAAWlB,QAAUD,GAAoBmB,EAAWrsM,OAAO,EAmBzGqvH,GAAO,CAAC3tH,EAAO6pM,EAASC,KAC5B,OAAQ9pM,EAAMwtH,KACd,IAAK,QACH,OAAOq8E,EAAQ7pM,EAAMJ,IAAKI,EAAM2pM,OAAQ3pM,EAAM4pM,SAAU5pM,EAAMojD,MAChE,IAAK,SACH,OAAO0mJ,EAAS9pM,EAAM2pM,OAAQ3pM,EAAM+pM,cACtC,EAGI/pM,GAAQgrM,IAKL,CACLznD,QALc,CAAC1yD,EAAMhlD,IACd29J,GAAuBwB,EAAUn/J,IAAM/T,GAjGnC,EAAC+4D,EAAM/4D,IAAQy+F,GAAG1lC,EAAMhyE,EAASiZ,IAiGSypC,CAAOsvB,EAAM/4D,KAKlE10B,SAHeyb,EAAS,SAMtBosL,GAAajrM,GAAMwpM,IAEnB0B,GAAiB,CAACr6G,EAAM/uE,EAAKliB,EAAK6wJ,IAAWh3B,GAAM33G,EAAKliB,GAAK+tH,MAAK,IA9GhD,EAAC98B,EAAMjxF,EAAKkiB,IAAQy0G,GAAG1lC,GAAM,IAAM,8CAAgDjxF,EAAM,QAAUgrM,GAAU9oL,KA8GvDqpL,CAAgBt6G,EAAMjxF,EAAKkiB,IAAM2uI,GACzG26C,GAAiB,CAACtpL,EAAKliB,EAAK6jD,EAAUgtG,IAEnCA,EADGh3B,GAAM33G,EAAKliB,GAAK2uH,YAAW,IAAM9qE,EAAS3hC,MAQhDupL,GAAe,CAAC3kH,EAAOmK,EAAM/uE,EAAKliB,EAAKwjD,KAC3C,MAAMqtG,EAAS66C,GAAMloJ,EAAKmgG,QAAQ1yD,EAAKnyF,OAAO,CAACkB,IAAO0rM,GAChDC,EAAiBC,GAAYA,EAAS79E,MAAK,IAAM67E,GAAoBj8E,EAASE,UAASg+E,IAC3F,MAAM/qL,EAAS0iC,EAAKmgG,QAAQ1yD,EAAKnyF,OAAO,CAACkB,IAAO6rM,GAChD,OAAOjC,GAAiB9oL,EAAQ6sG,EAAS/iH,KAAK,IAEhD,OAAQk8E,EAAM8mC,KACd,IAAK,WACH,OAAO09E,GAAer6G,EAAM/uE,EAAKliB,EAAK6wJ,GACxC,IAAK,iBACH,OAAO26C,GAAetpL,EAAKliB,EAAK8mF,EAAM8jF,QAAS/Z,GACjD,IAAK,SACH,MAjBiB,EAAC3uI,EAAKliB,EAAK6wJ,IAAWA,EAAOh3B,GAAM33G,EAAKliB,IAiBlD8rM,CAAa5pL,EAAKliB,EAAK2rM,GAChC,IAAK,uBACH,MAlB0B,EAACzpL,EAAKliB,EAAK6jD,EAAUgtG,IAE1CA,EADKh3B,GAAM33G,EAAKliB,GAAKnB,KAAIotC,IAAe,IAARA,EAAe4X,EAAS3hC,GAAO+pB,KAiB7D8/J,CAAsB7pL,EAAKliB,EAAK8mF,EAAM8jF,QAAS+gC,GACxD,IAAK,iBACD,OAAOH,GAAetpL,EAAKliB,EAAKif,EAAS,CAAC,IAAIxC,IAC5C,MAAMqE,EAASypL,GAAUzjH,EAAM8jF,QAAQ1oJ,GAAMzF,GAC7C,OAAOo0I,EAAO/vI,EAAO,IAG3B,EAmBIsrL,GAAQ1tM,IAML,CACLilJ,QANc,CAAC1yD,EAAMviD,IAlBH,EAACuiD,EAAM/uE,EAAK+zJ,KAChC,MAAM/+I,EAAU,CAAC,EACX2yK,EAAS,GACf,IAAK,MAAM/iH,KAASmvF,EAClBloD,GAAKjnC,GAAO,CAAC9mF,EAAK+pM,EAAQC,EAAUxmJ,KAClC,MAAM1iC,EAAS2qL,GAAazB,EAAU/4G,EAAM/uE,EAAKliB,EAAKwjD,GACtDomJ,GAAkB9oL,GAAQoX,IACxB2xK,EAAO5pM,QAAQi4B,EAAI,IAClB88B,IACD99B,EAAQ6yK,GAAU/0I,CAAG,GACrB,IACD,CAAC+0I,EAAQI,KACVjzK,EAAQ6yK,GAAUI,EAAajoL,EAAI,IAGvC,OAAO2nL,EAAOv8L,OAAS,EAAIs8L,GAAoBC,GAAUD,GAAoB1yK,EAAQ,EAGxDq1K,CAAct7G,EAAMviD,EAAGhwC,GAOlD8E,SANe,KACf,MAAMgpM,EAAe2yJ,EAAMzgW,GAAQ0B,GAAS2tH,GAAK3tH,GAAO,CAACJ,EAAKysM,EAAOC,EAAWlpJ,IAASxjD,EAAM,OAASwjD,EAAKhgD,aAAY,CAACumM,EAAQ4C,IAAkB,SAAW5C,EAAS,QACxK,MAAO,SAAWyC,EAAatsM,KAAK,MAAQ,GAAG,IAO7C0sM,GAAQppJ,IAML,CACLmgG,QANc,CAAC1yD,EAAM30E,KACrB,MAAMgiI,EAAU6gN,EAAM7iV,GAAO,CAACtX,EAAG+d,IAAMygC,EAAKmgG,QAAQ1yD,EAAKnyF,OAAO,CAAC,IAAMikB,EAAI,MAAO/d,KAClF,OAAO8lM,GAA6BxsD,EAAQ,EAK5C96I,SAHe,IAAM,SAAWggD,EAAKhgD,WAAa,MAehD6qM,GAAQ,CAACxkL,EAAO25B,EAAMthC,IAAQ0nL,GAPf,EAAC//K,EAAO25B,EAAMthC,KACjC,MAAM8yC,EAAMxR,EAAKmgG,QAAQ,CAAC95H,GAAQ3H,GAClC,OAAO0nL,GAAsB50I,GAAKs5I,IAAQ,CACxClpM,MAAO8c,EACP2nL,OAAQyE,KACP,EAEqDnkB,CAAatgK,EAAO25B,EAAMthC,IAC9EusL,GAAcD,GACX,aAjNY3E,KACnB,MAAM8E,EAAK9E,EAAOv8L,OAAS,GAAKu8L,EAAOroM,MAAM,EAAG,IAAI1C,OAAO,CAAC,CACxDmyF,KAAM,GACNi6G,aAAcjsL,EAAS,4CACnB4qL,EACR,OAAOs1J,EAAMxwJ,GAAItpM,GACR,iBAAmBA,EAAE4rF,KAAK/wF,KAAK,OAAS,MAAQmF,EAAE6lM,gBACzD,EA0MoB0D,CAAaJ,EAAQ3E,QAAQ3pM,KAAK,MAAQ,qBAAuB8qM,GAAUwD,EAAQppM,OAErGytO,GAAS,CAAC7yO,EAAKgtJ,IAAa6hD,GAAS7uM,EAAKilM,GAAMj4C,EAAUo/C,KAE1DiB,GAAWpuL,EAASosL,IACpBiC,GAAa,CAAClC,EAAWmC,IAAiBntM,IAAM4E,IACpD,MAAMwoM,SAAoBxoM,EAC1B,OAAOomM,EAAUpmM,GAAK4kM,GAAoB5kM,GAAK4kM,GAAoB,kBAAmB2D,cAA2BC,IAAc,IAE3H3tL,GAASytL,GAAW3nL,EAAU,UAC9B7F,GAASwtL,GAAWzgF,EAAU,UAC9BjtG,GAAU0tL,GAAWvgF,EAAW,WAChC0gF,GAAoBH,GAAW7rL,EAAY,YAE3CqlE,GAlIU,CAAC9mF,EAAK+pM,EAAQC,EAAUxmJ,KAAS,CAC/CoqE,IAAK,QACL5tH,MACA+pM,SACAC,WACAxmJ,SA8HI2rJ,GA5HgB,CAACpF,EAAQI,KAAiB,CAC9Cv8E,IAAK,SACLm8E,SACAI,iBA0HIiF,GAAe1wM,IAAUosH,OA1BfsgF,EA0BuBhrM,GAASkvH,EAAW5wH,EAAQ0B,GAASslJ,GAAOtlJ,MAAMA,GAASslJ,GAAOvmJ,MAAM,uBAAwBiB,sBAA4B1B,EAAOwB,KAAK,WA1BlJE,IAAMqc,GAAK2uL,EAAU3uL,GAAGsxG,KAAK67E,GAAqBA,MAA/DwB,KA0B2K,EACrLkE,GAAa,CAACtvM,EAAKqC,IAAWykF,GAAM9mF,EAAKA,EAlKxB,CACrB4tH,IAAK,WACLg9C,QAAS,CAAC,GAgKoDvoK,GAC1DktM,GAAiBvvM,GAAOsvM,GAAWtvM,EAAK8f,IACxC2vL,GAAmBzvM,GAAOsvM,GAAWtvM,EAAKytM,IAE1CuC,GAAW,CAAChwM,EAAKqC,IAAWykF,GAAM9mF,EAAKA,EA7JtB,CACrB4tH,IAAK,SACLg9C,QAAS,CAAC,GA2JkDvoK,GACxD6tM,GAAelwM,GAAOgwM,GAAShwM,EAAK8f,IAGpC0wL,GAAc,CAACxwM,EAAK6jD,EAAUxhD,IAAWykF,GAAM9mF,EAAKA,EAAK0qM,GAAY7mJ,GAAWxhD,GAChFouM,GAAkB,CAACzwM,EAAK6jD,IAAa2sJ,GAAYxwM,EAAK6jD,EAAUhkC,IAChE6wL,GAAkB,CAAC1wM,EAAK6jD,IAAa2sJ,GAAYxwM,EAAK6jD,EAAU/jC,IAChE6wL,GAAsB,CAAC3wM,EAAK6jD,EAAUnlD,IAAW8xM,GAAYxwM,EAAK6jD,EAAUurJ,GAAa1wM,IACzFkyM,GAAmB,CAAC5wM,EAAK6jD,IAAa2sJ,GAAYxwM,EAAK6jD,EAAUjkC,IACjEixL,GAAoB,CAAC7wM,EAAK6jD,IAAa2sJ,GAAYxwM,EAAK6jD,EAAU4pJ,IAGlEllM,GAAOgnM,GAAe,QACtB87D,GAAU57D,GAAiB,SAC3BxtB,GAAWwtB,GAAiB,YAC5BjtB,GAAUquB,GAAkB,WAAW,IAAMnkK,IAC7C8+N,GAAet7D,GAAa,QAC5Bw7D,GAAex7D,GAAa,QAC5By7D,GAAkBz7D,GAAa,WAC/B07D,GAAgB17D,GAAa,SAC7B30J,GAASq1J,GAAiB,UAAU,GACpCzhL,GAAUyhL,GAAiB,WAAW,GACtCniB,GAAUmiB,GAAiB,WAAW,GAEtCu7D,GAAgB5jQ,GAAQmoM,GAAgB,OAAQnoM,GAEhD63b,GAAsBh0P,GAAM,CAChC7jM,GACAgnM,GAAe,WACfkB,GAAgB,WAAY,IANLhqL,GAON,EA3BD,EAACzmB,EAAK6jD,IAAaijC,GAAM9mF,EAAKA,EAAK0qM,GAAY7mJ,GAAWwpJ,MAoB5CkD,CAAU,UAAW9pL,KAQnDgqL,GAAgB,aAAc,KA7BTzwM,GA8BN,UA9BagwM,GAAShwM,GAAKytM,KA+B1C49D,GACAppF,GAxBuB,EAACjiL,EAAK6jD,EAAUxhD,IAAWmuM,GAAYxwM,EAAK6jD,EAAU+oJ,GAAMvqM,IAyBnFyuM,CAAiB,cAAe,GAAIhxL,MAjCf9f,OAqBEymB,GAczB,MAEM+lP,GAA0B,CAC9Br9O,GACAw8O,GACAD,GACAF,GACAhpF,GACAkuB,GAAgB,UAAW,gBAGvBi8D,GAAgC,CAACpxN,IAAQz8C,OAAO0tQ,IAEhDM,GAAmB,CACvBj8D,GAAkB,YAAapjF,GAC/BkjF,GAAoB,QAAS,OAAQ,CACnC,OACA,WAEFA,GAAoB,WAAY,YAAa,CAC3C,OACA,YACA,UAIEo8D,GAAsBP,GAAwB1tQ,OAAO,CACzDqtQ,GAAc,qBACd19E,GACAxM,GACAktB,GAAY,WAAYhiF,KAEpB6/I,GAA4BL,GAA8B7tQ,OAAO,CACrEqtQ,GAAc,qBACd19E,GACAxM,GACAktB,GAAY,WAAYhiF,KAEpB8/I,GAAqBT,GAAwB1tQ,OAAO,CAACqtQ,GAAc,uBACnEe,GAA2BP,GAA8B7tQ,OAAO,CAACqtQ,GAAc,6BAC/EgB,GAAiBt6B,GAAO,OAAQ,CACpCu6B,kBAAmBL,GACnBM,wBAAyBL,KAE3B5gE,GAAM,CACJ+/D,GAAc,eACdt7D,GAAkB,YAAa5xL,EAAS,KACxC2sP,GArFsB,EAAC5rQ,EAAKqC,IAAWykF,GAAM9mF,EAAKA,EArK7B,CACrB4tH,IAAK,WACLg9C,QAAS,CAAC,GAmKyDgiC,GAAMvqM,IAsFzEytM,CAAgB,WAAYq9D,IAC5Bn9D,GAAS,SAAU6iC,GAAO,OAAQ,CAChCu6B,kBAAmBH,GACnBI,wBAAyBH,OAE3BpuQ,OAAOguQ,KAET,MAAM/pF,GAAa9wC,IACjB,MAAM60M,EAAS70M,EAAOuvC,GAAGx2G,SAAS1zD,SAASwvU,OACrCh9T,EAAUm7K,GAAM6hJ,GAAQryF,IAAS4rM,OAzDbzxQ,EAyDiC6lE,EAzDzBpmD,GAAM,gBAAiB+xP,GAAqBxxQ,IAyDZ7gE,MAAK71F,IACrE,MAAM,IAAIzyB,MAAMgpM,GAAYv2K,GAAK,GAChCi1F,GA3DuByhE,KA2Dd,IACN+wQ,EAAW9/F,GAAYxuO,GAAWvnG,GAASrN,GAAKA,EAAEg2D,WAClD6tX,EAAgB5hc,GAAOorB,GAE7B,MAAO,CACLA,UACA61a,WACAK,gBAJsBvtX,GAAW6sR,EAASghG,GAAeC,GAAMA,EAAG9tX,UAAYA,IAK/E,EAwBG+tX,GAAUvuT,IACd,MAAMwuT,EAAsBt1P,KACtBu1P,EAAW70R,IAAK,GAChB8M,EAAW8nR,EAAoBntT,MAC/BgzH,EAAoB,KACpB3tF,MAv2cqB1mC,KAC3BA,EAAO7xH,SAAS,mBAAmB,EAu2c/Bugb,CAAqB1uT,GACrByuT,EAAS7gc,KAAI,GACb4gc,EAAoBtxb,QACtB,EAUIyxb,EAAoB1oY,IAAO,IAAM6qH,GAAW9wC,KAE5Ch1H,EAAO0oQ,IADIA,IAAgB86K,EAAoB9gc,MAAMd,KAAIohc,GAAM3ka,GAAW22G,EAAOrgB,IAAKqgB,EAAOI,UAAUwjC,SAAUoqR,EAAGxtX,SAAS,GAAMtM,MAAK06X,GAAchB,GAAkB5tT,EAAQ2uT,EAAmBC,EAAYl7K,OAAgBh3J,YAAW,IAAMoM,GAAOkX,EAAQ2uT,KAEnQE,CAASn7K,GAAc53J,KAAKu4I,GAAmBy6L,IAXrBj7b,KACrB6yK,KACH8nR,EAAoB5gc,IAAI,CACtB4yE,QAAS3sE,EAAQ2sE,QACjBuuX,YAAal7b,EAAQ0iB,KAAKlb,QAE9B,EAME2zb,CAAoBF,EAAWj7b,SAC/Bi7b,EAAW/7K,WAAWhvN,MAAKgvN,IACzBy7K,EAAoB9gc,MAAMd,KAAIohc,IAC5B,MAAMn6b,EAAUi7b,EAAWj7b,QACvBm6b,EAAGxtX,UAAY3sE,EAAQ2sE,UAG3BguX,EAAoB5gc,IAAI,IACnBogc,EACHe,YAAal7b,EAAQ0iB,KAAKlb,SAExBozb,EAAS/gc,OACXwnY,GAAmCl1P,EAAQ,CAAE/hG,MAAOpqC,EAAQoqC,QA34cxC,EAAC+hG,EAAQh9H,KACvCg9H,EAAO7xH,SAAS,sBAAuBnL,EAAK,EA24clCisb,CAAwBjvT,EAAQ,CAAE+yI,iBAElC07K,EAAS7gc,KAAI,GACbsnY,GAAmCl1P,EAAQ,CAAE/hG,MAAOpqC,EAAQoqC,QAl5czC,EAAC+hG,EAAQh9H,KACtCg9H,EAAO7xH,SAAS,qBAAsBnL,EAAK,EAk5cjCksb,CAAuBlvT,EAAQ,CAAE+yI,gBACnC,GACA,GACF,GACF,EAOEo8K,EAAkB,IACfX,EAAoB9gc,MAAMwmE,MAAK,EAAEsM,cACtC,MAAM4uX,EAAWpvT,EAAOI,UAAUwjC,SAClC,OAAOv6I,GAAW22G,EAAOrgB,IAAKyvU,EAAU5uX,EAASiuX,EAAS/gc,OAAOmE,QAAO,EAAEosC,WARjD,EAACoxZ,EAAYC,KACxC,MAAMC,EAAkBF,EAAWrwB,sBAAsBnwa,OAAOkqb,MAAM9Z,eAAgBqwB,GAChFE,EAAgBH,EAAWrwB,sBAAsBnwa,OAAOkqb,MAAM7Z,WAAYowB,GAChF,OAAOC,GAAmB,GAAKC,GAAiB,CAAC,EAKsCC,CAAqBL,EAAUnxZ,KAAQrxC,KAAI,EAAEqxC,WAAWA,GAAM,IAGvJ+hG,EAAOyvB,WAAW,0BAA0B,CAACvC,EAAK/+J,KAChD,MAAMulR,EAAe94O,EAASzsC,GAASA,EAAMulR,aAAe,CAAC,EAC7D1oQ,EAAK0oQ,EAAa,IAEpB1zI,EAAOyvB,WAAW,wBAAyB4kG,GAC3Cr0H,EAAOyvB,WAAW,sCAAsC,KACtD0/R,IAAkB9zZ,MAAK4C,IACrBi3V,GAAmCl1P,EAAQ,CAAE/hG,SAAQ,GACrD,IAEJ+hG,EAAO0vT,eAAep+P,qBAAqB,2BAA2B,IAAM69P,IAAkBlzU,WAxFvE,EAAC+jB,EAAQ1C,KAChC,MAAM36E,EAASjiB,GAAK48F,EAAItyH,KAAM,IAC9Bg1H,EAAO8K,GAAG,SAAS13I,KACG,0BAAhBA,EAAEk/a,WAA0CtyS,EAAOy4P,YAGvD91U,EAAO2jH,UAAU,IAEnBtmC,EAAO8K,GAAG,WAAW13I,IACnB,MAAM4rL,EAAU5rL,EAAEmsK,MACF,IAAZyf,EACFr8H,EAAO2jH,WACc,KAAZ0Y,GACTr8H,EAAOlB,SACP67E,EAAI+2H,qBACiB,KAAZr1E,GAA8B,KAAZA,GAC3Br8H,EAAOlB,QACT,IACC,GACHu+E,EAAO8K,GAAG,SAAUnoF,EAAOlB,OAAO,EAsElCkuY,CAAiB3vT,EAAQ,CACvBq0H,oBACArpP,QACA,EAIE8gH,GADYyK,KAAWjJ,QACFxB,WACrB8jU,GAAoB54b,GAAQy9W,GAAkB1zP,GAAaS,QAAQxqH,IACnE64b,GAAuB,CAAClrS,EAAK3tJ,KACjC,IAAI2H,EACJ,OAA2B,IAApBgmJ,EAAIkN,aAAqBlN,EAAIoN,aAA2C,QAA3BpzJ,EAAK3H,EAAK4uB,mBAAgC,IAAPjnB,OAAgB,EAASA,EAAGtD,OAAO,EAEtHy0b,GAA+B,CAACnwU,EAAKtmE,IAAQqiE,EAASlwH,KAAKm0H,EAAIwgB,UAAU9mF,EAAIwB,YAAa,YAC1Fk1Y,GAAqB,CAACpwU,EAAKtmE,IAAQy2Y,GAA6BnwU,EAAKtmE,GAAK4iE,SAyB1E+zU,GAA0B,CAACtxD,EAAUuxD,IAAoBA,EAAgBC,aAAa7zU,QAAOssU,GAVnE,EAACjqD,EAAUlwY,IAAYq8X,GAAgBr8X,GAAS6tH,QAAOhjE,GAAOA,EAAIsgU,QAAQ+kB,KAUIyxD,CAAwBzxD,EAAUiqD,KAC1IyH,GAAwB,CAAC1xD,EAAUuxD,IAAoBA,EAAgBC,aAAa7zU,QAAOssU,GAVvE,EAACjqD,EAAUlwY,IAC5Bs8X,GAAet8X,GAAS6tH,QAAOhjE,GAChCg6S,GAAOh6S,EAAIw1H,YACN+7M,GAAap8X,EAAS6qD,GAAKgjE,QAAO09P,GAAQA,EAAKJ,QAAQ+kB,MAEvDrlV,EAAIsgU,QAAQ+kB,KAKmF2xD,CAAkB3xD,EAAUiqD,KAGlI2H,GAAqB,CAACtwT,EAAQ3pH,KAClC,MAAMrf,EAAOqf,EAASw4J,UACjB9zD,EAAY/jH,IACfgpI,EAAOI,UAAUquB,kBAAkBz3J,EAAMqf,EAASyzB,SACpD,EAEIymZ,GAAwB,CAACvwT,EAAQ3mF,EAAK2xI,KAC1C,MAAM93L,EAAU8sI,EAAOrgB,IAAIwgB,UAAU9mF,EAAIwB,YAAa,WACtD,GAAI3nD,IAAYA,EAAQkyB,KAAM,CAC5B,MAAMuja,EAAU3oT,EAAOrgB,IAAIrsH,OAAO,UAAWJ,GAAS,GACtD,GAAIy1b,EAAS,EACI39P,EAAU6/L,GAAgB89D,GAAW79D,GAAe69D,IAC5DttZ,MAAKge,GAAOi3Y,GAAmBtwT,EAAQ3mF,IAChD,CACF,MACEi3Y,GAAmBtwT,EAAQ3mF,EAC7B,EAWIm3Y,GAAiC,CAACxwT,EAAQgrD,EAASylQ,KACvD,MAAM,IAAC9wU,EAAG,UAAEygB,GAAaJ,EACnBl5F,EAAOk5F,EAAO5tC,UACpB,GAAoB,cAAhBq+V,EAA6B,CAC/B,MAAM/xD,EAAWjlB,GAAcG,eAAex5O,EAAUwjC,UAClD1jC,EAAcvgB,EAAIwgB,UAAUu+P,EAAS7jV,YAAa8kE,EAAI2gB,SACtDowT,EAAuBZ,GAA6BnwU,EAAK++Q,GACzDiyD,EAAqBzwT,GAAevgB,EAAI4uC,QAAQruB,GAChD0wT,EAAe/1U,EAAuB,OAAhBqlB,QAAwC,IAAhBA,OAAyB,EAASA,EAAYjd,iBAC5F4tU,EAAch2U,EAAuB,OAAhBqlB,QAAwC,IAAhBA,OAAyB,EAASA,EAAYhd,aACjG,GAAIytU,EAAoB,CAEtB,GADoB3lQ,EAAU6lQ,EAAcD,EAC3B,CAIf,GAH6Bv3R,IAAU2xB,EAASlkJ,EAAM43V,GAAUriR,QAAOhjE,GAC9D02Y,GAAmBpwU,EAAKtmE,KAASu2I,GAAO8gQ,EAAsBZ,GAA6BnwU,EAAKtmE,MAGvG,OAAO,CAEX,CACF,CACA,OAAOggH,GAAS2xB,EAASlkJ,EAAM43V,GAAU5iR,KAAKN,GAAOniE,IACnD,MAAMy3Y,EAAwBhB,GAA6BnwU,EAAKtmE,GAChE,GAAI02Y,GAAmBpwU,EAAKtmE,KAASu2I,GAAO8gQ,EAAsBI,GAAwB,CAIxF,GAHK9lQ,GACHulQ,GAAsBvwT,EAAQ3mF,GAAK,GAEjC6mF,GAAeywT,EAAoB,CACrC,GAAI3lQ,GAAW4lQ,EACb,OAAO,EACF,IAAK5lQ,GAAW6lQ,EACrB,OAAO,EAETN,GAAsBvwT,EAAQ3mF,EAAK2xI,GACnChrD,EAAOrgB,IAAIj+D,OAAOw+E,EACpB,CACA,OAAO,CACT,CACE,OAAO,CACT,GAEJ,CACE,OAAO,CACT,EAEI6wT,GAAmC,CAAC/wT,EAAQgxT,EAAgBhmQ,EAASylQ,KACzE,MACM9rS,EADY3kB,EAAOI,UACHwjC,SAChB86N,EAAWjlB,GAAcG,eAAej1N,GACxC79G,EAAOk5F,EAAO5tC,UACpB,MAAoB,cAAhBq+V,EA3DkB,EAAC9rS,EAAKsrS,KAC5B,MAEMgB,EAAiBhB,EAAgBC,aAAa7zU,QAF9B7tH,GAAWA,EAAQsG,SAAS6vJ,EAAIiN,kBAGhDs/R,EAAejB,EAAgBC,aAAa7zU,QAF9B7tH,GAAWA,EAAQsG,SAAS6vJ,EAAImN,gBAG9Cq/R,EAAqClB,EAAgBmB,aAAa90U,QAAO80U,GAAgBnB,EAAgBoB,WAAW/0U,QAAO+0U,GAAcD,IAAiBC,MAEhK,OADsCJ,GAAkBC,MAAmBD,GAAkBC,IACtDC,CAAkC,EAqDhEG,CAAgB3sS,EAAKqsS,GACnBhmQ,EACFolQ,GAAsB1xD,EAAUsyD,IAjFP,EAAClqZ,EAAM43V,EAAUuxD,IAAoBA,EAAgBmB,aAAa/0U,QAAOnpH,GAAWy3X,GAAa7jV,EAAM43V,GAAUpiR,QAAOjjE,IAAQnmD,EAAQ4B,SAASukD,EAAIwB,iBAiF3H02Y,CAA4BzqZ,EAAM43V,EAAUsyD,GAE/FhB,GAAwBtxD,EAAUsyD,IApFR,EAACtyD,EAAUuxD,IAAoBA,EAAgBmB,aAAa/0U,QAAOnpH,GAAW03X,GAAa13X,EAASwrY,GAAUpiR,QAAOjjE,GAAO42Y,EAAgBC,aAAa7zU,QAAOssU,IAAYA,EAAQ7zb,SAAS4pY,EAAS7jV,cAAgB8tY,EAAQ7zb,SAASukD,EAAIwB,mBAoFhN22Y,CAA6B9yD,EAAUsyD,EACrG,EAEIS,GAA4B,CAACzxT,EAAQgrD,EAASylQ,IAjHzB,EAAC9wU,EAAKglC,KAC/B,MAAMysS,EAAe11U,EAASlwH,KAAKm0H,EAAIwgB,UAAUwkB,EAAIiN,eAAgB,YAC/Dy/R,EAAa31U,EAASlwH,KAAKm0H,EAAIwgB,UAAUwkB,EAAImN,aAAc,YACjE,GAAIs/R,EAAan1U,UAAYo1U,EAAWp1U,SAAU,CAChD,MAAMi0U,EAAekB,EAAal9X,MAAKhhE,GAAWwoH,EAASlwH,KAAKm0H,EAAIrsH,OAAO,UAAWJ,GAAS,MAC/F,OAAOwoH,EAAS/iH,KAAK,CACnBu3b,eACAkB,eACAC,cAEJ,CACE,OAAO31U,EAASE,MAClB,EAqGkE81U,CAAmB1xT,EAAOrgB,IAAKqgB,EAAOI,UAAUwjC,UAAU9nD,MAAK,IAAM00U,GAA+BxwT,EAAQgrD,EAASylQ,KAAcR,GAAmBc,GAAiC/wT,EAAQiwT,EAAiBjlQ,EAASylQ,IAAgBD,GAA+BxwT,EAAQgrD,EAASylQ,KACvVkB,GAA2B,CAAC3xT,EAAQgrD,EAASylQ,KACjD,MAAMrwT,EAAYJ,EAAOI,UACnBppI,EAAOopI,EAAUyuC,UACjBlqB,EAAMvkB,EAAUwjC,SAChB86N,EAAWjlB,GAAcG,eAAej1N,GAC9C,QAAImvM,GAAY98V,KACM,cAAhBy5b,GAA+BZ,GAAqBlrS,EAAK3tJ,IAAS60Y,GAAgC7gN,EAAS0zM,EAAU1nY,GACvH44b,GAAkB54b,GAElBgpI,EAAOoqB,YAAY+rB,UAAS,KAC1B,MAAM5d,EAAMn4B,EAAU+sP,SACtB,IAAI,WAACzwN,EAAU,aAAEE,EAAY,UAAED,EAAS,YAAEE,GAAuB,OAARtE,QAAwB,IAARA,EAAiBA,EAAM,CAAC,EACjG,MAAMiG,EAAiB,KACjBxjD,EAAc0hD,IAAe1hD,EAAc4hD,IAAiB5hD,EAAc2hD,IAAc3hD,EAAc6hD,KAChG,OAARtE,QAAwB,IAARA,GAA0BA,EAAIuD,iBAAiBY,EAAYE,EAAcD,EAAWE,GACtG,EAQI+0R,EAAsB,CAACpmc,EAAM0sC,KACjCi1T,EAAO3hW,EAAK41H,YAAYuF,IAClBqnQ,GAAOrnQ,IACTzuF,EAAG/Q,YAAYw/F,EACjB,GACA,EAEE9rE,EAAYmlF,EAAOrgB,IAAIn7G,OAAO,OAAQ,CAAE,iBAAkB,MAChEotb,EAAoB56b,EAAM6jD,GAC1B7jD,EAAKmwB,YAAY0zB,GACjB2jH,IACoB,SAAhBiyR,GAA0C,SAAhBA,GACpB,OAARl4R,QAAwB,IAARA,GAA0BA,EAAImjR,OAAO,SAAU1wP,EAAU,QAAU,OAAQylQ,IAExFrwT,EAAU+8C,eAAiB0yQ,GAAqBzvT,EAAUwjC,SAAU/oH,GACvE+0Y,GAAkB54b,IAElBgpI,EAAO+tC,YAAYid,EAAU,gBAAkB,UAtB/CtuB,EAAqB,OAARnE,QAAwB,IAARA,OAAiB,EAASA,EAAImE,WAC3DE,EAAuB,OAARrE,QAAwB,IAARA,OAAiB,EAASA,EAAIqE,aAC7DD,EAAoB,OAARpE,QAAwB,IAARA,OAAiB,EAASA,EAAIoE,UAC1DE,EAAsB,OAARtE,QAAwB,IAARA,OAAiB,EAASA,EAAIsE,YAqB5D+0R,EAAoB/2Y,EAAW7jD,GAC/BwnK,KAEFx+B,EAAOrgB,IAAIj+D,OAAO7G,EAAU,KAGzB,EAGT,EAEIk1I,GAAkB,CAAC/vD,EAAQgrD,EAASylQ,IAAgBgB,GAA0BzxT,EAAQgrD,EAASylQ,IAAgB3kU,IAAY6lU,GAAyB3xT,EAAQgrD,EAASylQ,GAAe/0U,EAAS/iH,KAAK8hC,GAAQihF,EAASE,OAEnNi2U,GAA0B36L,GAAa,CAACl3H,EAAQsyS,EAAWwf,EAAY,CAAC,KAC5E,MAAMrjc,EAASuxI,EAAO5tC,UAChBxrD,EAAY,CAChBv4B,SAAS,EACTgzJ,UAAU,EACVxjK,KAAM,KACNs+Y,aAAa,EACb/uZ,OAAQ,EACR68K,KAAM,KACNx7K,SACAgG,cAAehG,EACfsjc,WAAYvna,MAAMwna,UAClBC,eAAgBxjc,EAChByjc,uBAAwBzjc,EACxB0jc,WAAW,EACXpqF,WAAYt5W,EACZ6f,YAAY,EACZhgB,eAAgBmsC,EAChB63Y,aAEIn/a,EAAQq0W,GAAQ,IAAI4qF,WAAWl7L,IACrC,OAAOl3H,EAAO7xH,SAAS+oP,EAAW,IAC7B/jQ,KACAyzC,KACAkrZ,GACH,EAEEO,GAAiBR,GAAwB,SACzCS,GAAuBT,GAAwB,eAE/CU,GAAah8T,KACb1I,GAAK0kU,GAAW1kU,GAChB2kU,GAAe3kU,GAAGjB,WAAaiB,GAAGnB,QAElCb,GADU0mU,GAAWjlU,QACDzB,YAmLpB4mU,GAAU,CAACzyT,EAAQrwC,KACvB,IAAI+iW,GAAqB,EACzB1yT,EAAO8K,GAAG,WAAW+xC,IACnB61Q,EAAqB71Q,EAAImC,UAAYo2M,GAAGpjM,UACnCnV,EAAIkC,sBAtLoB,EAAC/+C,EAAQrwC,EAAOktF,KAC/C,MAAMy1P,EAAYz1P,EAAImC,UAAYo2M,GAAGpjM,UAAY,wBAA0B,uBACrE7U,EAAcn9C,EAAOI,UAAU+8C,cAC/Bw1Q,EAAwBx1Q,EAAc,YAAc,YACpDy1Q,EAAyBC,GACzB11Q,EACK01Q,EAAS,OAAS,OAElB,YAGX1J,GAAyB,CACvB,CACEnqQ,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAO4xb,GAAmB1lT,IAEpC,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAO2kb,GAAmBz4S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAO2kb,GAAmBz4S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOijb,GAAmB/2S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOijb,GAAmB/2S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOsub,GAAmBpiT,EAAQrwC,GAAO,IAEnD,CACEqvF,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOsub,GAAmBpiT,EAAQrwC,GAAO,IAEnD,CACEqvF,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOm+Y,GAAmBjyQ,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOm+Y,GAAmBjyQ,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAO2yT,IAEjD,CACE3zQ,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAM2yT,OAE7CH,GAAe,CAChB,CACExzQ,QAASo2M,GAAGpjM,UACZn/L,QAAQ,EACRiB,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAO4yT,GAAuB,KAExE,CACE5zQ,QAASo2M,GAAGnjM,OACZp/L,QAAQ,EACRiB,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAM4yT,GAAuB,KAEvE,CACE5zQ,QAASo2M,GAAGpjM,UACZr/L,SAAS,EACTmB,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAO4yT,GAAuB,MAEtE,CACF,CACE5zQ,QAASo2M,GAAGpjM,UACZp/L,SAAS,EACTkB,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAO4yT,GAAuB,KAExE,CACE5zQ,QAASo2M,GAAGnjM,OACZr/L,SAAS,EACTkB,OAAQA,GAAOi8L,GAAiB/vD,GAAQ,EAAM4yT,GAAuB,MAGzE,CACE5zQ,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOqlb,GAAmBn5S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOqlb,GAAmBn5S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAO2wb,GAAmBzkT,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAO2wb,GAAmBzkT,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOiib,GAAmB/1S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOiib,GAAmB/1S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOwhb,GAAmBt1S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOwhb,GAAmBt1S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOqwb,GAAmBnkT,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOqwb,GAAmBnkT,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAOklb,GAAmBh5S,GAAQ,IAE5C,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAOklb,GAAmBh5S,GAAQ,KAE3C68C,GAAKhrL,QAAO5C,GAAK+wI,EAAOI,UAAUme,eAAcljH,MAAKy3Z,IACtDj2Q,EAAIvuL,iBACgBgkc,GAAqBtyT,EAAQsyS,GAChCvzP,uBACf+zQ,IACAT,GAAeryT,EAAQsyS,GACzB,GACA,EA4CEygB,CAAyB/yT,EAAQrwC,EAAOktF,EAC1C,IAEF78C,EAAO8K,GAAG,SAAS+xC,IACZA,EAAIkC,sBA9CgB,EAAC/+C,EAAQ68C,EAAK61Q,KAAuBxtS,GAAQ,CACxE,CACE85B,QAASo2M,GAAGpjM,UACZl+L,OAAQA,GAAO0kb,GAAkBx4S,IAEnC,CACEg/C,QAASo2M,GAAGnjM,OACZn+L,OAAQA,GAAO0kb,GAAkBx4S,OAEhCwyT,GAAe,CAChB,CACExzQ,QAASo2M,GAAGpjM,UACZn/L,QAAQ,EACRiB,OAAQA,GAAOwwb,GAActkT,IAE/B,CACEg/C,QAASo2M,GAAGnjM,OACZp/L,QAAQ,EACRiB,OAAQA,GAAOwwb,GAActkT,OAE5B0yT,EAAqB,CAAC,CACrB1zQ,QAASnzD,GAAY,IAAM,GAC3B/3H,OAAQA,GAAOwwb,GAActkT,KAC1B,IACL,CACF,CACEg/C,QAASo2M,GAAGpjM,UACZp/L,SAAS,EACTkB,OAAQA,GAAOwwb,GAActkT,IAE/B,CACEg/C,QAASo2M,GAAGnjM,OACZr/L,SAAS,EACTkB,OAAQA,GAAOwwb,GAActkT,MAGhC68C,EAAI,EAWDm2Q,CAAqBhzT,EAAQ68C,EAAK61Q,GAEpCA,GAAqB,CAAK,GAC1B,EAYEO,GAAsB,CAACjzT,EAAQl5F,KACnC,MAAM64E,EAAMqgB,EAAOrgB,IACbyhP,EAAoCphO,EAAO5vI,OAAOwzW,oCACxD,IAAK98T,EACH,OAEF,GAAI,eAAe11C,KAAK01C,EAAK84E,UAAW,CACtC,MAAMgE,EAhB4B5sH,KACpC,KAAOA,GAAM,CACX,GAAI07V,GAAY17V,IAASi8V,GAASj8V,IAASA,EAAK6G,MAAQ,WAAWzM,KAAK4F,EAAK6G,MAC3E,OAAO7G,EAETA,EAAOA,EAAKksH,WACd,CACA,OAAO,IAAI,EASUgwU,CAA8BpsZ,EAAK88E,YAClDA,GAAc,eAAexyH,KAAKwyH,EAAWhE,WAC/C94E,EAAKy8E,aAAa5D,EAAI+F,IAAInE,eAAekwO,IAAO3qT,EAAK88E,WAEzD,CACA,MAAM+gC,EAAMhlC,EAAIilC,YAEhB,GADA99G,EAAK4W,YACD5W,EAAKq6E,gBAAiB,CACxB,MAAMgzD,EAAS,IAAIg9K,GAAcrqT,EAAMA,GACvC,IACI9vC,EADAooI,EAAWt4F,EAEf,KAAO9vC,EAAOm9K,EAAO93I,WAAW,CAC9B,GAAI42T,GAASj8V,GAAO,CAClB2tJ,EAAIK,SAAShuJ,EAAM,GACnB2tJ,EAAIM,OAAOjuJ,EAAM,GACjB,KACF,CACA,GAAIoqW,EAAkCpqW,EAAK4oH,SAASnwH,eAAgB,CAClEk1J,EAAIqM,eAAeh6J,GACnB2tJ,EAAIuM,aAAal6J,GACjB,KACF,CACAooI,EAAWpoI,EACXA,EAAOm9K,EAAO/9H,MAChB,CACKp/C,IACH2tJ,EAAIK,SAAS5lB,EAAU,GACvBulB,EAAIM,OAAO7lB,EAAU,GAEzB,MACMi0N,GAAOvsT,GACLA,EAAKo8E,aAAevD,EAAI2gB,QAAQx5F,EAAKo8E,cACvCyhC,EAAIqM,eAAelqH,GACnB69G,EAAIuM,aAAapqH,KAEjB69G,EAAIsM,cAAcnqH,GAClB69G,EAAIwM,YAAYrqH,KAGlB69G,EAAIK,SAASl+G,EAAM,GACnB69G,EAAIM,OAAOn+G,EAAM,IAGrBk5F,EAAOI,UAAU0kB,OAAOH,GACxBw3O,GAAoBn8P,EAAQ2kB,EAAI,EAE5BwuS,GAAkB,CAACxzU,EAAK3oH,KAC5B,MAAM8vC,EAAO64E,EAAIyhE,UACjB,IAAIgyQ,EACAl+Y,EAASl+C,EACb,KAAOk+C,IAAWpO,GAAQoO,GAA6C,UAAnCyqE,EAAI4rE,mBAAmBr2I,IAAqB,CAC9E,GAAuC,SAAnCyqE,EAAI4rE,mBAAmBr2I,GAAoB,CAC7Ck+Y,EAAel+Y,EACf,KACF,CACAA,EAASA,EAAOxtB,UAClB,CACA,OAAOwtB,IAAWpO,EAAOssZ,EAAetsZ,CAAI,EAExCusZ,GAAmBrzT,GAChBtkB,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUC,UAAS,GAAOL,EAAOrgB,IAAI2gB,UAYlF8vQ,GAAavnR,IACjBA,EAAIpsG,UAAY,yBAAyB,EA6BrC62a,GAAsB,CAACtzT,EAAQhpI,KAEnC,GAD4BsqL,GAAmBthD,GACvBvwI,gBAAkBuH,EAAK3G,QAAQZ,cAAe,CA7BhD,EAACuwI,EAAQhpI,EAAMu8b,KACrC,MAAM5zU,EAAMqgB,EAAOrgB,IACnBjE,EAASlwH,KAAK+nc,EAAqBz2a,OAAOlwB,IAAI+yH,EAAImyL,YAAYz2Q,MAAKm4Z,IACjE,MACMx6C,EAAY,IADItkN,GAAU3zE,GAAaS,QAAQxqH,OAGhDw8b,GAEL7zU,EAAI0yD,UAAUr7K,EAAMgiZ,EAAU,IAEhC,MAAMy6C,EAAiB/3U,EAASlwH,KAAK+nc,EAAqB58Q,OAAO/pL,KAAI8mc,GAAeA,EAAYxic,MAAM,SAChGyic,EAAoBj4U,EAASlwH,KAAKwL,EAAKs3K,WAAW1hL,KAAIgnc,GAAkBvmG,EAASumG,EAAe1ic,MAAM,QAAQ09J,GAAmB,KAAVA,MAC7HoxB,GAAMyzQ,EAAgBE,GAAmB,CAACD,EAAaE,KACrD,MAAMC,EAAkBxmG,EAASumG,GAAgBhlS,IAAUvxC,EAAWq2U,EAAa9kS,KAC7EklS,EAAa,IACdJ,KACAG,GAELl0U,EAAIyxE,UAAUp6L,EAAM,QAAS88b,EAAW7lc,KAAK,KAAK,IAEpD,MAAM8lc,EAAe,CACnB,QACA,SAEIC,EAAiBrmG,GAAS4lG,GAAsB,CAACtkc,EAAGuxH,KAAWnD,EAAW02U,EAAcvzU,KAC9Fb,EAAI62D,WAAWx/K,EAAMg9b,EAAe,EAMlCz5K,CAAgBv6I,EAAQhpI,EADKuqL,GAAwBvhD,GAEvD,GAEIi0T,GAAiB,CAACj0T,EAAQnlF,EAAWqlF,EAAakzT,EAAcc,GAAa,EAAM/hc,EAAMinD,KAC7F,MAAMumE,EAAMqgB,EAAOrgB,IACbvvH,EAAS4vI,EAAO5vI,OAChB+jc,EAAe7yQ,GAAmBthD,GAClCo0T,EAAkBl0T,EAAcA,EAAYtgB,SAASzwH,cAAgB,GAC3E,IAAI6H,EAAO6jD,EACX,MAAM49V,EAAqBroZ,EAAOslL,wBAClC,IAAIkW,EAEFA,EADEz5L,GAA4B,UAApBiic,GAAmD,OAApBA,EACjCz0U,EAAIn7G,OAAOrS,GAAQgic,EAAc/6Y,GAAU,CAAC,GAE5C8mF,EAAY5b,WAAU,GAEhC,IAAI01T,EAAYpuP,EAChB,GAAKsoQ,GAIH,GACE,GAAIz7C,EAAmBzhZ,EAAK4oH,UAAW,CACrC,GAAIorQ,GAAYh0X,IAAS01X,GAAiB11X,GACxC,SAEF,MAAM2pa,EAAa3pa,EAAKstH,WAAU,GAClC3E,EAAIyxE,UAAUuvO,EAAY,KAAM,IAC5B/0O,EAAMzqE,iBACRw/S,EAAWx5Y,YAAYykK,EAAMhoE,YAC7BgoE,EAAMzkK,YAAYw5Y,KAElBqZ,EAAYrZ,EACZ/0O,EAAMzkK,YAAYw5Y,GAEtB,SACQ3pa,EAAOA,EAAK0wB,aAAe1wB,IAASo8b,QAlB9CzzU,EAAIyxE,UAAUxF,EAAO,QAAS,MAC9BjsE,EAAIyxE,UAAUxF,EAAO,QAAS,MAqBhC,OAFA0nQ,GAAoBtzT,EAAQ4rD,GAC5BwkN,GAAW4pC,GACJpuP,CAAK,EAeRyoQ,GAA4B,CAACr0T,EAAQltI,EAAUtE,KAAasE,GAAYtE,EAAQoxH,SAASnwH,gBAAkB6xL,GAAmBthD,IAAWA,EAAOrgB,IAAI4uC,QAAQ//J,IAX1I,EAACs4C,EAAMt4C,EAASqyL,KACtC,IAAI7pL,EAAOxI,EACX,KAAOwI,GAAQA,IAAS8vC,GAAQ+zE,EAAO7jH,EAAKksH,cAAc,CACxD,MAAMhuE,EAASl+C,EAAK8L,cACpB,IAAKoyC,IAAW2rI,EAAY3rI,GAC1B,OAAO2+S,GAAU3+S,GAEnBl+C,EAAOk+C,CACT,CACA,OAAO,CAAK,EAEgKo/Y,CAAgBt0T,EAAO5tC,UAAW5jG,GAASutD,GAAM23I,GAAM1zD,EAAO5vI,OAAO0wL,uBAAwB/kI,EAAG6jE,SAASnwH,iBACjR8kc,GAAgB,CAACv0T,EAAQi0T,EAAgB/zT,KAC7C,IAAIvhI,EAAI+/I,EAAI0yK,EACZ,MAAM9uI,EAAW2xQ,EAAe3yQ,GAAmBthD,IAC7Cl5F,EAhBe,EAACk5F,EAAQxxI,IAAYwxI,EAAOrgB,IAAIwgB,UAAU3xI,EAASqlW,IAgB3D2gG,CAAex0T,EAAQE,GAC/Bp5F,IAGLk5F,EAAOrgB,IAAI8iE,YAAYH,EAAUx7I,GACjCmsZ,GAAoBjzT,EAAQsiD,IAC8H,QAApJ8uI,EAAoG,QAA9F1yK,EAA0C,QAApC//I,EAAKuhI,EAAYp9H,qBAAkC,IAAPnE,OAAgB,EAASA,EAAGyiH,kBAA+B,IAAPs9B,OAAgB,EAASA,EAAGrjJ,cAA2B,IAAP+1T,EAAgBA,EAAK,GAAK,GAC1LpxL,EAAOrgB,IAAIj+D,OAAOw+E,GACpB,EAUIu0T,GAAY,CAAC5rU,EAAKa,KACtB,MAAMhiG,EAAqB,OAARmhG,QAAwB,IAARA,OAAiB,EAASA,EAAInhG,WACjE,OAAOszF,EAActzF,IAAeA,EAAWk4F,WAAa8J,CAAU,EAElEgrU,GAAc7rU,GACX7N,EAAc6N,IAAQ,eAAez3H,KAAKy3H,EAAIjJ,UAEjDu+B,GAAat1B,GACV7N,EAAc6N,IAAQ,eAAez3H,KAAKy3H,EAAIjJ,UAKjD+0U,GAAoBC,IACxB,MAAMC,EAAuBD,EAAelta,WAC5C,OAAOy2H,GAAW02S,GAAwBA,EAAuBD,CAAc,EAE3EE,GAAkB,CAACF,EAAgB10T,EAAan9D,KACpD,IAAI/rE,EAAO49b,EAAe7xX,EAAQ,aAAe,aACjD,KAAO/rE,IACD07V,GAAY17V,IAGhBA,EAAOA,EAAK+rE,EAAQ,cAAgB,mBAEtC,OAAO/rE,IAASkpI,CAAW,EAEvBmrL,GAAYxiM,GAAO3K,EAAMkB,GAAWs1E,GAAU3zE,GAAaS,QAAQqH,KAAO,CAAC/rG,EAAO2jY,IAAc,GAAIA,MAAgB3jY,QAAY,CAACwkC,EAAKhxC,IAAMgxC,EAAMhxC,GAAG,IACrJykb,GAAW,CAAC/0T,EAAQi0T,EAAgBW,EAAgB10T,EAAai0T,KACrE,MAAMx0U,EAAMqgB,EAAOrgB,IACbglC,EAAM3kB,EAAOI,UAAUwjC,SACvBoxR,EAAkBJ,EAAelta,WACvC,GAAIkta,IAAmB50T,EAAO5tC,YAAc4iW,EAC1C,OAvBiBnsU,MACZ6rU,GADY7rU,EAyBF+rU,IAxBUF,GAAY7rU,EAAInhG,cAyBzCysa,EAAe,MAEjB,MAAMc,EAAoB92S,GAAWje,GAAemrL,GAAUnrL,QAAetwI,EAC7E,IAAI0yL,EAAWnkC,GAAWje,IAAgB+0T,EAAoBhB,EAAeE,EAAc,CAAEr3a,MAAOuuS,GAAUnrL,KAAkB+zT,EAAeE,GAC/I,GAAIW,GAAgBF,EAAgB10T,GAAa,IAAS40T,GAAgBF,EAAgB10T,GAAa,GACrG,GAAIu0T,GAAUG,EAAgB,MAAO,CACnC,MAAMC,EAAuBF,GAAkBC,GAC/Cj1U,EAAI8iE,YAAYH,EAAUuyQ,GA/CXhsU,KACnB,IAAIlqH,EACJ,OAAkC,QAAzBA,EAAKkqH,EAAInhG,kBAA+B,IAAP/oB,OAAgB,EAASA,EAAGilH,cAAgBiF,CAAG,EA8CjF45G,CAAamyN,GACfj1U,EAAIj+D,OAAOmzY,GAEXl1U,EAAIj+D,OAAOkzY,EAEf,MACEj1U,EAAI3wH,QAAQszL,EAAUsyQ,QAEnB,GAAIE,GAAgBF,EAAgB10T,GAAa,GAClDu0T,GAAUG,EAAgB,OAC5Bj1U,EAAI8iE,YAAYH,EAAUqyQ,GAAkBC,IAC5CtyQ,EAASn7J,YAAYw4F,EAAI+F,IAAInE,eAAe,MAC5C+gE,EAASn7J,YAAYyta,IAErBI,EAAgBzxU,aAAa++D,EAAUsyQ,GAEzCj1U,EAAIj+D,OAAOw+E,QACN,GAAI40T,GAAgBF,EAAgB10T,GAAa,GACtDvgB,EAAI8iE,YAAYH,EAAUqyQ,GAAkBC,IAC5Cj1U,EAAIj+D,OAAOw+E,OACN,CACL00T,EAAiBD,GAAkBC,GACnC,MAAMryQ,EAAS59B,EAAI8yB,aACnB8K,EAAOtxB,cAAc/wB,GACrBqiD,EAAOpxB,YAAYyjS,GACnB,MAAMjzQ,EAAWY,EAAOC,kBACxB,GAAqB,OAAjB2xQ,GA7Ec,EAACtrU,EAAK12H,IACnB02H,EAAIjF,YAAciF,EAAIjF,WAAWhE,WAAaztH,EA4EtB+ic,CAAcvzQ,EAAU,MAAO,CAC1D,MAAMwzQ,EAAmB9nG,EAASH,EAAM5qK,EAASn+D,SAAUpD,GAAaS,SAAUjG,EAAI6E,GAAM,QAC5FkiE,EAAWX,EAAS/9D,WACpBjE,EAAI8iE,YAAYd,EAAUizQ,GAC1BznG,EAAOgoG,GAAkBxuU,GAASjD,GAAQ3C,GAAaS,QAAQ8gE,GAAW37D,KACtEsuU,GACF3yQ,EAAS78K,aAAa,QAASwvb,EAEnC,MACEt1U,EAAI8iE,YAAYd,EAAUizQ,GAC1Bj1U,EAAI8iE,YAAYH,EAAUsyQ,GAE5Bj1U,EAAIj+D,OAAOw+E,EACb,CACA+yT,GAAoBjzT,EAAQsiD,EAAS,EAajC8yQ,GAAgB,CAACz1U,EAAKkJ,IACnBA,GAAwB,MAAjBA,EAAIjJ,UAAoBD,EAAI4uC,QAAQ1lC,GAE9CwsU,GAAkC,CAACx6Y,EAAW+kE,IAC3C/kE,EAAU+kE,WAAaA,GAAY/kE,EAAUooE,iBAAmBpoE,EAAUooE,gBAAgBrD,WAAaA,EAK1G01U,GAAgB,CAAC31U,EAAK3oH,IACnBgkH,EAAchkH,IAAS2oH,EAAI2gB,QAAQtpI,KAAU,yBAAyB5F,KAAK4F,EAAK4oH,YAAc,qBAAqBxuH,KAAK4F,EAAK8lB,MAAMzG,WAAaspG,EAAI4+B,WAAWvnJ,EAAK0wB,aAAgD,UAAjCi4F,EAAI4rE,mBAAmBv0L,GA6B7Mu+b,GAAsB,CAACnpc,EAAOyuD,EAAW/Q,IACxCmpT,GAASp4S,GAEHzuD,EACS,IAAX09C,GAAgB+Q,EAAUh9C,KAAKvO,OAAOw6C,EAAS,KAAO4qU,GAAS,EAAI5qU,EAEnEA,IAAW+Q,EAAUh9C,KAAKxC,OAAS,GAAKw/C,EAAUh9C,KAAKvO,OAAOw6C,KAAY4qU,GAAS75T,EAAUh9C,KAAKxC,OAASyuC,EAJ3GA,EAkQL0rZ,GAAa,CACjBlwT,OAlLe,CAACtF,EAAQ68C,KACxB,IAAIhiI,EACA/Q,EACAsqZ,EACAQ,EACAa,GAA6B,EACjC,MAAM91U,EAAMqgB,EAAOrgB,IACWwhP,EAAfnhO,EAAO5vI,OAAqC29L,sBACrDppC,EAAM3kB,EAAOI,UAAUwjC,SACvBuwR,EAAe7yQ,GAAmBthD,GAClC5zI,EAAQ20H,GAAaS,QAAQmjC,EAAIiN,gBACjCjrC,EAAQC,GAAQx6H,EAAOu4J,EAAIkN,aAC3B6jS,EAAQ/uU,EAAMtK,QAAO7tH,GAAWohW,GAAgBphW,KAAauiW,GAAaviW,KAC1Emnc,EAAkBhxS,EAAI0N,WAAaqjS,EACnCE,EAAmB,CAACzjc,EAAMinD,IACvB66Y,GAAej0T,EAAQnlF,EAAWqlF,EAAakzT,EAAc30E,GAAiBz+O,GAAS7tI,EAAMinD,GAEhGy8Y,EAA6Bzpc,IACjC,MAAM0pc,EAAmBP,GAAoBnpc,EAAOyuD,EAAW/Q,GAC/D,GAAImpT,GAASp4S,KAAezuD,EAAQ0pc,EAAmB,EAAIA,EAAmBj7Y,EAAUh9C,KAAKxC,QAC3F,OAAO,EAET,IAAKw/C,EAAUnzB,aAAew4G,GAAerlF,IAAcqlF,IAAgBu1T,IAA+Brpc,EACxG,OAAO,EAET,GAAIA,GAASsmW,GAAY73S,IAAcA,IAAcqlF,EAAYtc,WAC/D,OAAO,EAET,GAAIyxU,GAAgCx6Y,EAAW,UAAYw6Y,GAAgCx6Y,EAAW,MACpG,MAjJ8B,EAACA,EAAW+kE,IACvC/kE,EAAU+kE,WAAaA,GAAY/kE,EAAUqoE,aAAeroE,EAAUqoE,YAAYtD,WAAaA,EAgJ9Fm2U,CAA4Bl7Y,EAAW,OACjCzuD,EAEHqpc,IAA+Brpc,IAAUqpc,GAA8Brpc,EAEhF,MAAM+nL,EAAS,IAAIg9K,GAAct2S,EAAWqlF,GAQ5C,IAAIlpI,EACJ,IARIi8V,GAASp4S,KACPzuD,GAA8B,IAArB0pc,EACX3hR,EAAOj8H,OACG9rD,GAAS0pc,IAAqBj7Y,EAAUh9C,KAAKxC,QACvD84K,EAAO/9H,QAIJp/C,EAAOm9K,EAAO93I,WAAW,CAC9B,GAAIq2T,GAAY17V,IACd,IAAKA,EAAK3D,aAAa,kBAAmB,CACxC,MAAMlB,EAAO6E,EAAK4oH,SAASnwH,cAC3B,GAAI0xW,EAAoBhvW,IAAkB,OAATA,EAC/B,OAAO,CAEX,OACK,GAAI8gW,GAASj8V,KAAU46V,GAAiB56V,EAAK6G,MAClD,OAAO,EAELzR,EACF+nL,EAAOj8H,OAEPi8H,EAAO/9H,MAEX,CACA,OAAO,CAAI,EAEP4/Y,EAAsB,KAC1B,IAAIpqQ,EAYJ,OAVEA,EADE,wBAAwBx6L,KAAKgjc,IAA2C,WAAvB6B,EAC3CL,EAAiBzB,GAEjByB,IA7Ea,EAAC51T,EAAQnlF,KAClC,MAAMq7Y,EAAcx3E,GAA+B1+O,GACnD,OAAI/kB,EAAWpgE,KAEJ+/D,EAASs7U,GACX74U,EAAW9C,GAAM+yK,QAAQ4oK,GAAcr7Y,EAAU+kE,SAASnwH,eAE1Dymc,EACT,EAuEMC,CAAmBn2T,EAAQ40T,IAAmBU,GAAc31U,EAAKi1U,IAAmBj1U,EAAI4uC,QAAQruB,OAAatwI,EAAW,CAAEqkW,aAAa,IACzIroK,EAAQjsE,EAAIzuH,MAAM0jc,EAAgB10T,GAElCvgB,EAAI8iE,YAAYmJ,EAAO1rD,GAEzB+yT,GAAoBjzT,EAAQ4rD,GACrBA,CAAK,EAEdouM,GAAYr6Q,EAAKglC,GAAKtpH,MAAK4+V,IACzBt1O,EAAIK,SAASi1O,EAAQroO,eAAgBqoO,EAAQpoO,aAC7ClN,EAAIM,OAAOg1O,EAAQnoO,aAAcmoO,EAAQloO,UAAU,IAErDl3G,EAAY8pG,EAAIiN,eAChB9nH,EAAS66G,EAAIkN,YACb,MAAM/+J,KAAc+pL,IAAOA,EAAI/pL,UACzBF,KAAaiqL,IAAOA,EAAIjqL,SAC1B8/V,GAAY73S,IAAcA,EAAUsmE,kBAAoBw0U,IAC1DF,EAA6B3rZ,EAAS+Q,EAAUumE,WAAW/lH,OAAS,EACpEw/C,EAAYA,EAAUumE,WAAW9lH,KAAKyW,IAAI+3B,EAAQ+Q,EAAUumE,WAAW/lH,OAAS,KAAOw/C,EAErF/Q,EADE2rZ,GAA8BxiG,GAASp4S,GAChCA,EAAUh9C,KAAKxC,OAEf,GAGb,MAAM+3b,EAAeD,GAAgBxzU,EAAK9kE,GAC1C,IAAKu4Y,GA7NyB,EAACpzT,EAAQhpI,KACvC,MAAMk4K,EAAalvC,EAAOrgB,IAAIwgB,UAAUnpI,EAAM,YAC9C,OAAsB,OAAfk4K,GAA2E,UAApDlvC,EAAOrgB,IAAIkuP,yBAAyB3+L,EAAuB,EA2NpEE,CAAwBpvC,EAAQnlF,GACnD,OAEG/nD,IACH+nD,EA9JsC,EAACmlF,EAAQm0T,EAAcxvS,EAAK9pG,EAAW/Q,KAC/E,IAAInrC,EAAI+/I,EACR,MAAM/+B,EAAMqgB,EAAOrgB,IACbyzU,EAA0D,QAA1Cz0b,EAAKw0b,GAAgBxzU,EAAK9kE,UAA+B,IAAPl8C,EAAgBA,EAAKghH,EAAIyhE,UACjG,IAAIlhD,EAAcvgB,EAAIwgB,UAAUtlF,EAAW8kE,EAAI2gB,SAC/C,IAAKJ,IAAgBo1T,GAAc31U,EAAKugB,GAAc,CAEpD,GADAA,EAAcA,GAAekzT,GACxBlzT,EAAY/e,gBAAiB,CAChC,MAAMmhE,EAAW3iE,EAAIn7G,OAAO2vb,GAK5B,OAJAb,GAAoBtzT,EAAQsiD,GAC5BpiD,EAAY/4G,YAAYm7J,GACxB39B,EAAIK,SAASs9B,EAAU,GACvB39B,EAAIM,OAAOq9B,EAAU,GACdA,CACT,CACA,IAIIoJ,EAJA10L,EAAO6jD,EACX,KAAO7jD,GAAQA,EAAK0wB,aAAew4G,GACjClpI,EAAOA,EAAK0wB,WAGd,KAAO1wB,IAAS2oH,EAAI2gB,QAAQtpI,IAC1B00L,EAAY10L,EACZA,EAAOA,EAAKisH,gBAEd,MAAMmzU,EAAyG,QAAxF13S,EAAmB,OAAdgtC,QAAoC,IAAdA,OAAuB,EAASA,EAAU5oL,qBAAkC,IAAP47I,OAAgB,EAASA,EAAG9+B,SACnJ,GAAI8rE,GAAa0qQ,GAAiBp2T,EAAO5vI,OAAOm0L,aAAa6xQ,EAAejC,EAAa1kc,eAAgB,CACvG,MAAM4mc,EAAkB3qQ,EAAUhkK,WAC5B46J,EAAW3iE,EAAIn7G,OAAO2vb,GAI5B,IAHAb,GAAoBtzT,EAAQsiD,GAC5B+zQ,EAAgB9yU,aAAa++D,EAAUoJ,GACvC10L,EAAO00L,EACA10L,IAAS2oH,EAAI2gB,QAAQtpI,IAAO,CACjC,MAAMo/C,EAAOp/C,EAAKksH,YAClBo/D,EAASn7J,YAAYnwB,GACrBA,EAAOo/C,CACT,CACAuuG,EAAIK,SAASnqG,EAAW/Q,GACxB66G,EAAIM,OAAOpqG,EAAW/Q,EACxB,CACF,CACA,OAAO+Q,CAAS,EAsHFy7Y,CAAkCt2T,EAAQm0T,EAAcxvS,EAAK9pG,EAAW/Q,IAEtF,IAAIo2F,EAAcvgB,EAAIwgB,UAAUtlF,EAAW8kE,EAAI2gB,UAAY3gB,EAAIyhE,UAC/DwzQ,EAAiB55U,EAA8B,OAAhBklB,QAAwC,IAAhBA,OAAyB,EAASA,EAAYx4G,YAAci4F,EAAIwgB,UAAUD,EAAYx4G,WAAYi4F,EAAI2gB,SAAW,KACxK8zT,EAAkBl0T,EAAcA,EAAYtgB,SAASzwH,cAAgB,GACrE,MAAM8mc,EAAqBrB,EAAiBA,EAAeh1U,SAASzwH,cAAgB,GACpF,GAA2B,OAAvB8mc,IAAgCrjc,EAAS,CAE3CstI,EADgB00T,EAEhBA,EAFgBA,EAESlta,WACzB0sa,EAAkB6B,CACpB,CACA,GAAIvjG,GAAYkiG,IAAmBP,GAA0Br0T,EAAQltI,EAAUotI,GAC7E,OAAOq0T,GAAcv0T,EAAQ41T,EAAkB11T,GAEjD,GAAI,eAAe9uI,KAAKgjc,IAAoB1hG,GAAYkiG,IAClDj1U,EAAI4uC,QAAQruB,GAEd,YADA60T,GAAS/0T,EAAQ41T,EAAkBhB,EAAgB10T,EAAai0T,GAIpE,IAAKwB,IAAoBz1T,IAAgBF,EAAO5tC,YAAckjW,GAAc31U,EAAKugB,IAC/E,OAEF,MAAMq2T,EAAoBr2T,EAAYx4G,WACtC,IAAI46J,EACJ,GAAIqzQ,EACFrzQ,EAAWszQ,EAAiBzB,GAC5BxtU,EAAM7K,MAAK,KACT2H,GAASr3H,EAAO20H,GAAaS,QAAQ8gE,GAAU,IAC9C37D,IACDrD,GAASqD,EAAO5F,GAAaS,QAAQ8gE,GAAU,IAEjDtiD,EAAOI,UAAUquB,kBAAkB6zB,EAAU,QACxC,GAAIwyL,GAAwB50O,GACjCoiD,EAAWkzL,GAAwBt1O,GAC/BvgB,EAAI4uC,QAAQruB,IACdkwQ,GAAWlwQ,GAEbozT,GAAoBtzT,EAAQsiD,GAC5B2wQ,GAAoBjzT,EAAQsiD,QACvB,GAAIuzQ,GAA2B,GACpCvzQ,EAAW0zQ,SACN,GAAIH,GAA2B,IAASU,EAAmB,CAChE,MAAM73D,EAAWjlB,GAAcG,eAAej1N,GACxC6xS,EAAanxD,GAAa3G,GAC1B+3D,EAAmB11U,GAAaS,QAAQ0e,GAExCw2T,EADUrwD,GAAUowD,EAAkB/3D,EAAU1+P,EAAO5vI,QACjCm2Y,GAAekwD,EAAkB/3D,EAAU1+P,EAAO5vI,QAAQ8jE,MAAK7a,GAAOqiE,EAASlwH,KAAK6tD,EAAIw1H,aAAcnzD,EAASE,OAC3I0mE,EAAWi0Q,EAAkBhzU,aAAaqyU,IAAoB11T,GAC9D,MAAMp5F,EAAOuuZ,GAAgCn1T,EAAa,OAASs2T,EAAal0Q,EAAWo0Q,EAAUn6U,MAAM2jB,GAC3G+yT,GAAoBjzT,EAAQl5F,EAC9B,KAAO,CACL,MAAMy7I,EAlOiB59B,KACzB,MAAMs0N,EAASt0N,EAAI8yB,aAGnB,OAFAwhM,EAAOj0N,SAASL,EAAIiN,eAAgB2jS,IAAoB,EAAM5wS,EAAIiN,eAAgBjN,EAAIkN,cACtFonN,EAAOh0N,OAAON,EAAImN,aAAcyjS,IAAoB,EAAO5wS,EAAImN,aAAcnN,EAAIoN,YAC1EknN,CAAM,EA8NI09E,CAAmBhyS,GAAK8yB,aACvC8K,EAAOpxB,YAAYjxB,GACnB,MAAMyhD,EAAWY,EAAOC,kBA9RXb,KACfwrK,EAAOpnO,GAAchF,GAAaS,QAAQmgE,GAAWmuK,KAAWv5U,IAC9D,MAAM+9V,EAAU/9V,EAAKopG,IACrB20P,EAAQ92O,UAAYm3O,GAAOL,EAAQz2W,KAAK,GACxC,EA2RAu6Z,CAASz2O,GA/NiB3qL,KAC5B,IAAIm2P,EAAcn2P,EAClB,GACMi8V,GAAS9lG,KACXA,EAAYtvP,KAAOsvP,EAAYtvP,KAAK7O,QAAQ,WAAY,KAE1Dm+P,EAAcA,EAAYvpI,iBACnBupI,EAAY,EAyNnBypM,CAAsBj1Q,GACtBW,EAAWX,EAAS/9D,WACpBjE,EAAI8iE,YAAYd,EAAUzhD,GA5Qc,EAACvgB,EAAKwhP,EAAqBv1K,KACrE,IAAIjtL,EACJ,MAAMk4b,EAAc,GACpB,IAAKjrQ,EACH,OAEF,IAAIuhE,EAAcvhE,EAClB,KAAOuhE,EAAcA,EAAYvpI,YAAY,CAC3C,GAAIjE,EAAI2gB,QAAQ6sH,GACd,OAEEulG,GAAYvlG,KAAiBg0G,EAAoBh0G,EAAYvtI,SAASnwH,gBACxEonc,EAAY7oc,KAAKm/P,EAErB,CACA,IAAIr8O,EAAI+lb,EAAYx7b,OACpB,KAAOyV,KACLq8O,EAAc0pM,EAAY/lb,KACrBq8O,EAAYhsI,iBAAmBgsI,EAAYvpI,aAAeupI,EAAY/sE,WAAmG,MAAnD,QAAjCzhL,EAAKwuP,EAAYvpI,kBAA+B,IAAPjlH,OAAgB,EAASA,EAAG6+H,YAGzJ43T,GAAcz1U,EAAKwtI,KAFvBxtI,EAAIj+D,OAAOyrM,EAMf,EAoPE2pM,CAAoCn3U,EAAKwhP,EAAqB7+K,GAhLrC,EAAC3iE,EAAKisE,KACjCA,EAAMluI,YACN,MAAM0iI,EAAYwL,EAAMxL,YACnBA,GAAasyK,GAAYtyK,IAAc,mBAAmBhvL,KAAKuuH,EAAI1jE,SAASmkI,EAAW,SAAS,MACnGzgE,EAAIn1H,IAAIohM,EAAO,KACjB,EA4KEmrQ,CAAqBp3U,EAAKugB,GACtBvgB,EAAI4uC,QAAQruB,IACdkwQ,GAAWlwQ,GAEboiD,EAAS5kI,YACLiiE,EAAI4uC,QAAQ+zB,IACd3iE,EAAIj+D,OAAO4gI,GACX0zQ,MAEA1C,GAAoBtzT,EAAQsiD,GAC5B2wQ,GAAoBjzT,EAAQsiD,GAEhC,CACA3iE,EAAIyxE,UAAU9O,EAAU,KAAM,IAC9BtiD,EAAO7xH,SAAS,WAAY,CAAEm0K,YAAW,EAKzC00Q,cAHsB,mBAiBlBC,GAAoB,CAACj3T,EAAQk3T,EAAOC,KACxC,MAAMxyS,EAAM3kB,EAAOrgB,IAAIilC,YAClBuyS,GAIHxyS,EAAIqM,eAAekmS,GACnBvyS,EAAIuM,aAAagmS,KAJjBvyS,EAAIsM,cAAcimS,GAClBvyS,EAAIwM,YAAY+lS,IAKlBl3T,EAAOI,UAAU0kB,OAAOH,GACxBw3O,GAAoBn8P,EAAQ2kB,EAAI,EAE5ByyS,GAAkB,CAACp3T,EAAQ68C,KAC/B,MAAMz8C,EAAYJ,EAAOI,UACnBzgB,EAAMqgB,EAAOrgB,IACbglC,EAAMvkB,EAAUwjC,SACtB,IAAIszR,EACAC,GAAU,EACdn9D,GAAYr6Q,EAAKglC,GAAKtpH,MAAK4+V,IACzBt1O,EAAIK,SAASi1O,EAAQroO,eAAgBqoO,EAAQpoO,aAC7ClN,EAAIM,OAAOg1O,EAAQnoO,aAAcmoO,EAAQloO,UAAU,IAErD,IAAIjoH,EAAS66G,EAAIkN,YACbh3G,EAAY8pG,EAAIiN,eACpB,GAAI8gM,GAAY73S,IAAcA,EAAUsmE,gBAAiB,CACvD,MAAMs0U,EAA6B3rZ,EAAS+Q,EAAUumE,WAAW/lH,OAAS,EAC1Ew/C,EAAYA,EAAUumE,WAAW9lH,KAAKyW,IAAI+3B,EAAQ+Q,EAAUumE,WAAW/lH,OAAS,KAAOw/C,EAErF/Q,EADE2rZ,GAA8BxiG,GAASp4S,GAChCA,EAAUh9C,KAAKxC,OAEf,CAEb,CACA,IAAI6kI,EAAcvgB,EAAIwgB,UAAUtlF,EAAW8kE,EAAI2gB,SAC/C,MAAMs0T,EAAiB10T,GAAeA,EAAYx4G,WAAai4F,EAAIwgB,UAAUD,EAAYx4G,WAAYi4F,EAAI2gB,SAAW,KAC9G21T,EAAqBrB,EAAiBA,EAAeh1U,SAASzwH,cAAgB,GAC9Ekoc,KAAkBx6Q,IAAOA,EAAIjqL,SACR,OAAvBqjc,GAAgCoB,IAClCn3T,EAAc00T,GAEZ3hG,GAASp4S,IAAc/Q,GAAU+Q,EAAUh9C,KAAKxC,SAnD1B,EAACjL,EAAQyqD,EAAWqlF,KAC9C,MAAMi0C,EAAS,IAAIg9K,GAAct2S,EAAWqlF,GAC5C,IAAIlpI,EACJ,MAAMmqW,EAAsB/wW,EAAO29L,sBACnC,KAAO/2L,EAAOm9K,EAAO/9H,QACnB,GAAI+qT,EAAoBnqW,EAAK4oH,SAASnwH,gBAAkBwjW,GAASj8V,IAASA,EAAKqE,OAAS,EACtF,OAAO,EAGX,OAAO,CAAK,EA2CLi8b,CAAoBt3T,EAAO5vI,OAAQyqD,EAAWqlF,GAAevgB,EAAIyhE,aACpE81Q,EAAQv3U,EAAIn7G,OAAO,MACnBmgJ,EAAIy1N,WAAW88E,GACfvyS,EAAIsM,cAAcimS,GAClBvyS,EAAIwM,YAAY+lS,GAChBC,GAAU,IAGdD,EAAQv3U,EAAIn7G,OAAO,MACnB21W,GAAgBx6P,EAAKglC,EAAKuyS,GAC1BD,GAAkBj3T,EAAQk3T,EAAOC,GACjCn3T,EAAOoqB,YAAY5/J,KAAK,EAEpB+sc,GAAiB,CAACv3T,EAAQ2sC,KAC9B,MAAMhX,EAAK50C,GAAaM,QAAQ,MAChCiC,GAASvC,GAAaS,QAAQmrD,GAAShX,GACvC31B,EAAOoqB,YAAY5/J,KAAK,EAEpBgtc,GAAgB,CAACx3T,EAAQ2sC,KACxB8qR,GAAWz3T,EAAO5tC,UAAWu6E,IAChC7oD,GAAQ/C,GAAaS,QAAQmrD,GAAS5rD,GAAaM,QAAQ,OAE7D,MAAMs0C,EAAK50C,GAAaM,QAAQ,MAChCyC,GAAQ/C,GAAaS,QAAQmrD,GAAShX,GACtCshS,GAAkBj3T,EAAQ21B,EAAGh2C,KAAK,GAClCqgB,EAAOoqB,YAAY5/J,KAAK,EAKpBitc,GAAa,CAAChyG,EAAU/5J,KAC5B,OAJiBryI,EAIFogU,GAAc5qR,MAAM68F,KAH5B2nK,GAAOh6S,EAAIw1H,YAMT87M,GAAallC,EAAUg0B,GAAc5qR,MAAM68F,IAAY9+L,KAAIysD,GACzDg6S,GAAOh6S,EAAIw1H,aACjBtyD,OAAM,GATMljE,KAUjB,EAEIq+Y,GAAe7uU,GACZA,GAAwB,MAAjBA,EAAIjJ,UAAoB,SAAUiJ,EAE5C8uU,GAAiBtgV,GACdA,EAASyE,KAAKN,EAAOk8U,GAAcA,GAAcl8U,GAOpDo8U,GAAwB,CAAC53T,EAAQ3oB,KACrCA,EAASyE,KAAKrhF,EAAM2gF,EAAMm8U,GAAgBv3T,GAAS5kB,EAAMo8U,GAAex3T,GAASvlG,EAAK,EAWlFo9Z,GAAY,CAChBvyT,OAVe,CAACtF,EAAQ68C,KACxB,MAAMi7Q,EATyB93T,KAC/B,MAAMygT,EAAmBrlU,EAAMwvR,GAAgB5qQ,GACzC3pH,EAAWojW,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAC/D,OAAO+2Q,GAAa8F,EAAkBzgT,EAAO5tC,UAAW/7E,GAAUxkB,OAAO8lc,GAAe,EAMjEI,CAAyB/3T,GAC5C83T,EAAe77U,SACjB67U,EAAez8Z,KAAK+/E,EAAMw8U,GAAuB53T,IAEjDo3T,GAAgBp3T,EAAQ68C,EAC1B,EAKAm6Q,cAHoB,mBAMhBgB,GAAkB,CAACh4T,EAAQloI,IACxBu7b,GAAiBrzT,GAAQnuI,QAAOquI,GAC9BpoI,EAASuD,OAAS,GAAKonH,GAAK1B,GAAaS,QAAQ0e,GAAcpoI,KACrEmkH,SASCg8U,GAAgB19S,GAAa,CACjC,CAAEob,GAAI,IACN,CAAEi2B,MAAO,IACT,CAAEhwE,KAAM,MAEJs8U,GAAqB,CAACl4T,EAAQm4T,IATPn4T,IACpBg4T,GAAgBh4T,EAAQw+O,GAAqBx+O,IAS7Co4T,CAAqBp4T,GAExBq4T,GAAcC,GACX,CAACt4T,EAAQm4T,IAjpBYn4T,IACrBqzT,GAAiBrzT,GAAQnuI,QAAOg3H,GAC9BkrP,GAAahzP,GAAaS,QAAQqH,MACxC5M,SA+oBMs8U,CAAsBv4T,KAAYs4T,EAGvCxkU,GAAU,CAAC+tD,EAAWy2Q,IAAkB,CAACt4T,EAAQm4T,KACrD,MAAM/mR,EA3pBmBpxC,IAClBqzT,GAAiBrzT,GAAQlkB,KAAK9uG,EAAS,KAAKkzH,GAC1CA,EAAYtgB,SAASzwH,gBAypBhBqpc,CAAmBx4T,KAAY6hD,EAAU1yL,cACvD,OAAOiiL,IAAUknR,CAAa,EAE1BG,GAAaz4T,IACjB,MAAMozT,EAAeD,GAAgBnzT,EAAOrgB,IAAKqgB,EAAOI,UAAUC,YAClE,OAAOplB,EAAWm4U,EAAa,EAE3BsF,GAAaJ,GAAiBxkU,GAAQ,MAAOwkU,GAE7CK,GAAmBL,GAChB,CAACt4T,EAAQm4T,IACP95E,GAAmBr+O,KAAYs4T,EAGpCM,GAAc,CAAC54T,EAAQm4T,IAnCNn4T,IACdg4T,GAAgBh4T,EAAQu+O,GAAqBv+O,IAmC7C64T,CAAe74T,GAElB+iC,GAAc,CAAC+1R,EAAShmc,IACrBA,EAEHimc,GAA4B/4T,IAChC,MAAMkgR,EAAkB5+N,GAAmBthD,GACrCg5T,EAAe7F,GAAgBnzT,EAAOrgB,IAAKqgB,EAAOI,UAAUC,YAClE,OAAOrlB,EAAcg+U,IAAiBh5T,EAAO5vI,OAAOm0L,aAAay0Q,EAAap5U,SAAUsgS,EAAgB,EAEpG+4C,GAAyBj5T,IAC7B,MAAM2kB,EAAM3kB,EAAOI,UAAUwjC,SACvBx3K,EAAQ20H,GAAaS,QAAQmjC,EAAIiN,gBAEjCsnS,EADQtyU,GAAQx6H,EAAOu4J,EAAIkN,aACVjlK,KAAI4B,GAAWohW,GAAgBphW,KAAauiW,GAAaviW,KAChF,OAAOm2J,EAAI0N,WAAa6mS,EAAS38U,OAAM,EAAK,EAExCvrH,GAAQ,CAACmoc,EAAYrlc,IAClB,CAACksI,EAAQltI,IACEorH,EAAMi7U,GAAY,CAACp2Y,EAAKvpB,IAC/BupB,GAAOvpB,EAAEwmG,EAAQltI,KACvB,GACc4oH,EAAS/iH,KAAK7E,GAAU4nH,EAASE,OA4ChDw9U,GAAc,CAAC/c,EAAWr8S,EAAQ68C,KACtC,IAAI78C,EAAOhkH,KAAK+wJ,aAAhB,CAMA,GAHK/sC,EAAOI,UAAU+8C,eAvgaQn9C,KAC9BA,EAAO+tC,YAAY,SAAS,EAuga1BsrR,CAAwBr5T,GAEtBhlB,EAAc6hE,GAAM,CAEtB,GADcy1Q,GAAqBtyT,EAAQq8S,EAAU2a,eAC3Cj4Q,qBACR,MAEJ,CACAs9P,EAAU/2S,OAAOtF,EAAQ68C,GACrB7hE,EAAc6hE,IAChBw1Q,GAAeryT,EAAQq8S,EAAU2a,cAZnC,CAaA,EAEI5nT,GAAW,CAACpP,EAAQ68C,KACxB,GAAI78C,EAAOhkH,KAAK+wJ,aACd,OAEF,MAAMpX,EAAK,IAAMyjS,GAAYvB,GAAW73T,EAAQ68C,GAC1C+O,EAAQ,IAAMwtQ,GAAY5D,GAAYx1T,EAAQ68C,GAC9Cy8Q,EAjEU,EAACt5T,EAAQ68C,IAClBq9P,GAAc,CACnBlpb,GAAM,CAACknc,IAAqBD,GAAcr8U,QAC1C5qH,GAAM,CACJ0nc,IAAW,GACXD,IACCR,GAAcr8U,QACjB5qH,GAAM,CAvCmB8iI,GAAQ,WAAW,IAuClBmkU,GAActiS,MACxC3kK,GAAM,CACJ0nc,IAAW,GACXC,IAAiB,GACjB51R,IACCk1R,GAActiS,MACjB3kK,GAAM,CACJ0nc,IAAW,GACXC,IAAiB,IAChBV,GAAcrsQ,SACjB56L,GAAM,CACJ0nc,IAAW,GACXC,IAAiB,GACjB51R,IACCk1R,GAAcrsQ,SACjB56L,GAAM,CACJ0nc,IAAW,GACXC,IAAiB,IAChBV,GAActiS,MACjB3kK,GAAM,CACJqnc,IAAY,GACZt1R,IACCk1R,GAActiS,MACjB3kK,GAAM,CAACqnc,IAAY,IAAQJ,GAAcrsQ,SACzC56L,GAAM,CAAC4nc,IAAcX,GAActiS,MACnC3kK,GAAM,CAAC+xK,IAAck1R,GAActiS,MACnC3kK,GAAM,CAAC+nc,IAA4Bd,GAAcrsQ,SACjD56L,GAAM,CAACioc,IAAyBhB,GAAcrsQ,UAC7C,CACD5rD,KACG68C,IAAOA,EAAI/pL,YACbypH,MAAM07U,GAAcr8U,QA2BDqxC,CAAUjtB,EAAQ68C,GACxC,OAAQyhM,GAAmBt+O,IAC3B,IAAK,YACHs5T,EAAcx9U,KAAK65C,EAAIA,EAAIl7H,GAC3B,MACF,IAAK,QACH6+Z,EAAcx9U,KAAK8vE,EAAOA,EAAOnxJ,GACjC,MACF,IAAK,SACH6+Z,EAAcx9U,KAAK8vE,EAAOj2B,EAAIl7H,GAC9B,MACF,QACE6+Z,EAAcx9U,KAAK65C,EAAIi2B,EAAOnxJ,GAEhC,EAGI8+Z,GAAahjU,KACbijU,GAAcD,GAAW1rU,GAAGnB,SAAW6sU,GAAWjsU,QAAQxB,WAC1D2tU,GAAsB,CAACz5T,EAAQp1I,KAzrOHw/J,MA0rO5Bx/J,EAAMm0L,uBAGVn0L,EAAM0D,kBA7rO0B87J,EA8rONpqB,EAAOoqB,aA7rOjB6uQ,SACd7uQ,EAAY6uQ,QAAS,EACrB7uQ,EAAY5/J,OA4rOdw1I,EAAOoqB,YAAY+rB,UAAS,KAC1B/mC,GAASpP,EAAQp1I,EAAM,IACvB,EAeE8uc,GAAU15T,IACd,IAAI25T,EAA2Bj+U,EAASE,OAWxCokB,EAAO8K,GAAG,WAAWlgJ,IACfA,EAAMo0L,UAAYo2M,GAAG32J,QACnB+6N,IA3B0B70S,KAClC,IAAKA,EAAI0N,UACP,OAAO,EAET,MAAMT,EAAiBjN,EAAIiN,eAC3B,GAAIqhM,GAASrhM,GAAiB,CAC5B,MAAMgoS,EAAkB,wEAClB1qc,EAAO0iK,EAAe/zJ,KAAKvO,OAAOq1J,EAAIkN,YAAc,GAC1D,OAAO+nS,EAAgBxoc,KAAKlC,EAC9B,CACE,OAAO,CACT,EAgBuB2qc,CAA4B75T,EAAOI,UAAUwjC,UAZnC5jC,KAC/B25T,EAA2Bj+U,EAAS/iH,KAAKqnI,EAAOI,UAAUo3C,eAC1Dx3C,EAAOoqB,YAAY5/J,KAAK,EAWpBsvc,CAAyB95T,GAEzBy5T,GAAoBz5T,EAAQp1I,GAEhC,IAEFo1I,EAAO8K,GAAG,SAASlgJ,IACbA,EAAMo0L,UAAYo2M,GAAG32J,OACvBk7N,EAAyBt+Z,MAAK,IAjBH,EAAC2kG,EAAQp1I,KACtCo1I,EAAOoqB,YAAYyvQ,OACnB8/B,EAAyB79U,KAAKrhF,GAAM/1B,GAAKs7H,EAAOI,UAAUw3C,eAAelzK,KACzE+0b,GAAoBz5T,EAAQp1I,GAC5B+uc,EAA2Bj+U,EAASE,MAAM,EAaJm+U,CAAuB/5T,EAAQp1I,IACrE,GACA,EAgDEovc,GAAU,CAACh6T,EAAQrwC,KACvBqwC,EAAO8K,GAAG,WAAW+xC,IACdA,EAAIkC,sBA/CoB,EAAC/+C,EAAQrwC,EAAOktF,KAC/C,MAAMwiF,EAAQwvF,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,QACzCw4B,GAAQ,CACN,CACE85B,QAASo2M,GAAGK,IACZ3hY,OAAQA,GAAOq0b,GAAsBnoT,GAAQ,IAE/C,CACEg/C,QAASo2M,GAAGM,KACZ5hY,OAAQA,GAAOq0b,GAAsBnoT,GAAQ,OAE3Cq/H,EAaA,GAbQ,CACV,CACErgF,QAASo2M,GAAGM,KACZ5hY,OAAQA,GAAOs0b,GAAkBpoT,GAAQ,GACzCptI,SAAS,EACTE,UAAU,GAEZ,CACEksL,QAASo2M,GAAGK,IACZ3hY,OAAQA,GAAOs0b,GAAkBpoT,GAAQ,GACzCptI,SAAS,EACTE,UAAU,IAGd,CACEksL,QAASo2M,GAAGK,IACZ3hY,OAAQA,GAAOw1b,GAAoBtpT,GAAQ,IAE7C,CACEg/C,QAASo2M,GAAGM,KACZ5hY,OAAQA,GAAOw1b,GAAoBtpT,GAAQ,IAE7C,CACEg/C,QAASo2M,GAAGK,IACZ3hY,OAAQA,GAAO4tb,GAAsB1hT,GAAQ,EAAMrwC,IAErD,CACEqvF,QAASo2M,GAAGM,KACZ5hY,OAAQA,GAAO4tb,GAAsB1hT,GAAQ,EAAOrwC,KAErDktF,GAAKxhJ,MAAKpsC,IACX4tL,EAAIvuL,gBAAgB,GACpB,EAKE2rc,CAAyBj6T,EAAQrwC,EAAOktF,EAC1C,GACA,EAGEq9Q,GAAUl6T,IACdA,EAAO8K,GAAG,SAAS13I,IACZA,EAAE+oZ,aAz1aoBn8Q,KAC7B,MAAMl5F,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACrC4tC,EAAOI,UAAU+8C,eACnBmrN,GAAiBxhW,EAAM2yU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UAAW5jC,EAAO5vI,QAAQirC,MAAKge,IAClG2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,UAAU,GAE1C,EAo1aIygF,CAAuBn6T,EACzB,GACA,EAGE74F,GAAWovF,KAaXzrI,GAA2BsI,GAAKA,EAAEtI,2BAClCsvc,GAAev9Q,GAAOA,EAAImC,UAAYo2M,GAAGG,SAAW14M,EAAImC,UAAYo2M,GAAGI,UACvE6kE,GAAuB,CAACC,EAASt6T,EAAQ4rD,KACzCA,IAAU0uQ,EAAQ5sc,MACpBsyI,EAAO8K,GAAG,aAAchgJ,IAA0B,IACxC8gM,GAAS0uQ,EAAQ5sc,OAC3BsyI,EAAO6lC,IAAI,aAAc/6K,IAE3Bwvc,EAAQ1sc,IAAIg+L,EAAM,EAEd2uQ,GAAU,CAACv6T,EAAQrwC,KACvB,GAAIxoD,GAAS0mF,GAAGjB,UACd,OAEF,MAAM0tU,EAAU1gS,IAAK,GACrB55B,EAAO8K,GAAG,WAAW+xC,IACfu9Q,GAAav9Q,IACfw9Q,GAAqBC,EAASt6T,GAAQ,EACxC,IAEFA,EAAO8K,GAAG,SAAS+xC,IACZA,EAAIkC,sBAjCc,EAAC/+C,EAAQrwC,EAAOktF,KACzC33B,GAAQ,CACN,CACE85B,QAASo2M,GAAGG,QACZzhY,OAAQA,GAAO4tb,GAAsB1hT,GAAQ,EAAOrwC,IAEtD,CACEqvF,QAASo2M,GAAGI,UACZ1hY,OAAQA,GAAO4tb,GAAsB1hT,GAAQ,EAAMrwC,KAEpDktF,EAAI,EAwBH29Q,CAAmBx6T,EAAQrwC,EAAOktF,GAEhCu9Q,GAAav9Q,IAAQy9Q,EAAQ5sc,QAC/B2sc,GAAqBC,EAASt6T,GAAQ,GACtCA,EAAO0uB,cACT,GACA,EAWE+rS,GAAuB,CAAClkb,EAAM8iC,KAClC,MAAMwB,EAAYxB,EAAIwB,YAChB/Q,EAASuP,EAAIvP,SACnB,OAAImpT,GAASp4S,IACXA,EAAUuuV,WAAWt/V,EAAQvzB,GACtBmlG,EAAS/iH,KAAK8gX,GAAc5+T,EAAW/Q,EAASvzB,EAAKlb,UAErDstX,GAAuBtvU,GAAKzsD,KAAIi8H,IACrC,MAAMq9P,EAAWnlQ,GAAaO,SAAS/qG,GAMvC,OALI8iC,EAAIg8T,UACNvxP,GAAQ+E,EAAKq9P,GAEb5iQ,GAASuF,EAAKq9P,GAETzM,GAAcyM,EAASvmQ,IAAKppG,EAAKlb,OAAO,GAEnD,EAEIq/b,GAAuBt/U,EAAMq/U,GAAsBhpG,IACnDkpG,GAAwBv/U,EAAMq/U,GAAsB,KAKpD98R,GAAe39B,GAAU3mF,IAC7B2mF,EAAOI,UAAU0kB,OAAOzrG,EAAIqgU,WAC5B15O,EAAO0uB,aAAa,EAGhBksS,GAA+B56T,IACnC,MAAM3mF,EAAMogU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UACpD98H,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACzC,GAAI4tC,EAAOI,UAAU+8C,cAAe,CAClC,MAAMsjQ,EAAmBrlU,EAAMwvR,GAAgB5qQ,GACzChtC,EAAgBymR,GAAcG,eAAe55O,EAAOI,UAAUwjC,UACpE,OAAO+2Q,GAAa8F,EAAkBzgT,EAAO5tC,UAAWY,GAAe9+B,KAb3CptB,IAAQuwE,GAAYA,EAASyE,MAAKttH,GAAWo8X,GAAa9jV,EAAK64E,IAAK85P,GAAc7qR,OAAOpgG,MAAWA,GAAWq8X,GAAgBr8X,KAAUA,GAAWs8X,GAAet8X,KAAUA,GAAWm8X,GAAa7jV,EAAK64E,IAAK85P,GAAc5qR,MAAMrgG,MAanLqsc,CAAwB/zZ,IAAOl6C,KAAIkuc,GAAY,IAZvF,EAACh0Z,EAAMuS,EAAKjpD,IAAW0qc,GAAY3zD,GAAgBrgW,EAAMg0Z,EAAU1qc,GAAUsqc,GAAqBrhZ,GAAOshZ,GAAsBthZ,GAYlC0hZ,CAAgCj0Z,EAAMuS,EAAK2mF,EAAO5vI,OAAlD2qc,CAA0DD,GAAUz/Z,KAAKsiI,GAAa39B,KACzN,CACE,OAAOtkB,EAASE,MAClB,EAEIo/U,GAA2Ch7T,IAS/C,OAAO7Y,GAAO0nO,GAAIvhO,QAAQzB,aAAemU,EAAOI,UAAUme,eArBnC08S,EAqBmEj7T,EAAOrgB,IArBhE3oH,EAqBqEgpI,EAAOI,UAAUwjC,SAAShS,eArBtFqpS,EAAS18S,WAAW08S,EAAS96T,UAAUnpI,EAAM,cAa9D,KACvB,MAAM8vC,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACpC4tC,EAAOI,UAAU+8C,eACpBn9C,EAAOwK,SAASujC,YAAY,UAvBE,EAACjnI,EAAMuS,EAAKjpD,IAAW+2Y,GAAgBrgW,EAAMuS,EAAKjpD,GAAUsqc,GAAqBrhZ,GAAOshZ,GAAsBthZ,GA0B9I6hZ,CAA4Bp0Z,EADhB2yU,GAAcG,eAAe55O,EAAOI,UAAUwjC,UACnB5jC,EAAO5vI,QAAQirC,KAAKsiI,GAAa39B,GAAQ,IAnB5D,IAACi7T,EAAUjkc,CAqBiI,EAsB9J49Q,GAAU50I,IACdA,EAAO8K,GAAG,WAAW+xC,IACdA,EAAIkC,sBArBoB,EAAC/+C,EAAQ68C,KACxCssQ,GAAyB,CACvB,CACEnqQ,QAASo2M,GAAGE,SACZxhY,OAAQA,GAAO8mc,GAA8B56T,IAE/C,CACEg/C,QAASo2M,GAAGE,SACZxhY,OAAQA,GAAOknc,GAA0Ch7T,KAE1D68C,GAAKxhJ,MAAKy3Z,IACXj2Q,EAAIvuL,iBACUgkc,GAAqBtyT,EAAQ,aAAc,CAAEniI,KAAM,MACtDkhL,uBACT+zQ,IACAT,GAAeryT,EAAQ,aAAc,CAAEniI,KAAM,MAC/C,GACA,EAKEs9b,CAAyBn7T,EAAQ68C,EACnC,GACA,EAGEu+Q,GAAqBp7T,GACrB2jP,GAAsB3jP,GACjB,CACL,CACEg/C,QAASo2M,GAAGtjM,IACZh+L,OAAQA,GAAOoyO,GAAWlmG,GAAQ,IAEpC,CACEg/C,QAASo2M,GAAGtjM,IACZh/L,UAAU,EACVgB,OAAQA,GAAOoyO,GAAWlmG,GAAQ,KAI/B,GAQLq7T,GAAUr7T,IACdA,EAAO8K,GAAG,WAAW+xC,IACdA,EAAIkC,sBAPkB,EAAC/+C,EAAQ68C,KACtC33B,GAAQ,IAAIk2S,GAAmBp7T,IAAU68C,GAAKxhJ,MAAKpsC,IACjD4tL,EAAIvuL,gBAAgB,GACpB,EAKEgtc,CAAuBt7T,EAAQ68C,EACjC,GACA,EAGE63J,GAAU10M,IAGd,GAFAA,EAAO0/C,YAAY,SAAU,GAAI,YACjC6uQ,GAAQvuT,GACJu7R,GAAMv7R,GACR,OAAO45B,GAAK,MACP,CACL,MAAMjqE,EAAQqxV,GAAmBhhT,GAWjC,MAtIYA,KACdA,EAAO8K,GAAG,eAAe13I,IAClB4sI,EAAOI,UAAUme,eAAgBliC,EAAOjpH,EAAEw0W,mBAAmBjjN,IAAQi7O,GAAgB5/P,EAAOrgB,IAAKglC,MACpGvxJ,EAAE9E,gBACJ,GACA,EAuHAitc,CAAQv7T,GA9uFIA,KACdA,EAAO8K,GAAG,yBAA0B1vB,EAAMmsU,GAAsBvnT,GAAQ,EA8uFtEw7T,CAAQx7T,GACRqsT,GAAQrsT,EAAQrwC,GAChB8iW,GAAQzyT,EAAQrwC,GAChB+pW,GAAQ15T,GACR40I,GAAQ50I,GACRk6T,GAAQl6T,GACRq7T,GAAQr7T,GACRg6T,GAAQh6T,EAAQrwC,GAChB4qW,GAAQv6T,EAAQrwC,GACTA,CACT,GAGF,MAAM8rW,GACJ,WAAA9xc,CAAYq2I,GAGV,IAAIw8B,EAFJzyK,KAAK2xc,SAAW,GAChB3xc,KAAKi2I,OAASA,EAEd,MAAMzxI,EAAOxE,KACP,sBAAuBi2I,EAAOwK,UAClCxK,EAAO8K,GAAG,wCAAwC13I,IAChD,MAAMuoc,EAAY37T,EAAOI,UAAUwjC,SAC7Bg4R,EAAU,CACdhqS,eAAgB+pS,EAAU/pS,eAC1BC,YAAa8pS,EAAU9pS,YACvBC,aAAc6pS,EAAU7pS,aACxBC,UAAW4pS,EAAU5pS,WAER,eAAX3+J,EAAEkD,MAA0B2iY,GAAO2iE,EAASp/R,IAC9Cx8B,EAAO7xH,SAAS,mBAElBquJ,EAAUo/R,CAAO,IAGrB57T,EAAO8K,GAAG,eAAe,KACvBimF,GAAM/wF,GACNA,EAAO7xH,SAAS,kBAAkB,IAEpC6xH,EAAO8K,GAAG,mBAAmB,KAC3B,MAAM8tP,EAAW54P,EAAOI,UAAUC,UAAS,GACtCu4P,GAGDjL,GAAa3tP,KAAYzxI,EAAKstc,kBAAkBjjE,IAAa54P,EAAOrgB,IAAI4uD,UAAUqqN,EAAU54P,EAAO5tC,YACrG4tC,EAAO0uB,YAAY,CAAE8uO,iBAAiB,GACxC,IAEFx9P,EAAO8K,GAAG,WAAW13I,KACdA,EAAE2rL,sBAAwB4uM,GAAa3tP,KACE,QAAxCA,EAAOI,UAAUyuC,UAAUjvD,SAC7Bo9Q,GAAMljN,iBAAiB95C,GAAQ,KAC7BA,EAAO0uB,aAAa,IAGtB1uB,EAAO0uB,cAEX,GAEJ,CACA,WAAAA,CAAY1rJ,EAAO,CAAC,GAClB,MAAMg9H,EAASj2I,KAAKi2I,OACdI,EAAYJ,EAAOI,UACzB,IAAIppI,EACJ,GAAIgpI,EAAO8kI,aAAe1kI,IAAcghP,GAAwBphP,GAAS,CACvE,MAAMl5F,EAAOk5F,EAAO5tC,UACpBp7F,EAAOopI,EAAUC,UAAS,IAASv5F,EAC/B9vC,EAAKgiD,gBAAkBgnF,EAAOwK,UAAaxK,EAAOrgB,IAAI4uD,UAAUv3K,EAAM8vC,KACxE9vC,EAAO8vC,GAET,MAAM+7E,EAAU,GAChBmd,EAAOrgB,IAAIwgB,UAAUnpI,GAAMA,GACrBA,IAAS8vC,IAGX+7E,EAAQ70H,KAAKgJ,IACN,KAGXgpI,EAAO7xH,SAAS,aAAc,IACzBnL,EACHxU,QAASwI,EACT6rH,WAEJ,CACF,CACA,iBAAAg5U,CAAkBjjE,GAChB,IAAI9nX,EACJ,MAAMkvH,EAASj2I,KAAKi2I,OACd87T,EAAcr8b,GAAQugI,EAAOrgB,IAAImvD,WAAW8pN,EAAUn9Q,EAAQukB,EAAO5tC,YAC3E,GAAI0pW,EAAYzgc,SAAWtR,KAAK2xc,SAASrgc,OAAQ,CAC/C,IAAKyV,EAAIgrb,EAAYzgc,OAAQyV,GAAK,GAC5Bgrb,EAAYhrb,KAAO/mB,KAAK2xc,SAAS5qb,GADFA,KAKrC,IAAW,IAAPA,EAEF,OADA/mB,KAAK2xc,SAAWI,GACT,CAEX,CAEA,OADA/xc,KAAK2xc,SAAWI,GACT,CACT,EAGF,MAAMC,GAAUzqU,GAAW,SAUrB0qU,GAAU1qU,GAAW,SAKrB2qU,GAAe3lc,GAAQ4lc,IAChBA,EACRF,IAAW1lc,CAAI,EAGd6lc,GAAoBF,GAAa,GACjCG,GAAeH,GAAa,GAC5BI,GAAkBJ,GAAa,GAK/BK,IAJahhQ,GAImB,EAJH4gQ,IACjC,MAAM33F,EAAK23F,EACX,OAAOxgV,EAASlwH,KAAK+4W,EAAGy3F,KAAU3/U,QAAO/lH,GAAQA,IAASglM,IAAa,GAFtDA,OAMnB,MAKMihQ,GAASjrU,GAAW,QAKpBkrU,GAAcxgb,GAAQkgb,IACfA,EACRK,IAAUvgb,CAAI,EAEbygb,GAAY,CAACP,EAAUlgb,IAASwgb,GAAYxgb,EAAZwgb,CAAkBN,GAClDQ,GAAmBF,GAAY,GAC/BG,GAAkBH,GAAY,GAC9BI,GAAmBJ,GAAY,GAC/BK,GAAYC,GAAgBZ,IAChC,MAAM33F,EAAK23F,EACX,OAAOxgV,EAASlwH,KAAK+4W,EAAGg4F,KAASlgV,QAAOrgG,GAAQA,IAAS8gb,GAAa,EAElEC,GAAoBF,GAAU,GAC9BG,GAAoBH,GAAU,GA+B9BI,GAAmB,CACvB,OACA,OACA,OACA,QAEIC,GAAsB,CAC1B,OACA,OACA,WACA,WACA,OACA,WACA,OACA,MACA,iBAEIC,GAAqB,KACzB,MAAMC,EAAmB,IAAIvuc,OAAOwuc,aACpC,IAAIC,EAAa,OACbC,EAAgB,MACpB,MAAM3vK,EAAe,CACnB,cAAI0vK,GACF,OAAOA,CACT,EACA,cAAIA,CAAWl4S,GACT/nC,EAAW4/U,GAAkB73S,KAC/Bk4S,EAAal4S,EAEjB,EACA,iBAAIm4S,GACF,OAAOA,CACT,EACA,iBAAIA,CAAcC,GACZlB,GAAmB1uK,IAAiBvwK,EAAW6/U,GAAqBM,KACtED,EAAgBC,EAEpB,EACA,SAAIr8Z,GACF,MApEiB,EAACysP,EAAc6vK,KAAc,IAC/CA,EACH,UAAIpic,GACF,OAAOoic,EAAUpic,MACnB,EACA7Q,IAAK,CAACqT,EAAMvH,KACV,GAAIymc,GAAkBnvK,GAAe,CACnC,IAAIhzK,EAAS/8G,GAKX,OAAO4/b,EAAUjzc,IAAIqT,GAJrB,IAAKk9G,EAAYzkH,GACf,OAAOmnc,EAAUjzc,IAAIqT,EAAMvH,EAKjC,CACA,OAAO,IAAI,EAEborD,OAAQ4oB,IACFyyX,GAAkBnvK,IACpB6vK,EAAU/7Y,OAAO4oB,EACnB,EAEFptE,MAAO,KACD6/b,GAAkBnvK,IACpB6vK,EAAUvgc,OACZ,IA2CSwgc,CAAe9vK,EAAcwvK,EAAiBj8Z,MACvD,EACA,SAAIisP,GACF,OAAI4vK,GAAkBpvK,GAhGM7iS,OAAOqhE,OAAO,CAC9C/wD,OAAQ,EACR6hC,KAAMjuC,GAAK,OAiGEmuc,EAAiBhwK,KAE5B,EACA,SAAI+jB,GACF,OAAOisJ,EAAiBjsJ,KAC1B,EACAwsJ,aAAc,CAAC52a,EAAOhR,EAAGJ,KAjIR,IAAWiob,EAkItBb,GAAkBnvK,KAlIIgwK,EAmIG,CACzB72a,QACAhR,IACAJ,KAHWi4Q,EAjIhBmuK,IAAW6B,EAsIRR,EAAiBO,aAAa52a,EAAOhR,EAAGJ,GAC1C,EAEFuS,QAAS0d,GACHo3Z,GAAkBpvK,GACb,GAEAwvK,EAAiBl1a,QAAQ0d,GAGpC2lH,QAAS,CAAC3lH,EAAQ/nC,KACZk/b,GAAkBnvK,IACpBwvK,EAAiB7xS,QAAQ3lH,EAAQ/nC,EACnC,EAEF8tJ,UAAW/lH,IACLm3Z,GAAkBnvK,IACpBwvK,EAAiBzxS,UAAU/lH,EAC7B,GAIJ,OADA82Z,GAAiB9uK,GACVA,CAAY,EAEfiwK,GAAoB3gZ,IACxB,MAAM5kB,EAAQ6ka,KACRW,EApIQ5B,KACd,MAAM33F,EAAK23F,EACX,OAAOxgV,EAASlwH,KAAK+4W,EAAGg4F,IAAQ,EAkIXpuO,CAAQjxK,GAmB7B,OAlBAy/Y,GAAgBz/Y,GAChBi/Y,GAAkB7ja,GAClBA,EAAMgla,WAAapgZ,EAASogZ,WAC5Bhla,EAAMila,cAAgBrgZ,EAASqgZ,cA1KZrB,KACnB,MAAM33F,EAAK23F,EACX,OAAOxgV,EAASlwH,KAAK+4W,EAAGw3F,IAAS,EAyKjCgC,CAAa7gZ,GAAU7hB,MAAKuia,GAAatla,EAAMqla,aAAaC,EAAU72a,MAAO62a,EAAU7nb,EAAG6nb,EAAUjob,KACpGw3U,EAAOjwS,EAASi0P,OAAO76S,IACR,UAATA,GACFgiC,EAAMizH,QAAQj1J,EAAM4mD,EAASh1B,QAAQ5xB,GACvC,IAEF62V,EAAOjwS,EAASkwO,OAAOG,GAAQj1P,EAAM6I,MAAM32C,IAAI+iS,KAvKhC2uK,KACf,MAAM33F,EAAK23F,EACX,OAAOxgV,EAASlwH,KAAK+4W,EAAGy3F,IAAS,EAsKjCgC,CAAS9gZ,GAAU7hB,MAAK/kC,IAhKT,EAAC4lc,EAAU5lc,KAAS2lc,GAAa3lc,EAAb2lc,CAAmBC,EAAS,EAiK7D+B,CAAS3la,EAAOhiC,EAAK,IAEvBwnc,EAAazia,MAAKrf,IAChBygb,GAAUv/Y,EAAUlhC,GACpBygb,GAAUnka,EAAOtc,EAAK,IAEjBsc,CAAK,EAOR4la,GAAc,CAACtwK,EAAc3sK,IAAS2sK,EAAariI,QAAQ,YAAatqC,GAExEk9U,GAAmB,iBACnBC,GAAmBpxb,EAASmxb,IAC5BE,GAAe,WAAUF,GAAmB,UAC5CG,GAAOr9U,GAAQo9U,GAAep9U,EAE9Bs9U,GAAWt9U,IAAwC,IAAhCA,EAAKr4F,QAAQy1a,IAahCG,GAAkB,CAACjob,EAAMkob,EAASC,KACtC,MAAMjsI,EAASl8S,EAAKrlB,MAAM,QACpBytc,EAVc,EAACF,EAASC,KAC9B,IAAI/iV,EAAM,IAAM8iV,EAChB,MAAMj+U,EAAQpB,GAAWs/U,GAAW,CAACvwc,EAAOJ,IAAQA,EAAM,KAAO0tW,GAASthF,aAAahsR,GAAS,MAIhG,OAHIqyH,EAAMnlH,SACRsgH,GAAO,IAAM6E,EAAMvyH,KAAK,MAEnB0tH,EAAM,GAAG,EAIAijV,CAAcH,EAASC,GACjCG,EAAW,KAAOJ,EAAU,IAC5BK,EAAa5xG,EAAMz6B,GAAQj5R,GACxBA,EAAEtoC,MAAM,MAAMjD,KAAK,YAK5B,OAA6B,IAAtB6wc,EAAWzjc,OAAeyjc,EAAW,GAAK5xG,EAAM4xG,GAHxCtla,GACNmla,EAAUnla,EAAIqla,IAEoD5wc,KAAK,GAAG,EAG/E8wc,GAAyB,gBAoCzBjrM,GAAQ9zH,GAAUA,EAAOrgB,IAAIjyH,IAAI,eACjCsxc,GAAan2U,GAAO7N,EAAc6N,IAAmB,gBAAXA,EAAI/pG,GAmB9Cmgb,GAA2B3tc,GAAWA,IAAYytc,GAClDG,GAAWl/T,IACf,MAAMw8B,EAAU5C,GAAK,MACrB,MAAO,CACLp1J,OAAQ,IA3DK,EAACw7H,EAAQm/T,KACxB,MAAM,IAACx/U,EAAG,UAAEygB,GAAaJ,EACnB1+H,EAAO0+H,EAAO5tC,UACpB+sW,EAAYvxc,IAAIwyI,EAAUwjC,UAC1B,MAAMw7R,EAAcz/U,EAAIn1H,IAAIw1I,EAAO5tC,UAAW,MAAO,CACnD,GAAM,cACN,MAAS,eACT,iBAAmB,EACnB,iBAAkB,MAClB,MAAS,sFACR2sW,IACClwG,GAAIvhO,QAAQzB,aACdlM,EAAIliC,SAAS2hX,EAAa,OAAkD,QAA1Cz/U,EAAI1jE,SAAS36C,EAAM,aAAa,GAAkB,OAAS,OAE/Fq+G,EAAIzrD,KAAKkrY,EAAa,qCAAqChsc,IACzDA,EAAEhF,iBAAiB,IAErBgxc,EAAY1zT,QACZtL,EAAU9sI,OAAO8rc,GAAa,EAAK,EAyCnBC,CAASr/T,EAAQw8B,GAC/B96G,OAAQ,IAxCG,EAACs+E,EAAQm/T,KACtB,MAAMx/U,EAAMqgB,EAAOrgB,IACnB,GAAIm0I,GAAM9zH,GAAS,CACjB,IAAIs/T,EACJ,MAAM9iS,EAAU2iS,EAAYzxc,MAC5B,KAAO4xc,EAAgBxrM,GAAM9zH,IAC3BrgB,EAAIj+D,OAAO49Y,GACX3/U,EAAIiiD,OAAO09R,GAET9iS,GACFx8B,EAAOI,UAAU0kB,OAAO0X,EAE5B,CACA2iS,EAAYvxc,IAAI,KAAK,EA2BL8zD,CAAOs+E,EAAQw8B,GAC7Bs3F,MAAO,IAAMA,GAAM9zH,GACnB+tE,QAAS,IAzBG/tE,KACd,MAAMrgB,EAAMqgB,EAAOrgB,IACb4/U,EAAgB,CAAChxQ,EAAOD,KAC5BC,EAAMpnK,YAAYmnK,GAClB3uE,EAAIj+D,OAAO4sI,GAAS,EAAK,GAEpB8wQ,KAAgBI,GAAkBnyG,EAASrtN,EAAO5tC,UAAUgvB,WAAY49U,IAC/E7xG,EAAOqyG,GAAgBF,IACrBC,EAAcH,EAAaE,EAAc,IAE3C,MAAMG,EAAgB9/U,EAAIrsH,OAAO,sBAAuB8rc,GACxD,IAAK,IAAItub,EAAI2ub,EAAcpkc,OAAS,EAAGyV,GAAK,EAAGA,IAAK,CAClD,MAAM4ub,EAAe//U,EAAIn7G,OAAO,OAChC46b,EAAY77U,aAAam8U,EAAcD,EAAc3ub,IACrDyub,EAAcG,EAAcD,EAAc3ub,GAC5C,CACA,OAAOsub,EAAcA,EAAY3ib,UAAY,EAAE,EAS9BsxL,CAAQ/tE,GACvB2/T,WAAYnjS,EAAQ9uK,IACrB,EAGGqxH,GAAW,CAACztH,EAAS6vC,KACzBo5E,GAAMl/E,KAAK8F,GAAO32B,IAEdlZ,EADEy7V,EAAKviV,EAAGtY,QACAZ,EAAQtC,QAAQwb,EAAG,IAEnBlZ,EAAQtC,QAAQwb,EAAE,GAAIA,EAAE,GACpC,IAEKlZ,GA+CHsuc,GAAW3+U,GAOfA,EAAOlC,GAASkC,EAAM,CACpB,oDACA,2CACA,CACE,8DAVe,CAACp9D,EAAKg8Y,EAAIC,IACtBD,GAAOC,EAGLruG,GAFE,KAWT,0CACA,WA2CEsuG,GAAgB,CAACzuc,EAAS0uc,KAAc,CAC5C1uc,UACA0uc,cAOIC,GAAgB,CAACjgU,EAAQ1uI,EAAS8mT,KACtC,MAAM8nJ,EAx8gBoB,EAAClgU,EAAQ/e,EAAMm3L,IAAap4K,EAAO7xH,SAAS,kBAAmB,CACzF7c,QAAS2vH,EACTm3L,aAs8gBuB+nJ,CAAoBngU,EAAQ1uI,EAAS8mT,GACtDgoJ,EA7BW,EAACpgU,EAAQ/e,KAC1B,MAAM1kB,EAAS8zT,GAAU,CACvB93O,SAAUirM,GAAkBxjP,GAC5B0yR,gBAAiB5uC,GAAqB9jP,GACtC2yR,2BAA4B5uC,GAA4B/jP,GACxD4yR,sBAAuB5uC,GAA0BhkP,IAChDA,EAAO5vI,QACVmsG,EAAO81F,cAAc,QAAQt7L,IAC3BwjH,GAAMl/E,KAAKtkC,GAAOC,IAChBA,EAAK0qD,QAAQ,GACb,IAEJ,MAAMigI,EAAWplF,EAAO7oG,MAAMutH,EAAM,CAClC4wS,mBAAmB,EACnB9X,eAAe,IAEjB,OAAO3W,GAAe,CAAEn8R,UAAU,GAAQ+4B,EAAO5vI,QAAQ86I,UAAUy2C,EAAS,EAapD0+Q,CAAWrgU,EAAQkgU,EAAe5uc,SAC1D,OAAI0uI,EAAOwgS,kBAAkB,sBAAwB0/B,EAAenhR,qBAR5C,EAAC/+C,EAAQ/e,EAAMm3L,KACvC,MAAMkoJ,EAAWtgU,EAAOrgB,IAAIn7G,OAAO,MAAO,CAAEsY,MAAO,gBAAkBmkG,GAC/Ds/U,EAh8gBqB,EAACvgU,EAAQhpI,EAAMohT,IAAap4K,EAAO7xH,SAAS,mBAAoB,CAC3FnX,OACAohT,aA87gBwBooJ,CAAqBxgU,EAAQsgU,EAAUloJ,GAC/D,OAAO2nJ,GAAcQ,EAAgBvpc,KAAKylB,UAAW8jb,EAAgBxhR,qBAAqB,EAMjF0hR,CAAkBzgU,EAAQogU,EAAiBhoJ,GAE3C2nJ,GAAcK,EAAiBF,EAAenhR,qBACvD,EAMI2hR,GAAc,CAAC1gU,EAAQ/e,KAC3B+e,EAAO8qB,cAAc7pC,EAAM,CACzBrxG,MAAOgzW,GAAwB5iP,GAC/BqL,OAAO,KAEF,GAEHs1T,GAAgB37a,GAAO,4CAA4C5zB,KAAK4zB,GAoBxE47a,GAAgB,CAAC5gU,EAAQ/e,EAAM4/U,MAAiB7gU,EAAOI,UAAU+8C,gBAAiBwjR,GAAc1/U,KARnF,EAAC+e,EAAQh7G,EAAK67a,KAC/B7gU,EAAOoqB,YAAYxwD,OAAM,KACvBinW,EAAY7gU,EAAQh7G,EAAI,IACvB,KACDg7G,EAAO+tC,YAAY,iBAAiB,EAAO/oJ,EAAI,KAE1C,GAEqGuxJ,CAAWv2C,EAAQ/e,EAAM4/U,GACjIC,GAAc,CAAC9gU,EAAQ/e,EAAM4/U,MApBhB,EAAC7gU,EAAQh7G,IACnB27a,GAAc37a,IAAQq3F,EAAOqnQ,GAAyB1jP,IAAS1pI,GAAQ6kC,GAASnW,EAAIv1B,cAAe,IAAK6G,EAAK7G,mBAmBnEsxc,CAAW/gU,EAAQ/e,IAjBlD,EAAC+e,EAAQh7G,EAAK67a,KAChC7gU,EAAOoqB,YAAYxwD,OAAM,KACvBinW,EAAY7gU,EAAQh7G,EAAI,IACvB,KACDg7G,EAAO8qB,cAAc,aAAe9lI,EAAM,KAAK,KAE1C,GAWqEg8a,CAAYhhU,EAAQ/e,EAAM4/U,GAUlG/1S,GAAgB,CAAC9qB,EAAQ/e,EAAM6/M,KAC/BA,IAAgB+hD,GAAoB7iP,GACtC0gU,GAAY1gU,EAAQ/e,GAXG,EAAC+e,EAAQ/e,KAClC1G,GAAMl/E,KAAK,CACTula,GACAE,GACAJ,KACC5sc,IACOA,EAAOksI,EAAQ/e,EAAMy/U,KAC7B,EAMAO,CAAmBjhU,EAAQ/e,EAC7B,EAGIosP,GA3GoBj/V,KACxB,IAAI0zB,EAAQ,EACZ,MAAO,IACE1zB,EAAS0zB,GACjB,EAuGco/Z,CAAkB,WAC7BC,GAA0BlgV,IAC9B,MAAM2sK,EAAeuvK,KAGrB,OAFAe,GAAYtwK,EAAc3sK,GAC1B07U,GAAgB/uK,GACTA,CAAY,EAEfwzK,GAAU,CAACphU,EAAQ1uI,EAAS8mT,EAAU0oB,EAAaugI,KACvD,MAAMt+Y,EA1DQ,EAACi9E,EAAQ/e,EAAMm3L,IACtB6nJ,GAAcjgU,EAAQ/e,EAAMm3L,GAyDvBz/I,CAAQ34B,EAAQ1uI,EAAS8mT,GACrC,IAAKr1P,EAAIi9Y,UAAW,CAClB,MAAM1uc,EAAUyxD,EAAIzxD,QACdgwc,EAAgB,IAAMx2S,GAAc9qB,EAAQ1uI,EAASwvU,GAC3D,GAAIugI,EAA0B,CACf/O,GAAqBtyT,EAAQ,kBAAmB,CAAE4tJ,aAAcuzK,GAAwB7vc,KAC3FytL,uBACRuiR,IACAjP,GAAeryT,EAAQ,mBAE3B,MACEshU,GAEJ,GAEIC,GAAY,CAACvhU,EAAQ/e,EAAMugV,EAAcH,KAC7C,MAAMjpJ,EAAWopJ,GAA8BjD,GAASt9U,GACxDmgV,GAAQphU,EA7SK/e,IAAQA,EAAKjyH,QAAQqvc,GAAc,IA6ShCoD,CAAOxgV,GAAOm3L,GAAU,EAAOipJ,EAAyB,EAEpEK,GAAY,CAAC1hU,EAAQzpH,EAAM8qb,KAC/B,MAAMM,EAAc3hU,EAAOrgB,IAAI22D,OAAO//J,GAAMvnB,QAAQ,QAAS,MACvDojW,EAAiBN,GAAY6vG,EAAa5+E,GAAkB/iP,IAC5D/e,EAAOu9U,GAAgBpsG,EAAgB9wK,GAAmBthD,GAASuhD,GAAwBvhD,IACjGohU,GAAQphU,EAAQ/e,GAAM,GAAO,EAAMogV,EAAyB,EAExDO,GAAuBh0K,IAC3B,MAAMzsP,EAAQ,CAAC,EACf,GAAIysP,GAAgBA,EAAaujB,MAC/B,IAAK,IAAIrgS,EAAI,EAAGA,EAAI88Q,EAAaujB,MAAM91S,OAAQyV,IAAK,CAClD,MAAM+wb,EAAcj0K,EAAaujB,MAAMrgS,GACvC,IACEqwB,EAAM0ga,GAAej0K,EAAa1lQ,QAAQ25a,EAC5C,CAAE,MAAO5pT,GACP92G,EAAM0ga,GAAe,EACvB,CACF,CAEF,OAAO1ga,CAAK,EAER2ga,GAAiB,CAACC,EAAkB/yC,IAAaA,KAAY+yC,GAAoBA,EAAiB/yC,GAAU3zZ,OAAS,EACrH2mc,GAAgB1wc,GAAWwwc,GAAexwc,EAAS,cAAgBwwc,GAAexwc,EAAS,cAK3F2wc,GAAiB,CAACjiU,EAAQ+oR,EAAWx7H,EAAMq7H,KAC/C,MAAM9pY,EAAKuuV,KACL60F,EAActjF,GAAoB5+O,IAAWhlB,EAAcuyK,EAAKp7R,MAChEA,EAAO+vc,EAPS,EAACliU,EAAQrvH,KAC/B,MAAMgc,EAAIhc,EAAI3f,MAAM,gCACpB,OAAOgqH,EAAcruF,GAAKqzG,EAAOrgB,IAAI22D,OAAO3pJ,EAAE,SAAM/8B,CAAS,EAKlCuyc,CAAgBniU,EAAQutJ,EAAKp7R,MAAQ2sB,EAC1D6H,EAAWu7a,EAAc30K,EAAKp7R,UAAOvC,EACrCo5Z,EAAWD,EAAUvkZ,OAAOsa,EAAIyuQ,EAAMq7H,EAAQz2Z,EAAMw0B,GAE1D,OADAoiY,EAAUv+Z,IAAIw+Z,GACPA,CAAQ,EAmBXryB,GAAU32P,IACd,MAAMoiU,EAAoB1+E,GAAyB1jP,GACnD,OAAOutJ,GAAQxkP,GAAWwkP,EAAKj3R,KAAM,WAAa+lH,EAAO+lV,GAAmBC,GAtLrD5yG,KACvB,MAAM6yG,EAAW7yG,EAAIhgW,cACf8yc,EAAgB,CACpBC,IAAK,OACLC,IAAK,OACLC,IAAK,OACLC,IAAK,OACLC,KAAM,OACNC,MAAO,OACPC,IAAK,OACLz9M,IAAK,WAEP,OAAO9qI,GAAMg1O,OAAOgzG,EAAeD,GAAY,SAAWC,EAAcD,GAAY,SAAWA,CAAQ,EA2K9FS,CAAiBV,KAAe90K,EAAKj3R,MAC5C,EASE0sc,GAAiB,CAAChjU,EAAQ5sI,EAAGuxJ,KACjC,MAAMipI,EArByC,UAqBTx6R,EArBAkD,KAqBKlD,EAAE6vc,cAAgB7vc,EAAEw6R,aArBxChjS,IACGu2C,EAqB1B,GAAImhV,GAAsBtiP,IAAW4tJ,EAAc,CACjD,MAAMy6I,EAVwB,EAACroS,EAAQ4tJ,KACzC,MAAMzsP,EAAQysP,EAAazsP,MAAQiyJ,GAAO5nM,GAAKoiS,EAAazsP,QAAQjE,GAC7C,SAAdA,EAAKgma,KAAkB,CAAChma,EAAKima,aAAe,KAChD,GACC/1K,EAAQQ,EAAaR,MAAQ5hS,GAAKoiS,EAAaR,OAAS,GAC9D,OAAOigE,EAASlsT,EAAM9lC,OAAS,EAAI8lC,EAAQisP,EAAOupG,GAAQ32P,GAAQ,EAKjDojU,CAA0BpjU,EAAQ4tJ,GACjD,GAAIy6I,EAAOhta,OAAS,EAUlB,OATAjI,EAAE9E,kBAxBoB6yC,EAyBFknY,EAzBWz9Z,QAAQi5C,IAAIqpS,EAAM/rT,GAAOosP,GACrD+6H,GAAc/6H,GAAMxpO,MAAK4jW,IAAO,CACrCp6H,OACAo6H,cAsB8B5jW,MAAKs/Y,IAC3B1+S,GACF3kB,EAAOI,UAAU0kB,OAAOH,GAE1BwoM,EAAOk2G,GAAax0b,IAxCT,EAACmxH,EAAQsjU,KAC1B57C,GAAa47C,EAAU37C,KAAKtsX,MAAK,EAAEx9B,OAAMvH,OAAMsxZ,oBAC7C,MAAMgB,EAAShB,EAAgB/pZ,EAAOgrZ,KAAKhrZ,GACrC0vR,EAAO+1K,EAAU/1K,KACjBw7H,EAAY/oR,EAAOokS,aAAarb,UAChCw6C,EAAmBx6C,EAAUG,UAAUN,EAAQtyZ,GAC/C0yZ,EAAgC,OAArBu6C,QAAkD,IAArBA,EAA8BA,EAAmBtB,GAAejiU,EAAQ+oR,EAAWx7H,EAAMq7H,GACvI24C,GAAUvhU,EAAQ,aAAcgpR,EAASsB,eAAgB,GAAO,EAAK,GACrE,EAiCMk5C,CAAWxjU,EAAQnxH,EAAO,GAC1B,KAEG,CAEX,CACA,OAAO,CAAK,EAOR40b,GAAyB,CAACzjU,EAAQ+hU,EAAkB9gV,EAAMyiV,EAAerC,KAC7E,IAAI/vc,EAAUsuc,GAAS3+U,GACvB,MAAM0iV,EAAa7B,GAAeC,EAAkB3D,OAAuBG,GAASt9U,GAC9E2iV,GAAmBD,GAxYPptb,KACV,wGAAwGnlB,KAAKmlB,GAuY9Estb,CAAYvyc,GAC7Cwyc,EAAkBnD,GAAcrvc,IAClC2tc,GAAyB3tc,KAAaA,EAAQ+J,QAAUuoc,IAAoBE,KAC9EJ,GAAgB,IAEdA,GAAiBI,KAEjBxyc,EADEwwc,GAAeC,EAAkB,eAAiB6B,EAC1C7B,EAAiB,cAzSf9gV,KAChB,MAAM7wH,EAASivW,KACT4nD,EAAYoJ,GAAU,CAAC,EAAGjga,GAChC,IAAImmB,EAAO,GACX,MAAMwtb,EAAe3zc,EAAO6wL,kBACtB+iR,EAAiBzpV,GAAMs2L,QAAQ,2DAA4D,KAC3F9vH,EAAgB3wL,EAAOsxL,mBACvBguK,EAAO14V,IACX,MAAM7E,EAAO6E,EAAK7E,KAAMg7P,EAAcn2P,EACtC,GAAa,OAAT7E,GAIJ,GAAa,QAATA,EAMJ,GAHI4xc,EAAa5xc,KACfokB,GAAQ,KAENytb,EAAe7xc,GACjBokB,GAAQ,QADV,CAOA,GAHkB,IAAdvf,EAAKV,OACPigB,GAAQvf,EAAK7I,SAET6I,EAAK7E,QAAQ/B,EAAO6wL,mBAAoB,CAC5C,IAAIksE,EAAcn2P,EAAK4sH,WACvB,GAAIupI,EACF,GACEuiG,EAAKviG,SACEA,EAAcA,EAAY/2M,KAEvC,CACI2qI,EAAc5uL,IAASg7P,EAAY/2M,OACrC7/B,GAAQ,KACK,MAATpkB,IACFokB,GAAQ,MAfZ,OAZEA,GAAQ,IA6BV,EAIF,OAFA0qG,EAAOlC,GAASkC,EAAM,CAAC,mBACvByuO,EAAKu3D,EAAUvzZ,MAAMutH,IACd1qG,CAAI,EAgQGkhG,CAAUnmH,IAGpB2tc,GAAyB3tc,KAGzBoyc,EACFhC,GAAU1hU,EAAQ1uI,EAAS+vc,GAE3BE,GAAUvhU,EAAQ1uI,EAASqyc,EAAYtC,GACzC,EAEI4C,GAAwB,CAACjkU,EAAQkkU,EAAUC,KAC/C,IAAIC,EAEJpkU,EAAO8K,GAAG,WAAW13I,IA5BMA,IAAKgiY,GAAGt2M,eAAe1rL,IAAoB,KAAdA,EAAE4rL,SAAkB5rL,EAAEN,UAA0B,KAAdM,EAAE4rL,QA6BtFqlR,CAAqBjxc,KAAOA,EAAE2rL,uBAChCqlR,EAA8Bhxc,EAAEN,UAA0B,KAAdM,EAAE4rL,QAChD,IAEFh/C,EAAO8K,GAAG,SAAS13I,IACjB,GAAIA,EAAE2rL,sBAtC4B3rL,KACpC,IAAIuL,EAAI+/I,EACR,OAAOmwM,GAAIhhO,GAAGlB,aAAgJ,KAAhD,QAA/E+xB,EAAgC,QAA1B//I,EAAKvL,EAAE6vc,qBAAkC,IAAPtkc,OAAgB,EAASA,EAAGwiC,aAA0B,IAAPu9G,OAAgB,EAASA,EAAGrjJ,OAAa,EAoC/Hipc,CAA8Blxc,GAC1D,OAEF,MAAMswc,EAAsC,SAAtBS,EAAYz2c,OAAoB02c,EACtDA,GAA8B,EAC9B,MAAMrC,EAAmBH,GAAqBxuc,EAAE6vc,gBAC3CjB,GAAcD,IAAqBiB,GAAehjU,EAAQ5sI,EAbxC8wc,EAASvE,cAAgB3/T,EAAOI,UAAUwjC,YAgB7Dk+R,GAAeC,EAAkB,cACnC3uc,EAAE9E,iBACFm1c,GAAuBzjU,EAAQ+hU,EAAkBA,EAAiB,aAAc2B,GAAe,IACtF5B,GAAeC,EAAkB,eAAiBD,GAAeC,EAAkB,kBAC5F3uc,EAAE9E,iBACFm1c,GAAuBzjU,EAAQ+hU,EAAkBA,EAAiB,cAAe2B,GAAe,KAEhGQ,EAAS1/b,SACTw4X,GAAMljN,iBAAiB95C,GAAQ,KAC7B,MAAM/e,EAAOijV,EAASn2P,UACtBm2P,EAASxiZ,SACT+hZ,GAAuBzjU,EAAQ+hU,EAAkB9gV,EAAMyiV,GAAe,EAAM,GAC3E,IACL,GACA,EAwBEa,GAA2B,CAACvkU,EAAQkkU,EAAUC,KAClDF,GAAsBjkU,EAAQkkU,EAAUC,GAvBVnkU,KAC9B,MAAMwkU,EAAkBx9a,GAAO+hB,GAAW/hB,EAAK,mBACzCy9a,EAAYz9a,GAAO+hB,GAAW/hB,EAAK,SAKzCg5G,EAAOzjC,OAAO81F,cAAc,OAAO,CAACt7L,EAAO5E,EAAM6Q,KAC/C,IAAKs/W,GAAsBtiP,IALPh9H,KACpB,IAAIrE,EACJ,OAA4E,KAA/C,QAApBA,EAAKqE,EAAKnF,YAAyB,IAAPc,OAAgB,EAASA,EAAG0sI,MAAe,EAG1Cq5T,CAAc1hc,GAClD,IAAK,MAAMhM,KAAQD,EAAO,CACxB,MAAMiwB,EAAMhwB,EAAK6pH,KAAK,OAClBjG,EAAS5zF,KAAShwB,EAAK6pH,KAAK,oBAAsB75F,IAAQ6nU,GAAIC,iBAC5D01G,EAAgBx9a,KAERg8V,GAAwBhjP,IAAWykU,EAAUz9a,KADvDhwB,EAAK0qD,QAKX,CACF,GACA,EAIFijZ,CAAwB3kU,EAAO,EAa3B6wC,GAAa,CAAC7wC,EAAQmkU,KAC1BnkU,EAAOyvB,WAAW,2BAA2B,KAXlB,EAACzvB,EAAQmkU,KACV,SAAtBA,EAAYz2c,OACdy2c,EAAYv2c,IAAI,QAChBunY,GAAyBn1P,GAAQ,KAEjCmkU,EAAYv2c,IAAI,QAChBunY,GAAyBn1P,GAAQ,IAEnCA,EAAO0L,OAAO,EAIZk5T,CAAqB5kU,EAAQmkU,EAAY,IAE3CnkU,EAAOyvB,WAAW,6BAA6B,CAAC8f,EAAIphL,KAC9CA,EAAM8yH,MACRsgV,GAAUvhU,EAAQ7xI,EAAM8yH,KAAM9yH,EAAMiqT,UAAU,GAE5CjqT,EAAMooB,MACRmrb,GAAU1hU,EAAQ7xI,EAAMooB,MAAM,EAChC,GACA,EAkBEsub,GAAmB,CAAChoR,EAAKh/K,EAAM+zC,EAAUy3Q,KAfrB,EAAC45I,EAAehiV,EAAM1qG,KAC9C,IAAI0sb,EAWF,OAAO,EAVP,IAKE,OAJAA,EAAct3S,YACds3S,EAAc13S,QAAQ,YAAatqC,GACnCgiV,EAAc13S,QAAQ,aAAch1I,GACpC0sb,EAAc13S,QAAQ6yS,KAAoBn9U,IACnC,CACT,CAAE,MAAO7tH,GACP,OAAO,CACT,CAGF,EAGI0xc,CAAkBjoR,EAAIomR,cAAeplc,EAAKojH,KAAMpjH,EAAK0Y,OACvDsmK,EAAIvuL,iBACJ+6T,KAEAz3Q,EAAS/zC,EAAKojH,KAAMooM,EACtB,EAEIz3Q,GAAWouF,GAAU,CAAC/e,EAAMooM,KAChC,MAAM,IAAC1pM,EAAG,UAAEygB,GAAaJ,EACnBr/C,EAAQg/B,EAAIn7G,OAAO,MAAO,CAC9B,gBAAmB,QACnB,iBAAkB,QAEd64E,EAAQsiC,EAAIn7G,OAAO,MAAO,CAAEugc,gBAAiB,QAAU9jV,GAC7DtB,EAAI0yD,UAAU1xF,EAAO,CACnBtqE,SAAU,QACVgK,IAAK,IACL30B,KAAM,UACNmvB,MAAO,SACP6vH,SAAU,WAEZ/pD,EAAMx5D,YAAYk2D,GAClBsiC,EAAIn1H,IAAIw1I,EAAO5tC,UAAWzR,GAC1B,MAAM1iD,EAAQmiG,EAAUwjC,SACxBvmF,EAAMquD,QACN,MAAMs5T,EAAiBrlV,EAAIilC,YAC3BogT,EAAer0S,mBAAmBtzE,GAClC+iD,EAAU0kB,OAAOkgT,GACjBhoE,GAAMljN,iBAAiB95C,GAAQ,KAC7BI,EAAU0kB,OAAO7mH,GACjB0hF,EAAIj+D,OAAOi/B,GACX0oO,GAAM,GACL,EAAE,EAEDnhS,GAAU83G,IAAU,CACxB/e,KAAMq9U,GAAKt+T,EAAOI,UAAUg1C,WAAW,CAAE82B,YAAY,KACrD31L,KAAMypH,EAAOI,UAAUg1C,WAAW,CAAExvI,OAAQ,WAGxCq/Z,GAAqBjlU,IAAWA,EAAOI,UAAU+8C,eAD9Bn9C,MAAYA,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUC,WAAY,8CAA+CL,EAAO5tC,WACrE8yW,CAAiBllU,GAqBnFj1H,GAAWi1H,IACfA,EAAO8K,GAAG,MArBA9K,IAAU68C,KACfA,EAAIkC,sBAAwBkmR,GAAmBjlU,IAAWA,EAAOI,UAAUme,cAC9EsmT,GAAiBhoR,EAAK30J,GAAQ83G,GAASpuF,GAASouF,IAAS,KACvD,GAAI6uN,GAAIvhO,QAAQ5B,cAAgBmjO,GAAIvhO,QAAQzB,YAAa,CACvD,MAAM84B,EAAM3kB,EAAOI,UAAUwjC,SAC7Bo5N,GAAMljN,iBAAiB95C,GAAQ,KAC7BA,EAAOI,UAAU0kB,OAAOH,GACxB3kB,EAAO+tC,YAAY,SAAS,GAC3B,EACL,MACE/tC,EAAO+tC,YAAY,SACrB,GAEJ,EAQiBs2B,CAAIrkE,IACrBA,EAAO8K,GAAG,OAPC9K,IAAU68C,KAChBA,EAAIkC,sBAAwBkmR,GAAmBjlU,IAClD6kU,GAAiBhoR,EAAK30J,GAAQ83G,GAASpuF,GAASouF,GAASvlG,EAC3D,EAIkBpW,CAAK27G,GAAQ,EAG3BmlU,GAAyB,CAACnlU,EAAQ5sI,KACtC,IAAIuL,EAAI+/I,EACR,OAAOy7O,GAAWK,uBAA4C,QAApB77X,EAAKvL,EAAE8mD,eAA4B,IAAPv7C,EAAgBA,EAAK,EAAwB,QAApB+/I,EAAKtrJ,EAAE+mD,eAA4B,IAAPukG,EAAgBA,EAAK,EAAG1e,EAAOwK,SAAS,EAM/J46T,GAAkB,CAACplU,EAAQ2kB,KAC/B3kB,EAAO0L,QACHiZ,GACF3kB,EAAOI,UAAU0kB,OAAOH,EAC1B,EA+BI8vJ,GAAU,CAACz0K,EAAQqlU,KACnBhjF,GAAqBriP,IACvBA,EAAO8K,GAAG,mDAAmD13I,IAC3DA,EAAE9E,iBACF8E,EAAEhF,iBAAiB,IAGlBk0X,GAAsBtiP,IACzBA,EAAO8K,GAAG,QAAQ13I,IAChB,MAAMw6R,EAAex6R,EAAEw6R,aACnBA,GAvCOA,IAAgBvxK,EAAOuxK,EAAaR,OAAOG,GAAQ,WAAWn8R,KAAKm8R,EAAKj3R,QAuC/Dgvc,CAAS13K,IAC3Bx6R,EAAE9E,gBACJ,IAGJ0xI,EAAO8K,GAAG,QAAQ13I,IAChB,GAAIA,EAAE2rL,qBACJ,OAEF,MAAMp6B,EAAMwgT,GAAuBnlU,EAAQ5sI,GAC3C,GAAI6nH,EAAW0pC,GACb,OAEF,MAAM4gT,EAAc3D,GAAqBxuc,EAAEw6R,cACrCwqB,EAAW0pJ,GAAeyD,EAAanH,MAC7C,KAAM4D,GAAcuD,IAhEGj0c,KACzB,MAAMk0c,EAAmBl0c,EAAQ,cACjC,QAAOk0c,GAA2D,IAAxCA,EAAiB58a,QAAQ,UAAwB,EA8DrC68a,CAAmBF,KAAiBvC,GAAehjU,EAAQ5sI,EAAGuxJ,GAChG,OAEF,MAAM+gT,EAAkBH,EAAYnH,MAC9B9sc,EAAUo0c,GAAmBH,EAAY,cAAgBA,EAAY,cACrEI,EA1DsB,EAAChmV,EAAKvvH,EAAQ3B,EAAQ82c,KACpD,MAAMK,EAAoBjmV,EAAIwgB,UAAU1xI,GAAQuI,GAAQogW,GAAmBhnW,EAAQ4G,KAEnF,IADmB6jH,EAAO8E,EAAIwgB,UAAU1xI,EAAQ,YAE9C,OAAO,EACF,GAAIm3c,GAAqBlyQ,GAAM6xQ,EAAa,aAAc,CAC/D,MAAM5jR,GAAW,IAAIqlE,WAAYsF,gBAAgBi5M,EAAY,aAAc,aAAajkc,KACxF,OAAQu5G,EAAO8mE,EAASx/D,cAAcyjV,EAAkBhmV,SAASnwH,eACnE,CACE,OAAO,CACT,EAgD4Bo2c,CAAwB7lU,EAAOrgB,IAAKqgB,EAAO5vI,OAAQu0J,EAAIiN,eAAgB2zS,GAC3FO,EAAiBT,EAAwB33c,MAC3Co4c,IAAmBH,GAGnBr0c,IACF8B,EAAE9E,iBACF0uY,GAAMljN,iBAAiB95C,GAAQ,KAC7BA,EAAOoqB,YAAY+rB,UAAS,MACtBuvR,GAAmBI,GAAkBH,IACvC3lU,EAAO+tC,YAAY,UAErBq3R,GAAgBplU,EAAQ2kB,GACxB,MAAMohT,EAAiBnG,GAAStuc,GAC5Bi0c,EAAY,aACdhE,GAAUvhU,EAAQ+lU,EAAgB3tJ,GAAU,GAE5CspJ,GAAU1hU,EAAQ+lU,GAAgB,EACpC,GACA,IAEN,IAEF/lU,EAAO8K,GAAG,aAAa43B,IACrB2iS,EAAwBz3c,KAAI,EAAK,IAEnCoyI,EAAO8K,GAAG,oBAAoB13I,IACxBkvX,GAAsBtiP,KAAYqlU,EAAwB33c,QAC5D0F,EAAE9E,iBACF82c,GAAgBplU,EAAQmlU,GAAuBnlU,EAAQ5sI,KAE1C,YAAXA,EAAEkD,MACJ+uc,EAAwBz3c,KAAI,EAC9B,IA/EgCoyI,KAClCA,EAAO8K,GAAG,SAAS13I,IACjB,MAAM4yc,EAAejqZ,GAAM8+D,EAAO9+D,EAAGomE,cAAc,YACnD,GAAoB,iBAAhB/uH,EAAEk/a,UAA8B,CAClC,MAAM2zB,EAAuB54G,EAASrtN,EAAOrgB,IAAIrsH,OAAO,WAAY0yc,GACpE74G,EAAO84G,GAAsB/yc,IACvBmgW,GAAOngW,EAAQ0wH,aACjB1wH,EAAQ0wH,WAAWliE,SAErB,MAAMinY,EAAU3oT,EAAOrgB,IAAIn7G,OAAO,WAClCmkb,EAAQxha,YAAYqtV,KAAkB70P,KACtCzsH,EAAQwwH,QAAQilU,EAAQ,GAE5B,IACA,EAmEFud,CAA4BlmU,EAAO,EAsB/BmmU,GAAY,2DACZC,GAAWj4c,GAASosH,GAAMxpH,KAAK5C,GAAOa,QAAQm3c,GAAWrhG,IAAiBr1W,cAC1E42c,GAAqB,CAACrmU,EAAQ1uI,EAAS8mT,KAC3C,MAAMkuJ,EAAqB5jF,GAAqB1iP,GAChD,GAAIo4K,GAAmC,QAAvBkuJ,IAAiC3jF,GAA8B3iP,GAC7E,OAAO1uI,EAET,MAAMi1c,EAAeD,EAAqBA,EAAmBp1c,MAAM,QAAU,GAC7E,GAAIq1c,GAAuC,SAAvBD,EAA+B,CACjD,MAAM3mV,EAAMqgB,EAAOrgB,IAAK3oH,EAAOgpI,EAAOI,UAAUyuC,UAChDv9K,EAAUA,EAAQtC,QAAQ,sCAAsC,CAAC60D,EAAK+qC,EAAQzgG,EAAO0gG,KACnF,MAAMknK,EAAcp2I,EAAImyL,WAAWnyL,EAAIq8O,OAAO7tW,IACxCq4c,EAAe,CAAC,EACtB,IAAK,IAAI11b,EAAI,EAAGA,EAAIy1b,EAAalrc,OAAQyV,IAAK,CAC5C,MAAMwrQ,EAAavmB,EAAYwwM,EAAaz1b,IAC5C,IAAI21b,EAAenqL,EACfr6N,EAAe09D,EAAI1jE,SAASjlD,EAAMuvc,EAAaz1b,IAAI,GACnD,QAAQ1f,KAAKm1c,EAAaz1b,MAC5B21b,EAAeL,GAASK,GACxBxkZ,EAAemkZ,GAASnkZ,IAEtBA,IAAiBwkZ,IACnBD,EAAaD,EAAaz1b,IAAMwrQ,EAEpC,CACA,MAAMoqL,EAAc/mV,EAAIotP,eAAey5F,EAAc,QACrD,OAAIE,EACK93W,EAAS,WAAa83W,EAAc,IAAM73W,EAE5CD,EAASC,CAAK,GAEzB,MACEv9F,EAAUA,EAAQtC,QAAQ,qCAAsC,QAKlE,OAHAsC,EAAUA,EAAQtC,QAAQ,+CAA+C,CAAC60D,EAAK+qC,EAAQzgG,EAAO0gG,IACrFD,EAAS,WAAazgG,EAAQ,IAAM0gG,IAEtCv9F,CAAO,EAQV8qT,GAAUp8K,IACd,MAAMqlU,EAA0BzrS,IAAK,GAC/BuqS,EAAcvqS,GAAKkpN,GAAqB9iP,GAAU,OAAS,QAC3DkkU,EAAWhF,GAASl/T,GATZA,MACV6uN,GAAIvhO,QAAQ5B,cAAgBmjO,GAAIvhO,QAAQxB,aA7ClB,EAACkU,EAAQ2mU,KACnC3mU,EAAO8K,GAAG,mBAAmB13I,IAC3BA,EAAE9B,QAAUq1c,EAAW3mU,EAAQ5sI,EAAE9B,QAAS8B,EAAEglT,SAAS,GACrD,EA2CAwuJ,CAAoB5mU,EAAQqmU,GAC9B,EAOAzxH,CAAQ50M,GACR6wC,GAAW7wC,EAAQmkU,GArELnkU,KACd,MAAMkuE,EAAe3iL,GAAKn4B,IACxBm4B,EAAEy0G,EAAQ5sI,EAAE,EAERitc,EAAa99E,GAAmBviP,GAClCxwH,EAAW6wb,IACbrgU,EAAO8K,GAAG,kBAAmBojE,EAAamyP,IAE5C,MAAMl/B,EAAc3+C,GAAoBxiP,GACpCxwH,EAAW2xZ,IACbnhS,EAAO8K,GAAG,mBAAoBojE,EAAaizN,GAC7C,EA2DA0lC,CAAQ7mU,GACRA,EAAOsxD,qBAAqB,2BAA2B,IAA4B,SAAtB6yQ,EAAYz2c,QACzEsyI,EAAO8K,GAAG,WAAW,KACnB//H,GAASi1H,GACTy0K,GAAQz0K,EAAQqlU,GAChBd,GAAyBvkU,EAAQkkU,EAAUC,EAAY,GACvD,EAgCEriI,GAAU9hM,IA7BaA,KAC3BA,EAAO8K,GAAG,SAAS13I,IACb4sI,EAAOrgB,IAAIwgB,UAAU/sI,EAAE3E,OAAQ,YACjC2E,EAAE9E,gBACJ,GACA,EAyBFw4c,CAAqB9mU,GAvBDA,KACpBA,EAAOzjC,OAAO81F,cAAc,WAAWrO,IACrC,MAAM+iR,EAAqBnjF,GAAuB5jP,GAClDmtN,EAAOnpK,GAAM9wL,IACgB,aAAvB6zc,EACF7zc,EAAQ2tH,KAAK,OAAQ,QACW,cAAvBkmV,GACT7zc,EAAQ2tH,KAAK,OAAQ,KACvB,GACA,IAEJmf,EAAOiL,WAAWonD,cAAc,WAAWrO,IACzC,MAAMgjR,EAAwBnjF,GAA0B7jP,GACxDmtN,EAAOnpK,GAAM9wL,IACmB,aAA1B8zc,EACF9zc,EAAQ2tH,KAAK,OAAQ,QACc,cAA1BmmV,GACT9zc,EAAQ2tH,KAAK,OAAQ,KACvB,GACA,GACF,EAIFomV,CAAcjnU,EAAO,EAGjB+d,GAAOs1M,GACPpzO,GAASgzO,GACTi0G,GAA2Br+U,GAAO2qO,GAAyB3qO,EAAIlJ,KAE/DmD,GAAS2iO,GAAY58N,GAAOn9F,GAAGq1F,GAAaS,QAAQikO,GAAW58N,GAC/Ds+U,GAAkB,CAACnwc,EAAMyuV,EAAUr1V,IAAW6vM,GAAUl/E,GAAaS,QAAQxqH,IAAO6xH,GAF5DA,IAAO0qO,GAAwB1qO,EAAIlJ,KAEgCsvL,CAAsBpmL,IAAQz4H,EAAOkwI,QAAQnuI,GAAK02H,KAAO/F,GAAO2iO,IAAWlpO,MAAMwE,GAAaS,QAAQikO,IAAW9lO,IAC5MynV,GAAgB,CAACpwc,EAAMyuV,IAAaxlJ,GAAUl/E,GAAaS,QAAQxqH,GAAOkwc,GAA0BpkV,GAAO2iO,IAC3G4hH,GAAyB,CAAC37Q,EAAW32L,EAAOi2L,KAChD,MAAM7W,EAAS,IAAIg9K,GAAczlK,EAAW32L,GACtCqhD,EAAO40I,EAAU7W,EAAO/9H,KAAK8d,KAAKigH,GAAUA,EAAOj8H,KAAKgc,KAAKigH,GACnE,IAAItlK,EAAS68K,EACb,IAAK,IAAIrvJ,EAAU2uJ,EAAUU,EAAYt1I,IAAQ/Z,IAAY0hH,GAAK1hH,GAAUA,EAAU+Z,IAChFghU,GAAmB/6U,KACrBxtB,EAASwtB,GAGb,OAAOxtB,CAAM,EAyBTy4b,GAAsBtnU,IAC1B,MAAM2kB,EAxBsB,EAAC4iT,EAAU9hH,EAAUr1V,KACjD,MACMo3c,EADW/tF,GAAcG,eAAe2tF,GACnB14R,UACrB95K,EAAQoyc,GAAgBK,EAAW/hH,EAAUr1V,GAC7Cs7L,EAAY27Q,GAAuBG,EAAWzyc,GAAO,GACrD42L,EAAU07Q,GAAuBG,EAAWzyc,GAAO,GACnD4vJ,EAAM71J,SAAS4hK,cAerB,OAdA02S,GAAc17Q,EAAW32L,GAAO+mH,MAAK,KAC/BmE,GAAOyrE,GACT/mC,EAAIK,SAAS0mC,EAAW,GAExB/mC,EAAIqM,eAAe06B,EACrB,IACC+7Q,GAAO9iT,EAAIqM,eAAey2S,EAAI9nV,OACjCynV,GAAcz7Q,EAAS52L,GAAO+mH,MAAK,KAC7BmE,GAAO0rE,GACThnC,EAAIM,OAAO0mC,EAASA,EAAQ9tL,KAAKxC,QAEjCspJ,EAAIwM,YAAYw6B,EAClB,IACC87Q,GAAO9iT,EAAIwM,YAAYs2S,EAAI9nV,OACvBglC,CAAG,EAGE+iT,CAAsB1nU,EAAOI,UAAUwjC,SAAU5jC,EAAO5tC,UAAW4tC,EAAO5vI,QACtF4vI,EAAOI,UAAU0kB,OAAOpnG,GAAUinG,GAAK,EAWzC,IAAIgjT,IACH,SAAUA,GACTA,EAA0B,OAAI,SAC9BA,EAAyB,MAAI,OAC/B,CAHA,CAGEA,KAAsBA,GAAoB,CAAC,IAC7C,MAAMC,GAAqB,CAACnvF,EAAYv+T,IAAY5+C,KAAK8b,IAAIqhW,EAAW/sX,KAAOwuD,GACzE2tZ,GAAsB,CAACpvF,EAAYv+T,IAAY5+C,KAAK8b,IAAIqhW,EAAW9sX,MAAQuuD,GAG3E+6G,GAAgB,CAAC6yS,EAAIC,KACzB,MAAMC,EAzrpBS,EAACF,EAAIC,IAAOzsc,KAAKC,IAAI,EAAGD,KAAKyW,IAAI+1b,EAAGj+Z,OAAQk+Z,EAAGl+Z,QAAUvuC,KAAKC,IAAIusc,EAAGznb,IAAK0nb,EAAG1nb,MAyrpB5E4nb,CAASH,EAAIC,GAAMzsc,KAAKyW,IAAI+1b,EAAGxnb,OAAQynb,EAAGznb,QAC1D,MAHgB,EAACwnb,EAAIC,IAAOD,EAAGznb,IAAM0nb,EAAGl+Z,QAAUi+Z,EAAGj+Z,OAASk+Z,EAAG1nb,IAG1D6nb,CAAUJ,EAAIC,IAAOC,EAAU,EAAG,EAErCG,GAAoB,CAACvwY,EAAOjiD,IAntpBEiiD,IAC3BsmD,EAAMtmD,GAAO,CAACtW,EAAKpT,IACjBoT,EAAIw6D,MAAK,IAAMJ,EAAS/iH,KAAKu1C,KAAOk6Z,IACzC,MAAM18c,EAAO4P,KAAKyW,IAAIm8B,EAAKxiD,KAAM08c,EAAS18c,MACpC20B,EAAM/kB,KAAKyW,IAAIm8B,EAAK7tB,IAAK+nb,EAAS/nb,KAClC10B,EAAQ2P,KAAKC,IAAI2yC,EAAKviD,MAAOy8c,EAASz8c,OACtCk+C,EAASvuC,KAAKC,IAAI2yC,EAAKrE,OAAQu+Z,EAASv+Z,QAC9C,OAAO6xE,EAAS/iH,KAAK,CACnB0nB,MACA10B,QACAk+C,SACAn+C,OACAmvB,MAAOlvB,EAAQD,EACf40B,OAAQupB,EAASxpB,GACjB,KAEHq7F,EAASE,QAqspBLysV,CADmBh7G,EAASz1R,GAAO1pB,IAAQo6Z,OAPjCnuZ,EAO2CxkC,KAPlC8iW,EAOqCvqU,GAPA7tB,KAAO85B,GAAWs+T,EAAW5uU,OAA5E,IAACsQ,EAASs+T,CAO0C,KACd38P,MAAK,IAAM,CAC/D,GACAlkD,KACC2wY,IACD,MACE1qV,KAAM/tD,EACNguD,KAAMt/C,GACJ4uR,EAAYx1R,GAAO1pB,GAAQ+mH,GAAc/mH,EAAMq6Z,KACnD,MAAO,CACLz4Y,EACA0O,EACD,IASCgqY,GAAqB,CAACt6Z,EAAMn4B,EAAG0yb,IAAO1yb,EAAIm4B,EAAKxiD,MAAQqqB,EAAIm4B,EAAKviD,MAAQ,EAAI2P,KAAKyW,IAAIzW,KAAK8b,IAAI82B,EAAKxiD,KAAOqqB,GAAIza,KAAK8b,IAAI82B,EAAKviD,MAAQoqB,IACpI2yb,GAAqC,CAACvkV,EAAUjqE,EAASC,EAASwuZ,KACtE,MAAMC,EAAqB16Z,GACrBkpU,GAAmBlpU,EAAKl3C,MACnB0kH,EAAS/iH,KAAKu1C,GACZwkT,GAAYxkT,EAAKl3C,MACnB0xc,GAAmCl9c,GAAK0iD,EAAKl3C,KAAKoqH,YAAalnE,EAASC,GAAS,GAEjFuhE,EAASE,OASditV,EAAoC,CAACjxY,EAAOv4B,KAChD,MAAMypa,EAAcr9c,GAAKmsE,GAAO,CAACkwY,EAAIC,IAAO1oa,EAASyoa,EAAI5tZ,EAASC,GAAW9a,EAAS0oa,EAAI7tZ,EAASC,KACnG,OAAOwkE,GAAQmqV,EAAaF,GAAoBh8c,KAAIib,GAC9C8gc,IAAuB11G,GAASprV,EAAQ7Q,OAAS8xc,EAAYztc,OAAS,EAT5C,EAACwM,EAASkhc,EAAY1pa,IAC/Cupa,EAAmBG,GAAYl3c,QAAOq8C,GACrB5yC,KAAK8b,IAAIioB,EAASx3B,EAASqyC,EAASC,GAAW9a,EAAS6O,EAAMgM,EAASC,IACtE,GAAK84S,GAAS/kT,EAAKl3C,QAOjCgyc,CAA0Bnhc,EAASihc,EAAY,GAAIzpa,GAAUk9E,MAAM10G,GAEnEA,GAET,GAEGohc,EAAiBC,GAAiBf,GAAkBhrS,GAAeh5C,GAAWhqE,IAEnF0jE,KAAMn2B,EACNo2B,KAAM92B,GACJomQ,EAAY87G,GAAeh7Z,GAAQA,EAAK7tB,IAAM85B,IAClD,OAAO0uZ,EAAkCI,EAAiBT,IAAoB5rV,SAAQ,IAAMisV,EAAkC7hX,EAAOovR,MAA2Bx5P,SAAQ,IAAMisV,EAAkCnhX,EAAO0uR,KAA0B,EAgB7O+yF,GAAgC,CAACria,EAAMoT,EAASC,KACpD,MAAMq8P,EAAUz1L,GAAaS,QAAQ16E,GAC/BuvQ,EAAW1zL,GAAgB6zL,GAE3BhoT,EADiBuyH,GAAaU,UAAU40L,EAAUn8P,EAASC,GAAStoD,QAAOg3H,GAAO/zH,GAAS0hT,EAAS3tL,KAC3EtM,MAAMi6L,GACrC,MAnBiB,EAACA,EAASzhT,EAAOmlD,EAASC,KAC3C,MAAMkiT,EAAS,CAACtnW,EAAOq0c,KACrB,MACMC,EAAyBh8G,EAASt4V,EAAM4qH,IAAIyB,WAAY7F,GADjCvkH,GAAQ07V,GAAY17V,IAASA,EAAK+oK,UAAUjrK,SAAS,yBAElF,OAAOs0c,EAAUttV,MAAK,IAAM4sV,GAAmCW,EAAwBnvZ,EAASC,GAAS,KAAOivZ,IAC9G,MAAME,EAAoBj8G,EAASg8G,GAAwBryc,GAAQA,IAASoyc,EAAUzpV,MACtF,OAAO+oV,GAAmCY,EAAmBpvZ,EAASC,GAAS,EAAK,IACnFyiE,SAAQ,KACMlxF,GAAG32B,EAAOyhT,GAAW96L,EAASE,OAAS94G,GAAc/N,IACtDm/D,MAAKwkF,GAAY2jN,EAAO3jN,EAAUh9B,EAAS/iH,KAAK5D,OAC9D,EAEJ,OAAOsnW,EAAOtnW,EAAO2mH,EAASE,OAAO,EAO9B2tV,CAAW/yJ,EAAShoT,EAAS0rD,EAASC,EAAQ,EAEjDqvZ,GAA4B,CAAC1ia,EAAMoT,EAASC,IAAYgvZ,GAA8Bria,EAAMoT,EAASC,GAAStoD,QAAOq8C,GAAQw4U,GAAkBx4U,EAAKl3C,QAAOpK,KAAIshD,GA7DlJ,EAACA,EAAMgM,KACjB,CACLljD,KAAMk3C,EAAKl3C,KACXqf,SAAUuxb,GAAmB15Z,EAAMgM,GAAW2tZ,GAAoB35Z,EAAMgM,GAAWytZ,GAAkB8B,OAAS9B,GAAkB+B,QA0DyCC,CAAWz7Z,EAAMgM,KAExL0vZ,GAAsB/gV,IAC1B,IAAIlqH,EAAI+/I,EACR,MAAM+5N,EAAa5vP,EAAI5uE,wBACjByrE,EAAMmD,EAAI7vE,cACVqoQ,EAAU37L,EAAIz9G,gBACd6sH,EAAMpP,EAAIzsE,YAChB,MAAO,CACL54B,IAAKo4V,EAAWp4V,KAAwE,QAAhE1hB,EAAa,OAARm2H,QAAwB,IAARA,OAAiB,EAASA,EAAI0wP,eAA4B,IAAP7mX,EAAgBA,EAAK,GAAK0iT,EAAQjsL,UAClI1pI,KAAM+sX,EAAW/sX,MAAyE,QAAhEgzJ,EAAa,OAAR5pB,QAAwB,IAARA,OAAiB,EAASA,EAAIywP,eAA4B,IAAP7mO,EAAgBA,EAAK,GAAK2iK,EAAQhsL,WACrI,EA8CGw0U,GAAO,CAAC7pU,EAAQp1I,KAAUk/c,OAJLC,EAxCH/pU,IAAUA,EAAO2sC,OAASi9R,GAAoB5pU,EAAO5tC,WAAa,CACxF1mG,KAAM,EACN20B,IAAK,GA0C2C2pb,CAAgBhqU,GAJzBiqU,EApCfjqU,KACxB,MAAM1+H,EAAO0+H,EAAO5tC,UACpB,OAAO4tC,EAAO2sC,OAAS,CACrBjhL,KAAM4V,EAAK4zH,WACX70G,IAAK/e,EAAK0zH,WACR,CACFtpI,KAAM,EACN20B,IAAK,EACN,EAgCwE6pb,CAAkBlqU,GAJpCmqU,EAdhC,EAACnqU,EAAQp1I,KAChC,GAAIA,EAAM6D,OAAOuqD,gBAAkBgnF,EAAOwK,SAAU,CAClD,MAAM4/T,EAAiBR,GAAoB5pU,EAAOoyC,2BAC5C63R,EAfYjqU,KACpB,MAAM1+H,EAAO0+H,EAAO5tC,UAAWsvB,EAASse,EAAOwK,SAASviI,gBAClDoic,EAAe,CACnB3+c,KAAM4V,EAAK4zH,WACX70G,IAAK/e,EAAK0zH,WAENs1U,EAAe,CACnB5+c,KAAM4V,EAAK4zH,YAAcxT,EAAOwT,WAChC70G,IAAK/e,EAAK0zH,WAAatT,EAAOsT,WAEhC,OAAOgL,EAAO2sC,OAAS09R,EAAeC,CAAY,EAKzBC,CAAcvqU,GACrC,MAAO,CACLt0I,KAAMd,EAAMy4U,MAAQ+mI,EAAe1+c,KAAOu+c,EAAev+c,KACzD20B,IAAKz1B,EAAM04U,MAAQ8mI,EAAe/pb,IAAM4pb,EAAe5pb,IAE3D,CACA,MAAO,CACL30B,KAAMd,EAAMy4U,MACZhjT,IAAKz1B,EAAM04U,MACZ,EAMmGknI,CAAiBxqU,EAAQp1I,GAJpD,CACzEy4U,MAAO8mI,EAAcz+c,KAAOq+c,EAAar+c,KAAOu+c,EAAev+c,KAC/D43U,MAAO6mI,EAAc9pb,IAAM0pb,EAAa1pb,IAAM4pb,EAAe5pb,KAFrC,IAAC0pb,EAAcE,EAAgBE,CAI6E,EAEhIM,GAAiBh8c,IAAU,CAC/BA,SACAs5W,WAAYt5W,IA2ERi8c,GAAgB,CAACp0c,EAAM7H,EAAQm/R,EAActP,KACjD,MAAMqsL,EAfiC,EAAC/8K,EAAc12B,KACtD,MAAM7yO,EAAOw5a,GAAkBjwK,GAW/B,MAVkB,cAAd12B,GACFilM,GAAkB93a,GAClBq4a,GAAiBr4a,IACM,SAAd6yO,GACTklM,GAAa/3a,GACbs4a,GAAgBt4a,KAEhBg4a,GAAgBh4a,GAChBu4a,GAAiBv4a,IAEZA,CAAI,EAGqBumb,CAAiCh9K,EAAct3R,GAC/E,OAAOykH,EAAYujK,GArEA,EAAChoR,EAAM7H,EAAQm/R,KAClC,MAAM9vK,EAAO80E,EAAI,8CAkDjB,MAjDc,CACZvkL,SAAS,EACT45V,cAAc,EACd35V,YAAY,EACZ+yJ,UAAU,EACV5sK,cAAe,KACfuzW,kBAAkB,EAClB+pF,WAAY,EACZI,WAAW,EACXnrF,aAAa,EACbxjM,UAAW,EACXltK,OACAgrK,aAAcxjD,EACdwpP,UAAWxpP,EACXxvH,eAAgBmsC,EAChB3vC,yBAA0B2vC,EAC1BrsC,gBAAiBqsC,EACjBu3Z,UAAWnjc,OAAO27B,MAAMwna,UACxB6Y,eAAgBh8c,OAAO27B,MAAMqgb,eAC7BC,gBAAiBj8c,OAAO27B,MAAMsgb,gBAC9BC,KAAMl8c,OAAO27B,MAAMugb,KACnBl4c,QAAQ,EACRG,OAAQ,EACR0wK,QAAS,EACTxpH,QAAS,EACTC,QAAS,EACTvnD,SAAS,EACTD,SAAS,EACTq4c,UAAW,EACXC,UAAW,EACXpxZ,QAAS,EACTC,QAAS,EACTupR,MAAO,EACPC,MAAO,EACPh8S,cAAe,KACfgwW,QAAS,EACTC,QAAS,EACTzkY,UAAU,EACVijB,EAAG,EACHJ,EAAG,EACHvoB,OAAQ,EACR68K,KAAM,KACN1K,MAAO,EACP2rS,YAAaptV,EACbnH,eAAgBmH,EAChB4pP,iBAAkB5pP,EAClB8vK,kBACG68K,GAAeh8c,GAER,EAkBqB08c,CAAa70c,EAAM7H,EAAQk8c,GA3E3B,EAACr0c,EAAMgoR,EAAY7vR,EAAQm/R,KAAiB,IAC1EtP,EACHsP,eACAt3R,UACGm0c,GAAeh8c,KAuEqE28c,CAA2B90c,EAAMgoR,EAAY7vR,EAAQk8c,EAAwB,EAOhKU,GAA2B73G,GAC3B3xN,GA93pBK,KAAI7+H,IACN+S,IACL,IAAK,IAAIjF,EAAI,EAAGA,EAAI9N,EAAK3H,OAAQyV,IAC/B,GAAI9N,EAAK8N,GAAGiF,GACV,OAAO,EAGX,OAAO,CAAK,EAu3pBU0mG,CAAG4uV,GAA0B93G,IAWjD+3G,GAAc,CAACtrU,EAAQnX,EAAKhuG,EAAOyF,KACvC,MAAMq/F,EAAMqgB,EAAOrgB,IACb4rV,EAAY1iV,EAAIvE,WAAU,GAChC3E,EAAI0yD,UAAUk5R,EAAW,CACvB1wb,QACAyF,WAEFq/F,EAAIyxE,UAAUm6Q,EAAW,oBAAqB,MAC9C,MAAMt0E,EAAWt3Q,EAAIn7G,OAAO,MAAO,CACjC,MAAS,qBACT,iBAAkB,MAClB,aAAgB,KAChB,gBAAmB,UAiBrB,OAfAm7G,EAAI0yD,UAAU4kN,EAAU,CACtB5gX,SAAU,WACVU,QAAS,GACT2zH,SAAU,SACVxjH,OAAQ,EACR0iB,QAAS,EACTyE,OAAQ,EACRxzB,QACAyF,WAEFq/F,EAAI0yD,UAAUk5R,EAAW,CACvBl9Z,OAAQ,EACRmL,UAAW,eAEby9U,EAAS9vW,YAAYokb,GACdt0E,CAAQ,EAOXu0E,GAAe,CAACvuZ,EAAW+jC,IAAW8zC,GAAO,KACjD,MAAMz4F,EAAwB,SAAd4gB,EAAuB63E,EAAIywP,QAAUzwP,EAAI0wP,QACzD1wP,EAAI+gE,OAAO,CACT,CAAC54I,GAAY5gB,EAAU2kD,EACvByqX,SAAU,UACV,EAEEv2U,GAAas2U,GAAa,QA3DA,IA4D1BE,GAAcF,GAAa,OA5DD,IA6D1BG,GAAWH,GAAa,OA7DE,IA8D1BI,GAAaJ,GAAa,MA9DA,IAsG1Bt1c,GAAgB2yH,IAChBA,GAAOA,EAAInhG,YACbmhG,EAAInhG,WAAWC,YAAYkhG,EAC7B,EAcIz8H,GAAQ,CAACglL,EAAOpxC,IAAW5sI,IAC/B,GAN+BA,IAAkB,IAAbA,EAAEJ,OAMlC64c,CAAyBz4c,GAAI,CAC/B,MAAM04c,EAAQz1Q,GAAOr2D,EAAOrgB,IAAImvD,WAAW17K,EAAE3E,QAASozI,IAAmBtlB,MAAM,MAC/E,GAAIvB,EAAc8wV,IApHF,EAACnsV,EAAK62L,EAAS3tL,IAAQwiV,GAAyBxiV,IAAQA,IAAQ2tL,GAAW72L,EAAI4+B,WAAW11B,EAAI/lH,eAoHlFipc,CAAY/rU,EAAOrgB,IAAKqgB,EAAO5tC,UAAW05W,GAAQ,CAC5E,MAAME,EAAShsU,EAAOrgB,IAAIwjN,OAAO2oI,GAC3BpmC,EAAU1lS,EAAO5tC,UACjBsvB,EAASse,EAAOwK,SAASviI,gBAC/BmpK,EAAMxjL,IAAI,CACRY,QAASs9c,EACTl+K,aAAcuvK,KACd8O,UAAU,EACV30E,QAASlkY,EAAEkkY,QACXC,QAASnkY,EAAEmkY,QACX9kU,MAAOutE,EAAO2sC,OAAS+4P,EAAQhuC,YAAch2Q,EAAO5mG,aAAe,EACnE43C,MAAOstE,EAAO2sC,OAAS+4P,EAAQ52I,aAAeptK,EAAO6S,cAAgB,EACrE23U,KAAM94c,EAAEiwU,MAAQ2oI,EAAOj2b,EACvBo2b,KAAM/4c,EAAEkwU,MAAQ0oI,EAAOr2b,EACvBkF,MAAOixb,EAAMhxb,YACbwF,OAAQwrb,EAAMv3U,aACd63U,MAAOd,GAAYtrU,EAAQ8rU,EAAOA,EAAMhxb,YAAagxb,EAAMv3U,cAC3D1rG,WAAYssU,GA1IQ,MA4IxB,CACF,GAaIk3G,GAAoB,CAACrsU,EAAQ1pI,EAAM7H,EAAQm/R,EAActP,KAChD,cAAThoR,GACF4nc,GAAYtwK,EAAc5tJ,EAAOrgB,IAAI2tP,aAAa7+W,IAEpD,MAAM7D,EAAQ8/c,GAAcp0c,EAAM7H,EAAQm/R,EAActP,GAExD,OADat+I,EAAO7xH,SAAS7X,EAAM1L,EACxB,EAEPgjE,GAAO,CAACwjH,EAAOpxC,KACnB,MAAMssU,EAAwB56F,IAAQ,CAACx3T,EAASC,IApB7B,EAAC6lF,EAAQ9lF,EAASC,KACrC6lF,EAAO+3Q,oBAAoBugC,gBAC3BkxB,GAA0BxpU,EAAO5tC,UAAWl4C,EAASC,GAAS2hE,MAAK,IAAMkkB,EAAOI,UAAU2/R,aAAa7lX,EAASC,KAAUoyZ,IACxH,MAAMtua,EAAQ+hG,EAAO+3Q,oBAAoBk+B,UAAU,EAAGs2B,EAAUv1c,KAAMu1c,EAAUl2b,WAAasxb,GAAkB8B,QAAQ,GACnHxra,EACF+hG,EAAOI,UAAU0kB,OAAO7mH,GAExB+hG,EAAOI,UAAU2/R,aAAa7lX,EAASC,EACzC,GACA,EAW0D4lX,CAAa//R,EAAQ9lF,EAASC,IAAU,GACpG6lF,EAAO8K,GAAG,SAAUwhU,EAAsB7qZ,QAC1C,MAAM+qZ,EAASp7R,EACf,OAAOh+K,GAAKg+K,EAAMtmC,IAAGsmC,IACnB,MAAMha,EAAW97J,KAAKC,IAAID,KAAK8b,IAAIhkB,EAAEkkY,QAAUlmN,EAAMkmN,SAAUh8X,KAAK8b,IAAIhkB,EAAEmkY,QAAUnmN,EAAMmmN,UAC1F,IAAKnmN,EAAM66R,UAAY70S,EAAW,GAAI,CACpC,MAAMp0J,EAAOqpc,GAAkBrsU,EAAQ,YAAaoxC,EAAM5iL,QAAS4iL,EAAMw8G,aAAcx6R,GAIvF,GAHI4nH,EAAch4G,EAAK4qR,gBACrBx8G,EAAMw8G,aAAe5qR,EAAK4qR,cAExB5qR,EAAK+7K,qBACP,OAEF3N,EAAM66R,UAAW,EACjBjsU,EAAO0L,OACT,CACA,GAAI0lC,EAAM66R,SAAU,CAClB,MAAMQ,EAA0Cr5c,EAAEqB,gBAAkBurI,EAAOwK,SAASviI,gBAC9Eykc,EAnEQ,EAACt7R,EAAO/6J,KAAa,CACvCgtT,MAAOhtT,EAASgtT,MAAQjyJ,EAAM86R,KAC9B5oI,MAAOjtT,EAASitT,MAAQ,IAiEFqpI,CAAYv7R,EAAOy4R,GAAK7pU,EAAQ5sI,IAvI7B6jY,EAwIH7lN,EAAMg7R,MAxIO1mC,EAwIA1lS,EAAO5tC,UAvItC6kS,EAASvvW,aAAeg+Y,GAC1BA,EAAQv+Y,YAAY8vW,GAcN,EAACA,EAAU5gX,EAAUwE,EAAOyF,EAAQmyC,EAAMC,EAAMsvB,EAAQD,EAAQwpQ,EAAsBz2N,EAAKs8C,EAAOq7R,KAClH,IAAI3sN,EAAY,EAAGzuE,EAAY,EAC/B4lN,EAASn6W,MAAMpxB,KAAO2qB,EAASgtT,MAAQ,KACvC4zD,EAASn6W,MAAMuD,IAAMhK,EAASitT,MAAQ,KAClCjtT,EAASgtT,MAAQxoT,EAAQ43C,IAC3BqtL,EAAYzpO,EAASgtT,MAAQxoT,EAAQ43C,GAEnCp8C,EAASitT,MAAQhjT,EAASoyC,IAC5B2+G,EAAYh7J,EAASitT,MAAQhjT,EAASoyC,GAExCukU,EAASn6W,MAAMjC,MAAQA,EAAQilO,EAAY,KAC3Cm3I,EAASn6W,MAAMwD,OAASA,EAAS+wJ,EAAY,KAC7C,MAAMn2H,EAAeqwS,EAAqBrwS,aACpCD,EAAcswS,EAAqBtwS,YACnC2xZ,EAAc5qX,EAASupQ,EAAqBtxS,wBAAwB55B,IACpEwsb,EAAc9qX,EAASwpQ,EAAqBtxS,wBAAwBvuD,KAC1E0lL,EAAMtmC,IAAGsmC,IACPA,EAAMvoJ,WAAW3rB,QACbk0K,EAAM66R,UAAYQ,IAChBzqX,EAhFoC,GAgFc9mC,EACpDk2H,EAAMvoJ,WAAWj7B,IAAIg+c,GAAW92U,IACvB9yC,EAlF6B,GAkFqB,EAC3DovF,EAAMvoJ,WAAWj7B,IAAI+9c,GAAS72U,IACrB/yC,EApF6B,GAoFqB9mC,EAC3Dm2H,EAAMvoJ,WAAWj7B,IAAI89c,GAAY52U,IACxB/yC,EAtF6B,GAsFqB,EAC3DqvF,EAAMvoJ,WAAWj7B,IAAIsnI,GAAWJ,IACvB83U,EAvF8B,IAuF0B/9c,OAAOivK,YACxEsT,EAAMvoJ,WAAWj7B,IAAIg+c,GAAW/8c,SACvB+9c,EAzF8B,IAyF0B,EACjEx7R,EAAMvoJ,WAAWj7B,IAAI+9c,GAAS98c,SACrBg+c,EA3F8B,IA2F0Bh+c,OAAOqlU,WACxE9iJ,EAAMvoJ,WAAWj7B,IAAI89c,GAAY78c,SACxBg+c,EA7F8B,IA6F0B,GACjEz7R,EAAMvoJ,WAAWj7B,IAAIsnI,GAAWrmI,SAEpC,GACA,EAoFEi+c,CAAU17R,EAAMg7R,MAAOM,EAAWt7R,EAAMv2J,MAAOu2J,EAAM9wJ,OAAQ8wJ,EAAM3+G,KAAM2+G,EAAM1+G,KAAMt/D,EAAE+mD,QAAS/mD,EAAE8mD,QAAS8lF,EAAOoyC,0BAA2BpyC,EAAO46B,SAAU4xS,EAAQC,GACtKH,EAAsBhmS,SAASlzK,EAAE8mD,QAAS9mD,EAAE+mD,QAC9C,CA3IsB,IAAC88U,EAAUyuC,CA2IjC,GACA,EAYEz/P,GAAO,CAACmL,EAAOpxC,IAAW5sI,IAC9Bg+K,EAAMtmC,IAAGsmC,IACP,IAAIzyK,EAEJ,GADAyyK,EAAMvoJ,WAAW3rB,QACbk0K,EAAM66R,SAAU,CAClB,GArMoB,EAACjsU,EAAQ89N,EAAeivG,KAC5C9xV,EAAW6iP,IAEJA,IAAkBivG,IAAe/sU,EAAOrgB,IAAI4uD,UAAUuvL,EAAeivG,IAGvE/sU,EAAOrgB,IAAI4+B,WAAWu/M,GA+LvBkvG,CAAkBhtU,EAfPI,KACnB,MAAMm4B,EAAMn4B,EAAU+sP,SACtB,GAAInyQ,EAAcu9C,GAAM,CACtB,MACM3G,EADM2G,EAAIgE,WAAW,GACA3K,eAC3B,OAAOqhM,GAASrhM,GAAkBA,EAAelqI,WAAakqI,CAChE,CACE,OAAO,IACT,EAOkCq7S,CAAajtU,EAAOI,WAAYgxC,EAAM5iL,SAAU,CAC5E,MAAM0+c,EAA+E,QAAjEvuc,EAAKqhI,EAAOwK,SAAS7oB,iBAAiBvuH,EAAE8mD,QAAS9mD,EAAE+mD,gBAA6B,IAAPx7C,EAAgBA,EAAKqhI,EAAO5tC,UAC5Gi6W,GAAkBrsU,EAAQ,OAAQktU,EAAY97R,EAAMw8G,aAAcx6R,GACrE2rL,sBACR/+C,EAAOoqB,YAAY+rB,UAAS,KArGL,EAACx2D,EAAKkJ,KACrC,MAAMqX,EAAcvgB,EAAIwgB,UAAUtX,EAAInhG,WAAYi4F,EAAI2gB,SACtDpqI,GAAc2yH,GACVqX,GAAeA,IAAgBvgB,EAAIyhE,WAAazhE,EAAI4uC,QAAQruB,IAC9Du0O,GAAkB1zP,GAAaS,QAAQ0e,GACzC,EAiGUitU,CAAyBntU,EAAOrgB,IAAKyxD,EAAM5iL,SA9xCnCo/R,KAClB,MAAM3sK,EAAO2sK,EAAa1lQ,QAAQ,aAClC,MAAgB,KAAT+4F,EAAcvF,EAASE,OAASF,EAAS/iH,KAAKsoH,EAAK,EA6xChDmsV,CAAYh8R,EAAMw8G,cAAcvyP,MAAK/pC,GAAW0uI,EAAO8qB,cAAcx5J,KACrE0uI,EAAO+3Q,oBAAoBugC,eAAe,GAGhD,CACA+zB,GAAkBrsU,EAAQ,UAAWA,EAAO5tC,UAAWg/E,EAAMw8G,aAAcx6R,EAC7E,KAEFi6c,GAAgBj8R,EAAM,EAElBk8R,GAAe,CAACl8R,EAAOpxC,EAAQ5sI,KACnCg+K,EAAMtmC,IAAGsmC,IACPA,EAAMvoJ,WAAW3rB,QACbk0K,EAAM66R,UACR74c,EAAE0oH,MAAK,IAAMuwV,GAAkBrsU,EAAQ,UAAWoxC,EAAM5iL,QAAS4iL,EAAMw8G,gBAAetP,GAAc+tL,GAAkBrsU,EAAQ,UAAWoxC,EAAM5iL,QAAS4iL,EAAMw8G,aAActP,IAC9K,IAEF+uL,GAAgBj8R,EAAM,EAGlBi8R,GAAkBj8R,IACtBA,EAAMtmC,IAAGsmC,IACPA,EAAMvoJ,WAAW3rB,QACjBhH,GAAck7K,EAAMg7R,MAAM,IAE5Bh7R,EAAMl0K,OAAO,EAETqwc,GAAqBvtU,IACzB,MAAMoxC,EAAQ8nB,KACRs0Q,EAAU/iG,GAASvoL,IACnBi0M,EAAernY,SACf2+c,EAAmBrhd,GAAMglL,EAAOpxC,GAChC0tU,EAAc9/Y,GAAKwjH,EAAOpxC,GAC1B2tU,EAAc1nS,GAAKmL,EAAOpxC,GAC1B4tU,EAfK,EAACx8R,EAAOpxC,IAAW5sI,GAAKk6c,GAAal8R,EAAOpxC,EAAQtkB,EAAS/iH,KAAKvF,IAetD5G,CAAK4kL,EAAOpxC,GACnCA,EAAO8K,GAAG,YAAa2iU,GACvBztU,EAAO8K,GAAG,YAAa4iU,GACvB1tU,EAAO8K,GAAG,UAAW6iU,GACrBH,EAAQt5Y,KAAKiiU,EAAc,YAAau3E,GACxCF,EAAQt5Y,KAAKiiU,EAAc,UAAWy3E,GACtC5tU,EAAO8K,GAAG,UAAU,KAClB0iU,EAAQ5rS,OAAOu0N,EAAc,YAAau3E,GAC1CF,EAAQ5rS,OAAOu0N,EAAc,UAAWy3E,EAAe,IAEzD5tU,EAAO8K,GAAG,WAAW13I,IACfA,EAAE4rL,UAAYo2M,GAAGC,KACnBi4E,GAAal8R,EAAOpxC,EAAQtkB,EAASE,OACvC,GACA,EA2CEiwN,GAAS7rM,IACbutU,GAAmBvtU,GACf0hP,GAA2B1hP,IA3CAA,KAC/B,MAAM6tU,EAAkBz6c,IACtB,IAAKA,EAAE2rL,qBAAsB,CAC3B,MAAM6uG,EAAex6R,EAAEw6R,aACnBA,IAAiBvwK,EAAWuwK,EAAaujB,MAAO,UAAYvjB,EAAaR,MAAM/xR,OAAS,KAC1FjI,EAAE9E,iBACa,SAAX8E,EAAEkD,MACJ+wa,GAAarnS,EAAQ,sCAG3B,GAEI8tU,EAA6B16c,IAC7B0qY,GAAY99P,EAAQ5sI,EAAE3E,SACxBo/c,EAAgBz6c,EAClB,EAEI2yK,EAAQ,KACZ,MAAMynS,EAAU/iG,GAASvoL,IACnBviE,EAAMqgB,EAAOrgB,IACb+F,EAAM52H,SACNi/c,EAAa/tU,EAAO2sC,OAAS3sC,EAAO5tC,UAAY4tC,EAAOwK,SACvDwjU,EAAa,CACjB,OACA,YAEF7gH,EAAO6gH,GAAY77c,IACjBq7c,EAAQt5Y,KAAKwxD,EAAKvzH,EAAM27c,GACxBnuV,EAAIzrD,KAAK65Y,EAAY57c,EAAM07c,EAAgB,IAE7C7tU,EAAO8K,GAAG,UAAU,KAClBqiN,EAAO6gH,GAAY77c,IACjBq7c,EAAQ5rS,OAAOl8C,EAAKvzH,EAAM27c,GAC1BnuV,EAAIiiD,OAAOmsS,EAAY57c,EAAM07c,EAAgB,GAC7C,GACF,EAEJ7tU,EAAO8K,GAAG,QAAQ,KAChBkyP,GAAMljN,iBAAiB95C,EAAQ+lC,EAAO,EAAE,GACxC,EAKAkoS,CAAyBjuU,EAC3B,EAoCIlC,GAAyB01N,GACzB06G,GAAyB,CAACluU,EAAQhpI,IAASm7Y,GAAyBnyQ,EAAO5tC,UAAWp7F,GACtFm3c,GAAqBnuU,IACzB,MAAMI,EAAYJ,EAAOI,UAAWzgB,EAAMqgB,EAAOrgB,IAC3C8lO,EAAWzlN,EAAO5tC,UAClBypR,EAAY6J,GAAU1lP,EAAQylN,EAAU9lO,EAAI2gB,SAAS,IAAMmyC,GAASzyC,KACpEouU,EAAkB,OAASzuV,EAAI0tP,WAC/BuoB,EAAuB,oBAC7B,IAAI9vD,EACJ,MACMuoI,EAA+Br3c,GAAQA,IAASyuV,IAAa3nN,GAAuB9mI,IAAS28V,GAAU38V,KAAU2oH,EAAI4uD,UAAUv3K,EAAMyuV,IAAa9lO,EAAI4+B,WAAWvnJ,EAAK0wB,YAMtKuuZ,EAAY,CAACh5X,EAAWjmD,EAAM43F,EAAQgkF,GAAiB,IACjD5yC,EAAO7xH,SAAS,YAAa,CACrC1f,OAAQuI,EACRimD,YACA2xC,WAEImwF,qBACG,MAELnM,GACFxyC,EAAUwyC,eAAe57K,GAAqB,IAAfimD,GAE1B4+T,EAAUtyU,KAAKqlD,EAAQ53F,IAQ1B4zI,EAAiB,KACrB5K,EAAO8K,GAAG,SAAS13I,IACZusH,EAAI4+B,WAAWnrJ,EAAE3E,UACpB2E,EAAE9E,iBACF0xI,EAAO0L,QACT,IAEF1L,EAAO8K,GAAG,gBAAiBwjU,GAC3BtuU,EAAO8K,GAAG,sCAAuC+wO,EAAUr7J,YAC3DxgF,EAAO8K,GAAG,OAAO13I,IACf,MAAM+5K,EAAY/5K,EAAE3E,OACd8/c,EAAsBL,GAAuBluU,EAAQmtC,GACvDrvC,GAAuBywU,IACzBn7c,EAAE9E,iBACFu2J,GAAW7kB,EAAQuuU,GAAqBlza,KAAKmza,IACpCH,EAA6BlhS,IACtCtoB,GAAW7kB,EAAQmtC,GAAW9xI,KAAKmza,EACrC,IACC,GACHxuU,EAAO8K,GAAG,aAAa13I,IACrB,MAAM+5K,EAAY/5K,EAAE3E,OACpB,GAAI0+K,IAAcs4K,GAAmC,SAAvBt4K,EAAUvtD,WAAwBD,EAAI4uD,UAAUpB,EAAWs4K,GACvF,OAEF,IAAKggF,GAAkBzlS,EAAQ5sI,EAAE8mD,QAAS9mD,EAAE+mD,SAC1C,OAEFm0Z,IACAh2B,IACA,MAAMm2B,EAAyBP,GAAuBluU,EAAQmtC,GAC1DrvC,GAAuB2wU,IACzBr7c,EAAE9E,iBACFu2J,GAAW7kB,EAAQyuU,GAAwBpza,KAAKmza,IAEhDhF,GAA0B/jH,EAAUryV,EAAE8mD,QAAS9mD,EAAE+mD,SAAS9e,MAAKkxa,IAC7Dn5c,EAAE9E,iBA5DO2vC,KACXA,GACFmiG,EAAU0kB,OAAO7mH,EACnB,EA2DMywa,CADcz4B,EAAU,EAAGs2B,EAAUv1c,KAAMu1c,EAAUl2b,WAAasxb,GAAkB8B,QAAQ,IAExF1pV,GAAc0uV,GAChBA,EAAuB/iU,QAEvB1L,EAAO5tC,UAAUs5C,OACnB,GAEJ,IAEF1L,EAAO8K,GAAG,YAAY13I,IAChBgiY,GAAGO,gBAAgBviY,IAGnB0qI,GAAuBsC,EAAUyuC,YACnCz7K,EAAE9E,gBACJ,IAEF0xI,EAAO8K,GAAG,qBAAqB13I,IAC7B,IAAIuxJ,EAAMvxJ,EAAE6qC,MACZ,GAAI6nS,EAAiB,CACnB,IAAKA,EAAgBp+S,WAEnB,YADAo+S,EAAkB,MAGpBnhL,EAAMA,EAAI8yB,aACV9yB,EAAIE,WAAWihL,GACf1yU,EAAE6qC,MAAQ0mH,CACZ,KAEF3kB,EAAO8K,GAAG,qBAAqB13I,IAC7BA,EAAE6qC,MAAQ0wa,EAA8Bv7c,EAAE6qC,OAC1C,MAAM0mH,EAAM6pT,EAAoBp7c,EAAE6qC,MAAO7qC,EAAE43L,SACvCrmC,IACFvxJ,EAAE6qC,MAAQ0mH,EACZ,IAGF3kB,EAAO8K,GAAG,0BAA0B13I,IAClC,MAAMuxJ,EAAMvxJ,EAAE6qC,MACRiX,EAASyvG,EAAIiN,eAAe9uJ,cAHjB9L,MAIZ43c,EAAwBjqT,IAJJ+tM,GAAR17V,EAIgCk+C,IAJS,gBAAZl+C,EAAK8nB,IAKjDw5Z,IAzGyBthb,IAAQgkH,EAAchkH,IAAS2oH,EAAIytP,SAASp2W,EAAM,2BA2GxE63c,CAAuB35Z,IAC1Bo5Z,GACF,IAEFziI,GAAO7rM,GAzJKA,KACd,MAAM8uU,EAAmBp9F,IAAQ,KAC/B,IAAK1xO,EAAOlyE,SAAWkyE,EAAO5tC,UAAUt9F,SAAShG,SAAS0wN,eAAgB,CACxE,MAAM76D,EAAM3kB,EAAOI,UAAUwjC,SAC7B,GAAIjf,EAAI0N,UAAW,CACjB,MAAMukR,EAAaT,GAAiBn2S,EAAQ2kB,GAAK,GACjD3kB,EAAOI,UAAU0kB,OAAO8xR,EAC1B,CACF,IACC,GACH52S,EAAO8K,GAAG,SAAS,KACjBgkU,EAAiBxoS,UAAU,IAE7BtmC,EAAO8K,GAAG,QAAQ,KAChBgkU,EAAiBrtZ,QAAQ,GACzB,EA2IAsrR,CAAQ/sM,GAxIIA,KACdA,EAAO8K,GAAG,QAAQ,KAChB9K,EAAO8K,GAAG,WAAW13I,IACnB,MAAM3E,EAAS2E,EAAE3E,OACjB,GAAIklW,GAAUllW,GAAS,CACrB,MAAM6nb,EAASnkC,GAAyBnyQ,EAAO5tC,UAAW3jG,GACpDuI,EAAOw8V,GAAyB8iF,GAAUA,EAAS7nb,EACrDuxI,EAAOI,UAAUyuC,YAAc73K,GACjC6tJ,GAAW7kB,EAAQhpI,GAAMqkC,MAAKspH,GAAO3kB,EAAOI,UAAU0kB,OAAOH,IAEjE,IACA,GACF,EA6HAksL,CAAQ7wM,EAAO,EAEX+uU,EAAyB/3c,GAAQg+W,GAAmBh+W,IAASs+W,GAA2Bt+W,IAASu+W,GAAyBv+W,GAC1H43c,EAA0BjqT,GAAOoqT,EAAuBpqT,EAAIiN,iBAAmBm9S,EAAuBpqT,EAAImN,cAC1G68S,EAAgChqT,IACpC,MAAMo/S,EAAe/jU,EAAO5vI,OAAO6wL,kBAC7Bg4L,EAASt5P,EAAIilC,YACbgN,EAAiBjN,EAAIiN,eACrBC,EAAclN,EAAIkN,YAClBC,EAAenN,EAAImN,aACnBC,EAAYpN,EAAIoN,UAmBtB,OAlBI2hC,GAAMqwQ,EAAcnyS,EAAehyC,SAASnwH,eAC1B,IAAhBoiK,EACFonN,EAAOjoN,eAAeY,GAEtBqnN,EAAOhoN,cAAcW,GAGvBqnN,EAAOj0N,SAAS4M,EAAgBC,GAE9B6hC,GAAMqwQ,EAAcjyS,EAAalyC,SAASnwH,eAC1B,IAAdsiK,EACFknN,EAAO/nN,aAAaY,GAEpBmnN,EAAO9nN,YAAYW,GAGrBmnN,EAAOh0N,OAAO6M,EAAcC,GAEvBknN,CAAM,EA6BT+1F,EAAgBnmV,IACpB,MAAMomV,EAAcpmV,EAAIvE,WAAU,GAC5BlxH,EAAI4sI,EAAO7xH,SAAS,iBAAkB,CAC1C1f,OAAQo6H,EACRomV,gBAEF,GAAI77c,EAAE2rL,qBACJ,OAAO,KAET,MAAM9gJ,EApCwB,EAACjnC,EAAMi4c,KACrC,MAAM3tc,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnCszB,EAAMsa,EAAOwK,SACb0kU,EAAyBlxU,GAAa18H,EAAM,IAAM8sc,GAAiB1xV,YAAW,KAClF,MAAMw9Q,EAAen5Q,GAAaC,SAAS,mEAAoE0E,GAG/G,OAFAuqO,GAAMiqC,EAAc,KAAMk0E,GAC1B3qV,GAASniH,EAAM44X,GACRA,CAAY,IAEfG,EAAW16Q,EAAIilC,YACrBr+H,GAAM2ob,GACNnrV,GAAOmrV,EAAwB,CAC7BnuV,GAAaO,SAASmwO,GAAM/rO,GAC5B3E,GAAaS,QAAQytV,GACrBluV,GAAaO,SAASmwO,GAAM/rO,KAE9B20Q,EAASr1O,SAASkqT,EAAuBvvV,IAAIiE,WAAY,GACzDy2Q,EAASp1O,OAAOiqT,EAAuBvvV,IAAIygE,UAAW,GACtD14D,GAAOwnV,EAAwB,CAAE7ub,IAAKs/F,EAAIwjN,OAAOnsU,EAAMgpI,EAAO5tC,WAAWz8E,EAAI,OAC7Ek6N,GAAQq/N,GACR,MAAM32S,EAAMn4B,EAAU+sP,SAKtB,OAJI50N,IACFA,EAAImD,kBACJnD,EAAIoD,SAAS0+N,IAERA,CAAQ,EAWD80E,CAAwBtmV,EAAKz1H,EAAE67c,aACvCG,EAAUruV,GAAaS,QAAQqH,GAWrC,OAVAskO,EAAOhnO,GAAYpF,GAAaS,QAAQwe,EAAO5tC,WAAY,KAAMwjS,OAA2B/sQ,IACrFn9F,GAAG0jb,EAASvmV,IACfqnO,GAASrnO,EAAK+sQ,EAChB,IAEGj2Q,EAAI6iB,UAAU3Z,EAAK+sQ,IACtB/sQ,EAAIpjH,aAAamwX,EAAsB,KAEzC9vD,EAAkBj9M,EAClByvT,IACOr6Y,CAAK,EAERuwa,EAAsB,CAACvwa,EAAO+sJ,KAClC,IAAK/sJ,EACH,OAAO,KAET,GAAIA,EAAMo0H,UAAW,CACnB,IAAKu8S,EAAwB3wa,GAAQ,CACnC,MAAMkhB,EAAM6rI,EAAU,GAAK,EACrBh4F,EAAgBy1R,GAA2BtpU,EAAKsmS,EAAUxnT,GAC1Du7U,EAAaxmR,EAAc67E,SAASmc,GAC1C,GAAIhwE,EAAcw+P,GAAa,CAC7B,GAAIkN,GAAkBlN,GACpB,OAAOy8D,EAAU92X,EAAKq6T,IAAYxuL,IAAWh4F,EAAcqiR,WAAmB,GAEhF,GAAIN,GAAuByE,IAAehmB,GAAyBgmB,EAAWt2P,aAAc,CAC1F,MAAMyhC,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAASw0N,EAAY,GACzB70N,EAAIM,OAAOu0N,EAAY,GAChB70N,CACT,CACF,CACA,MAAM0qT,EAAYr8W,EAAc67E,QAAQmc,GACxC,GAAIhwE,EAAcq0V,GAAY,CAC5B,GAAI3oF,GAAkB2oF,GACpB,OAAOp5B,EAAU92X,EAAKkwZ,GAAWrkR,IAAmBh4F,EAAcqiR,WAAW,GAE/E,GAAIN,GAAuBs6F,IAAc77G,GAAyB67G,EAAUpsV,iBAAkB,CAC5F,MAAM0hC,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAASqqT,EAAW,GACxB1qT,EAAIM,OAAOoqT,EAAW,GACf1qT,CACT,CACF,CACF,CACA,OAAO,IACT,CACA,IAAIiN,EAAiB3zH,EAAM2zH,eACvBC,EAAc5zH,EAAM4zH,YACxB,MAAME,EAAY9zH,EAAM8zH,UAMxB,GALIkhM,GAASrhM,IAAmC,IAAhBC,GAAqB/zB,GAAuB8zB,EAAelqI,cACzFkqI,EAAiBA,EAAelqI,WAChCmqI,EAAclyC,EAAI6qE,UAAU54B,GAC5BA,EAAiBA,EAAelqI,aAE7BgrU,GAAY9gM,GACf,OAAO,KAET,GAAIG,IAAcF,EAAc,GAAKD,IAAmB3zH,EAAM6zH,aAAc,CAC1E,MAAM96J,EAAO46J,EAAexwC,WAAWywC,GACvC,GAAIw8S,EAA6Br3c,GAC/B,OAAOg4c,EAAch4c,EAEzB,CACA,OAAO,IAAI,EAEPs3c,EAAyB,KACzBxoI,GACFA,EAAgBpgU,gBAAgBkwX,GAElC53P,GAAajd,GAAaS,QAAQwe,EAAO5tC,WAAY,IAAMg8W,GAAiB/ya,KAAKusK,IACjFk+H,EAAkB,IAAI,EAMlBwyG,EAAgB,KACpBz8D,EAAUnyU,MAAM,EAKlB,OAHK6xX,GAAMv7R,IACT4K,IAEK,CACLqrS,YACAj+B,wBAtP8BsvC,IAC1BA,EAAoBvvb,aAAa,oBACnCy9W,GAAwB8xE,GACxBlnT,EAAUwyC,eAAe00Q,GAC3B,EAmPAhP,gBACAh8Z,QAdc,KACdu/V,EAAUv/V,UACVwpT,EAAkB,IAAI,EAavB,EAGGwpI,GAA0B,CAACz0Z,EAAW/Q,KAC1C,IAAIgsZ,EAAmBhsZ,EACvB,IAAK,IAAI9yC,EAAO6jD,EAAUooE,gBAAiBgwO,GAASj8V,GAAOA,EAAOA,EAAKisH,gBACrE6yU,GAAoB9+b,EAAK6G,KAAKxC,OAEhC,OAAOy6b,CAAgB,EAEnByZ,GAAe,CAAC5vV,EAAK74E,EAAM9vC,EAAM8yC,EAAQ2zD,KAC7C,GAAIw1P,GAASj8V,KAAU8yC,EAAS,GAAKA,EAAS9yC,EAAK6G,KAAKxC,QACtD,MAAO,GAET,MAAMm+B,EAAIikE,GAAcw1P,GAASj8V,GAAQ,CAACs4c,GAAwBt4c,EAAM8yC,IAAW,CAACA,GACpF,IAAIzN,EAAUrlC,EACd,KAAOqlC,IAAYyK,GAAQzK,EAAQ3U,YACjC8R,EAAExrC,KAAK2xH,EAAI6qE,UAAUnuJ,EAASohE,IAC9BphE,EAAUA,EAAQ3U,WAEpB,OAAO2U,IAAYyK,EAAOtN,EAAE/5B,UAAY,EAAE,EAEtC+vc,GAAoB,CAAC7vV,EAAK74E,EAAM4kJ,EAAW75B,EAAa85B,EAAS55B,EAAWt0D,GAAa,KAGtF,CACLrxG,MAHYmjd,GAAa5vV,EAAK74E,EAAM4kJ,EAAW75B,EAAap0D,GAI5D1zF,IAHUwlc,GAAa5vV,EAAK74E,EAAM6kJ,EAAS55B,EAAWt0D,KAMpDgyW,GAAc,CAAC3oa,EAAMk4C,KACzB,MAAM0wX,EAAW1wX,EAAKzvF,QAChBu6C,EAAS4la,EAASzuZ,MACxB,GAAKvtC,EAASo2B,GAEP,CAEL,OADqBo0E,EAAMwxV,GAAU,CAACj0R,EAAS5vL,IAAU4vL,EAAQvnH,MAAKl9D,GAAQ0kH,EAASlwH,KAAKwL,EAAKoqH,WAAWv1H,OAAU6vH,EAAS/iH,KAAKmuC,IAChHotB,MAAKl9D,GACnBi8V,GAASj8V,KAAU8yC,EAAS,GAAKA,EAAS9yC,EAAK6G,KAAKxC,QAC/CqgH,EAASE,OAETF,EAAS/iH,KAAK,CACnB3B,OACA8yC,YAIR,CAbE,OAAO4xE,EAASE,MAalB,EAEI+zV,GAAmB,CAAC7oa,EAAM7I,IAAUwxa,GAAY3oa,EAAM7I,EAAM7xC,OAAO8nE,MAAK,EAC5El9D,KAAM00L,EACN5hJ,OAAQ+nH,KACJ49S,GAAY3oa,EAAM7I,EAAMl0B,KAAKnd,KAAI,EACrCoK,KAAM20L,EACN7hJ,OAAQioH,MAER,MAAMpN,EAAM71J,SAAS4hK,cAGrB,OAFA/L,EAAIK,SAAS0mC,EAAW75B,GACxBlN,EAAIM,OAAO0mC,EAAS55B,GACbpN,CAAG,MAINirT,GAAkB,CAACjwV,EAAK3oH,EAAM8rH,KAClC,GAAI9rH,GAAQ2oH,EAAI4uC,QAAQv3J,KAAU8rH,EAAO9rH,GAAO,CAC9C,MAAMk+C,EAASl+C,EAAK0wB,WACpBi4F,EAAIj+D,OAAO1qD,EAAMi8V,GAASj8V,EAAK4sH,aAAeguO,GAAiB56V,EAAK4sH,WAAW/lH,OAC/E+xc,GAAgBjwV,EAAKzqE,EAAQ4tE,EAC/B,GAEI+sV,GAAY,CAAClwV,EAAKglC,EAAK7hC,EAAQua,GAAQ,KAC3C,MAAMgmT,EAAc1+R,EAAIiN,eAAelqI,WACjC47Z,EAAY3+R,EAAImN,aAAapqI,WACnCi9H,EAAIynP,iBACA/uQ,IAAUva,EAAO6hC,EAAIiN,kBACnBqhM,GAAStuM,EAAIiN,iBAAsD,IAAnCjN,EAAIiN,eAAe/zJ,KAAKxC,QAC1DskH,EAAIj+D,OAAOijG,EAAIiN,gBAEbqhM,GAAStuM,EAAImN,eAAkD,IAAjCnN,EAAImN,aAAaj0J,KAAKxC,QACtDskH,EAAIj+D,OAAOijG,EAAImN,cAEjB89S,GAAgBjwV,EAAK0jU,EAAavgU,GAC9BugU,IAAgBC,GAClBssB,GAAgBjwV,EAAK2jU,EAAWxgU,GAEpC,EAEIgtV,GAAiB,CAAC9vU,EAAQ2kB,IAAQjpC,EAASlwH,KAAKw0I,EAAOrgB,IAAIwgB,UAAUwkB,EAAIiN,eAAgB5xB,EAAOrgB,IAAI2gB,UACpGyvU,GAA6B,CAACC,EAAYpkR,EAAOqkR,KACrD,MAAMC,EAAkBF,EAAWG,sBAAsB,CACvD55b,KAAM05b,EACNrkR,UAEF,MAAO,IACFokR,EACH3yF,cAAeH,GAAiBgzF,GAAiBrjd,OAAOmjd,EAAW3yF,eACnE+yF,eAAgBjzF,GAAkB+yF,GAAiBrjd,OAAOmjd,EAAWI,gBACtE,EAEGC,GAAgB,CAAC1wV,EAAKisE,EAAO50L,EAAM8yC,KACvC,MAAM66G,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAAS4mC,EAAO,GACpBjnC,EAAIM,OAAOjuJ,EAAM8yC,GACV66G,EAAIpzJ,UAAU,EAGjB++c,GAAY,CAAC3wV,EAAK7gG,IAAO6gG,EAAIn7G,OAAO,OAAQ,CAChD,gBAAiB,WACjBsa,OAEIyxb,GAAkB,CAAC5wV,EAAKriG,KAC5B,MAAMqnI,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIsM,cAAc3zI,EAAOlxB,OACzBu4J,EAAIuM,aAAa5zI,EAAOvT,KACjB46I,CAAG,EAENk0R,GAAe,CAACl5T,EAAK6wV,EAAcC,KACvC,MAAM9rT,EAAMgrT,GAAiBhwV,EAAIyhE,UAAWqvR,GAAW5zV,SAAS,gCAC1D6uE,EAAY/mC,EAAIiN,eAChB+5B,EAAUhnC,EAAImN,aACd4+S,EAA4B,IAAlB/rT,EAAIoN,UAAkB45B,EAAUA,EAAQw6L,UAAUxhO,EAAIoN,WAChE4+S,EAAgC,IAApBhsT,EAAIkN,YAAoB65B,EAAYA,EAAUy6L,UAAUxhO,EAAIkN,aACxE++S,EAAkBD,EAAUjpb,WAElC,MAAO,CACLtZ,OAAQoic,EACRzmc,IAHoB2mc,EAAQhpb,WAGT67F,aAAa+sV,GAAU3wV,EAAK6wV,EAAe,QAASE,GACvEtkd,MAAOwkd,EAAgBrtV,aAAa+sV,GAAU3wV,EAAK6wV,EAAe,UAAWG,GAC9E,EAEGE,GAAe,CAAClxV,EAAKriG,EAAQwlG,KACjC8sV,GAAgBjwV,EAAKA,EAAIjyH,IAAI4vB,EAAOlP,OAAS,QAAS00G,GACtD8sV,GAAgBjwV,EAAKA,EAAIjyH,IAAI4vB,EAAOlP,OAAS,UAAW00G,EAAO,EAG3DguV,GAAuB7+c,GAAoC,IAAzBA,EAAQ7F,MAAMiP,OAchD01c,GAA2B,CAACpxV,EAAK1tH,EAAS25L,EAAOzyB,KACrD,MAAM63S,EAAe/+c,EAAQ7F,MAdR6kd,MAgBrB,OADkBrkB,GAAWjtU,EAAKw5C,EAAKt+G,UAAWs+G,EAAKrvH,QAflCmna,EAeyDD,EAfvC,CAACxid,EAASs7C,KACjD,MACMona,EADO1id,EAAQqP,KACGie,UAAU,EAAGguB,GAC/Bqna,EAAgBD,EAAWn7W,YAAYk7W,EAAe3hd,OAAO2hd,EAAe51c,OAAS,IACrFwpF,EAAaqsX,EAAWn7W,YAAYk7W,GAC1C,OAAoB,IAAhBpsX,EACKA,EAAaosX,EAAe51c,QACP,IAAnB81c,EACFA,EAAgB,GAEf,CACV,GAI6FvlR,GAC5E13H,MAAKilG,IACpB,IAAIx6J,EAAI+/I,EACR,MAAM0yT,EAAsH,QAAjG1yT,EAAkC,QAA5B//I,EAAKitL,EAAMhmK,mBAAgC,IAAPjnB,OAAgB,EAASA,EAAGiqB,QAAQoob,UAAkC,IAAPtyT,EAAgBA,GAAM,EAE1J,IAD+C,IAAvB0yT,GAA4Bj4S,EAAKrvH,QAAUsna,EAAoBJ,EAAa31c,OAC/E,CACnB,MAAMspJ,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAASmU,EAAKt+G,UAAWs+G,EAAKrvH,OAASkna,EAAa31c,QACxDspJ,EAAIM,OAAOkU,EAAKt+G,UAAWs+G,EAAKrvH,QACzB4xE,EAAS/iH,KAAKgsJ,EACvB,CAAO,CACL,MAAM76G,EAASqvH,EAAKrvH,OAASkna,EAAa31c,OAC1C,OAAOqxb,GAASvzR,EAAKt+G,UAAW/Q,EAAQ8hJ,GAAOh/L,KAAIykd,IACjD,MAAM1sT,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAASqsT,EAASx2Z,UAAWw2Z,EAASvna,QAC1C66G,EAAIM,OAAOkU,EAAKt+G,UAAWs+G,EAAKrvH,QACzB66G,CAAG,IACT9yJ,QAAO8yJ,GAAOA,EAAIpzJ,aAAey/c,IAAcp0V,SAAQ,IAAMm0V,GAAyBpxV,EAAK1tH,EAAS25L,EAAOpwK,GAAM29I,EAAKt+G,UAAW,KACtI,IACA,EAwBEy2Z,GAAgB,CAACtxU,EAAQ4rD,EAAO14L,EAASq+c,KAC7C,MAAM5xV,EAAMqgB,EAAOrgB,IACb74E,EAAO64E,EAAIyhE,UACXnvL,EAAUiB,EAAQjB,QAClB05L,EAAUz4L,EAAQmjB,SAASwkC,UAC3Bk3G,EAAY7+J,EAAQmjB,SAASyzB,OACnC,OAAO4iZ,GAAS/gQ,EAAS55B,EAAY7+J,EAAQjB,QAAQ8X,IAAI1O,OAAQuwL,GAAO13H,MAAKilG,IAC3E,MAAMq4S,EAAahC,GAAkB7vV,EAAK74E,EAAMqyH,EAAKt+G,UAAWs+G,EAAKrvH,OAAQ6hJ,EAAS55B,EAAWw/S,GACjG,GAAIT,GAAqB7+c,GACvB,OAAOypH,EAAS/iH,KAAK,CACnB7H,QAAS,CAAC,CACNmB,UACAs1c,SAAUiK,EACVC,OAAQD,IAEZn7b,SAAU8iJ,IAEP,CACL,MAAMu4S,EAAaC,GAAgB3xU,EAAQ9sI,EAAQ0+c,kBAAmBz4S,EAAKt+G,UAAWs+G,EAAKrvH,OAAQ8hJ,EAAO2lR,GACpGllU,EAAUqlU,EAAWn1V,MAAM,CAC/BzrH,QAAS,GACTulB,SAAU8iJ,IAEN9/G,EAAMgzF,EAAQh2H,SACdjqB,EA9Ca,EAACuzH,EAAK1tH,EAAS+E,EAAM8yC,EAAQ8hJ,EAAOimR,GAAa,KACxE,GAA6B,IAAzB5/c,EAAQ7F,MAAMiP,SAAiBw2c,EAAY,CAC7C,MAAMltT,EAAMhlC,EAAIilC,YAGhB,OAFAD,EAAIK,SAAShuJ,EAAM8yC,GACnB66G,EAAIM,OAAOjuJ,EAAM8yC,GACV4xE,EAAS/iH,KAAKgsJ,EACvB,CACA,OAAO8nS,GAAWz1b,EAAM8yC,EAAQ8hJ,GAAO13H,MAAKilG,GAC5B43S,GAAyBpxV,EAAK1tH,EAAS25L,EAAOzyB,GAC/CjlG,MAAK49Y,IAChB,IAAInzc,EACJ,GAAIkzc,EAAY,CACd,GAAIC,EAAWhgT,eAAiBqH,EAAKt+G,WAAai3Z,EAAW//S,YAAcoH,EAAKrvH,OAC9E,OAAO4xE,EAASE,OACX,GAAoB,IAAhBu9C,EAAKrvH,SAAgE,QAA9CnrC,EAAKmzc,EAAWhgT,aAAalsI,mBAAgC,IAAPjnB,OAAgB,EAASA,EAAGtD,UAAYy2c,EAAW//S,UACzI,OAAOr2C,EAASE,MAEpB,CACA,OAAOF,EAAS/iH,KAAKm5c,EAAW,KAElC,EA0BgBC,CAAiBpyV,EAAK1tH,EAASonD,EAAIwB,UAAWxB,EAAIvP,OAAQ8hJ,EAAO8lR,EAAWx1V,UAC1F,OAAO9vH,EAAMQ,KAAI26c,IACf,MAAMyK,EA/JqB,EAACryV,EAAK74E,EAAM7I,EAAOw/D,GAAa,IAAU+xW,GAAkB7vV,EAAK74E,EAAM7I,EAAM2zH,eAAgB3zH,EAAM4zH,YAAa5zH,EAAM6zH,aAAc7zH,EAAM8zH,UAAWt0D,GA+J3Jw0W,CAA2BtyV,EAAK74E,EAAMyga,EAAUgK,GACrE,MAAO,CACLzgd,QAASu7I,EAAQv7I,QAAQjE,OAAO,CAAC,CAC7BoF,UACAs1c,SAAUyK,EACVP,OAAQD,KAEZn7b,SAAUmF,GAAM+rb,EAAS31S,eAAgB21S,EAAS11S,aACnD,GAEL,IACA,EAEE8/S,GAAkB,CAAC3xU,EAAQlyB,EAAU92G,EAAM8yC,EAAQ8hJ,EAAO2lR,KAC9D,MAAM5xV,EAAMqgB,EAAOrgB,IACnB,OAAO8sU,GAAWz1b,EAAM8yC,EAAQ61E,EAAIyhE,WAAWltH,MAAKg+Y,IAClD,MAAM37b,EAAO85b,GAAc1wV,EAAKisE,EAAO50L,EAAM8yC,GAC7C,IAAK,IAAIh5B,EAAI,EAAGA,EAAIg9F,EAASzyG,OAAQyV,IAAK,CACxC,MAAM7e,EAAU67G,EAASh9F,GACzB,IAAKqqB,GAAS5kB,EAAMtkB,EAAQ8X,KAC1B,SAEF,MAAMooc,EAAyBrkW,EAASv+G,QACxC4id,EAAuB/vb,OAAOtR,EAAG,GACjC,MAAMjC,EAASyic,GAActxU,EAAQ4rD,EAAO,CAC1C35L,UACA2/c,kBAAmBO,EACnB97b,SAAU67b,GACTX,GACH,GAAI1ic,EAAOqtG,UAAYpyE,EAAS,EAC9B,OAAO6na,GAAgB3xU,EAAQlyB,EAAU92G,EAAM8yC,EAAS,EAAG8hJ,EAAO2lR,GAEpE,GAAI1ic,EAAOotG,SACT,OAAOptG,CAEX,CACA,OAAO6sG,EAASE,MAAM,GACtB,EAEEw2V,GAAiB,CAACpyU,EAAQ/tI,EAASogd,KACvCryU,EAAOI,UAAU0kB,OAAOutT,GACH,kBAAjBpgd,EAAQqE,KACV62V,EAAOl7V,EAAQ2zC,QAAQA,IACrBo6F,EAAO/hH,UAAU6L,MAAM8b,EAAO,IAGhCo6F,EAAO+tC,YAAY97K,EAAQ67K,KAAK,EAAO77K,EAAQ9D,MACjD,EAmDImkd,GAAiB,CAACtyU,EAAQ4rD,EAAO50L,EAAM8yC,EAAQkma,EAAYuB,KAZ1CzjW,MAerB,MAdqB,EAACh9G,EAASyhd,KAC/B,MAAMC,EAAiBl2V,GAAOxrH,GAASE,GAASqrH,EAAOk2V,GAA2BE,GAAezhd,EAAMiB,QAAQ7F,QAAUqmd,EAAYxgd,QAAQ7F,OAAS4E,EAAMiB,QAAQ8X,MAAQ0oc,EAAYxgd,QAAQ8X,QAChM,OAAIjZ,EAAQuK,SAAWk3c,EAA0Bl3c,OAC3Cm3c,EACK1hd,EAEAyhd,EAGJzhd,EAAQuK,OAASk3c,EAA0Bl3c,OAASvK,EAAUyhd,CAAyB,EAKvFG,CAFSf,GAAgB3xU,EAAQgwU,EAAWI,eAAgBp5c,EAAM8yC,EAAQ8hJ,EAAO2lR,GAAmBz1V,MAAK,IAAM,KAAIjtG,GAAUA,EAAO/d,UACzG6gd,GAAgB3xU,GAd7BlyB,EAcoDkiW,EAAWI,eAdnD3kd,GAAKqiH,GAAU,CAAC/6G,EAAG2R,IAAMA,EAAEqF,IAAI1O,OAAStI,EAAEgX,IAAI1O,UAcsBrE,EAAM8yC,EAAQ8hJ,EAAO2lR,GAAmBz1V,MAAK,IAAM,KAAIjtG,GAAUA,EAAO/d,UACpH,EAErD6hd,GAAiB,CAAC3yU,EAAQlvI,KAC9B,GAAuB,IAAnBA,EAAQuK,OACV,OAEF,MAAMskH,EAAMqgB,EAAOrgB,IACb43D,EAAWv3C,EAAOI,UAAUo3C,cAC5Bo7R,EAzCW,EAACjzV,EAAK7uH,KACvB,MAAM0/c,EAAel/U,GAAW,mBAC1BuhV,EAAkB70V,EAAMltH,GAAS,CAACwwD,EAAKtwD,KAC3C,MAAM8hd,EAAYj6B,GAAal5T,EAAK6wV,EAAe,OAAQlvZ,EAAIjmD,SAAWrK,EAAMygd,QAChF,OAAOnwZ,EAAIz0D,OAAO,CAAC,IACZmE,EACH8hd,cACC,GACJ,IACH,OAAO90V,EAAM60V,GAAiB,CAACvxZ,EAAKtwD,KAClC,MAAMs5E,EAAMuoY,EAAgBx3c,OAASimD,EAAIjmD,OAAS,EAC5C03c,EAAcjC,GAAqB9/c,EAAMiB,SAAWjB,EAAM8hd,UAAYj6B,GAAal5T,EAAK6wV,EAAe,SAAUlmY,IAAQt5E,EAAMu2c,UACrI,OAAOjmZ,EAAIz0D,OAAO,CAAC,IACZmE,EACH+hd,gBACC,GACJ,GAAG,EAyBqBC,CAAWrzV,EAAK7uH,GAC3Cq8V,EAAOylH,GAAoB5hd,IACzB,MAAM46L,EAAQjsE,EAAIwgB,UAAUnvI,EAAM+hd,YAAY3md,MAAOuzH,EAAI2gB,SACnDxd,EAAS9rH,GAAQA,IAAS40L,EAC5BklR,GAAqB9/c,EAAMiB,SAhEH,EAAC+tI,EAAQ/tI,EAASqrB,EAAQwlG,KACxD,MAAMmwV,EAAc1C,GAAgBvwU,EAAOrgB,IAAKriG,GAChDuyb,GAAU7vU,EAAOrgB,IAAKszV,EAAanwV,GACnCsvV,GAAepyU,EAAQ/tI,EAASghd,EAAY,EA8DxCC,CAAwBlzU,EAAQhvI,EAAMiB,QAASjB,EAAM8hd,UAAWhwV,GA5DtC,EAACkd,EAAQ/tI,EAAS8gd,EAAaD,EAAWhwV,KACxE,MAAMnD,EAAMqgB,EAAOrgB,IACbwzV,EAAiB5C,GAAgB5wV,EAAKmzV,GACtCM,EAAmB7C,GAAgB5wV,EAAKozV,GAC9ClD,GAAUlwV,EAAKyzV,EAAkBtwV,GACjC+sV,GAAUlwV,EAAKwzV,EAAgBrwV,GAC/B,MAAMuwV,EAAgB,CACpBjlc,OAAQ2kc,EAAY3kc,OACpBhiB,MAAO2md,EAAYhpc,IACnBA,IAAK+oc,EAAU1md,OAEXimd,EAAe9B,GAAgB5wV,EAAK0zV,GAC1CjB,GAAepyU,EAAQ/tI,EAASogd,EAAa,EAkDzCiB,CAAwBtzU,EAAQhvI,EAAMiB,QAASjB,EAAM+hd,YAAa/hd,EAAM8hd,UAAWhwV,GAErF+tV,GAAalxV,EAAK3uH,EAAM8hd,UAAWhwV,GACnC+tV,GAAalxV,EAAK3uH,EAAM+hd,YAAajwV,EAAO,IAE9Ckd,EAAOI,UAAUw3C,eAAeL,EAAS,EAGrCg8R,GAAiB,CAAC5zV,EAAKisE,EAAO35L,IAv+IlB,EAAC+E,EAAM8yC,EAAQ27S,KAC/B,GAAIwN,GAASj8V,IAAS8yC,GAAU9yC,EAAKqE,OACnC,OAAOqgH,EAAS/iH,KAAK6iB,GAAMxkB,EAAM8yC,IAC5B,CACL,MAAMonV,EAAa3d,GAAWg5E,IAC9B,OAAO7wU,EAASlwH,KAAK0lY,EAAWvd,SAAS38W,EAAM8yC,EAAQ0iZ,GAAWx1b,GAAOyuV,IAAW74V,KAAIsrD,GAAQ18B,GAAM08B,EAAK2C,UAAW,IACxH,GAk+IO24Z,CAAU5nR,EAAO,EAAGA,GAAOh/L,KAAIusK,IACpC,MAAMniK,EAAOmiK,EAAKt+G,UAOlB,OANA8xY,GAAU31b,EAAM/E,EAAQ7F,MAAMiP,OAAQuwL,GAAOvwJ,MAAKtxB,IAChD,MAAM46I,EAAMhlC,EAAIilC,YAChBD,EAAIK,SAAShuJ,EAAM,GACnB2tJ,EAAIM,OAAOl7I,EAAI8wC,UAAW9wC,EAAI+/B,QAC9B+la,GAAUlwV,EAAKglC,GAAKvxJ,GAAKA,IAAMw4L,GAAM,IAEhC50L,CAAI,IAGTy8c,GAAqBC,GAAgB,CAAC1zU,EAAQhvI,KAClD,MAAM2uH,EAAMqgB,EAAOrgB,IACb1tH,EAAUjB,EAAMiB,QAChB0yJ,EAAMgrT,GAAiBhwV,EAAIyhE,UAAWpwL,EAAMitC,OAAO4+E,SAAS,gCAoBlE,OAfAizV,GAAe9vU,EAAQ2kB,GAAKtpH,MAAKuwJ,IACV,iBAAjB35L,EAAQqE,KALY,EAACnE,EAAM8rB,KAC/B,MAAM01b,EAAY11b,EAAUvwB,IAAIyE,GAChC,OAAO66V,EAAU2mH,IAAczoc,GAAKyoc,GAAWt3V,QAAOz2E,GAAU8tJ,GAAM9tJ,EAAQ,UAAS,EAIjFgua,CAAkB3hd,EAAQ2zC,OAAQo6F,EAAO/hH,YAC3C+hH,EAAOoqB,YAAY+rB,UAAS,KAC1Bu9R,EAAa1zU,EAAOrgB,IAAKisE,EAAO35L,GAChC+tI,EAAO/hH,UAAU6L,MAAM73B,EAAQ2zC,OAAO,IAGhB,kBAAjB3zC,EAAQqE,MACjB0pI,EAAOoqB,YAAY+rB,UAAS,KAC1Bu9R,EAAa1zU,EAAOrgB,IAAKisE,EAAO35L,GAChC+tI,EAAO+tC,YAAY97K,EAAQ67K,KAAK,EAAO77K,EAAQ9D,MAAM,GAEzD,KAEK,CAAI,EAGP0ld,GAAgBlvW,GAAa,CAACmJ,EAAUv3F,KAC5C,MAAMu9b,EAFahmW,IAAYriH,GAAKqiH,GAAU,CAAC/6G,EAAG2R,IAAMA,EAAEtY,MAAMiP,OAAStI,EAAE3G,MAAMiP,SAE1D04c,CAAajmW,GAC9B+lJ,EAASt9O,EAAKvnB,QAAQyiW,GAAM,KAClC,OAAOp7J,GAAOy9Q,GAAgB7hd,GAAW0yG,EAAU1yG,EAASskB,EAAMs9O,IAAQ,EAEtEmgN,GAAqB,CAACC,EAAaC,IAAkB,CAACl0U,EAAQ4rD,EAAOokR,EAAYuB,EAAmBh7b,KACxG,IAAI5X,OACS,IAAT4X,IACFA,EAAoC,QAA5B5X,EAAKitL,EAAMhmK,mBAAgC,IAAPjnB,EAAgBA,EAAK,IAEnE,MAAMghH,EAAMqgB,EAAOrgB,IACbugS,EAAkB5+N,GAAmBthD,GAC3C,OAAKrgB,EAAI2G,GAAGslE,EAAOs0N,GAGZ+zD,EAAYjE,EAAW3yF,cAAe9mW,GAAM3pB,KAAIqF,GACjDiid,GAAiB35V,GAAMxpH,KAAKwlB,GAAMlb,SAAWpJ,EAAQ7F,MAAMiP,OACtD,GAEF,CAAC,CACJpJ,UACAgsC,MAAOuxa,GAAkB7vV,EAAKA,EAAIyhE,UAAWwK,EAAO,EAAGA,EAAO,EAAG2lR,OAEpEh1V,MAAM,IAVA,EAUG,EAaR43V,GAAiBV,IATF,CAAC9zV,EAAKisE,EAAO35L,KAChCshd,GAAe5zV,EAAKisE,EAAO35L,GAASopC,MAAKrkC,IACvC,MAAMuf,EAAOwqG,GAAaS,QAAQxqH,GAC5B4uB,EAAcq4I,GAAM1nJ,GAJK,WAAWnlB,KAKhBw0B,IACxBh4B,GAAI2oB,EAAMqP,EAAYr2B,MAAM,GAC9B,GACA,IAGE6kd,GAAgBP,IAAc,CAAC5hd,EAASskB,EAAMs9O,IAA2C,IAAhCt9O,EAAKqS,QAAQ32B,EAAQ7F,QAAkD,IAAlCynQ,EAAOjrO,QAAQ32B,EAAQ7F,SACrHiod,GAAiBL,GAAmBI,IAAe,GAwBnDE,GAAeb,GAAmBF,IAClCU,GAAcJ,IAAc,CAAC5hd,EAASskB,EAAMs9O,IAAWt9O,IAAStkB,EAAQ7F,OAASynQ,IAAW5hQ,EAAQ7F,QACpGmod,GAAeP,GAAmBC,IAAa,GAc/CO,GAAc,CAACx0U,EAAQgwU,IAvCR,EAAChwU,EAAQgwU,KAC5B,MAAMrrT,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAOksS,GAAe9vU,EAAQ2kB,GAAK/3J,KAAIg/L,IACrC,IAAIjtL,EACJ,MAAMmrC,EAASxuC,KAAKC,IAAI,EAAGopJ,EAAIkN,aACzB4iT,EAAoB1E,GAA2BC,EAAYpkR,EAAoC,QAA5BjtL,EAAKitL,EAAMhmK,mBAAgC,IAAPjnB,EAAgBA,EAAK,IAGlI,MAAO,CACL+1c,cAHoBpC,GAAetyU,EAAQ4rD,EAAOjnC,EAAIiN,eAAgB9nH,EAAQ2qa,GAAmB,GAIjGE,aAHmBN,GAAer0U,EAAQ4rD,EAAO6oR,GAAmB,GAIrE,IACA5id,QAAO,EAAE6id,gBAAeC,kBAAkBA,EAAat5c,OAAS,GAAKq5c,EAAcr5c,OAAS,GAAE,EA2BvDu5c,CAAa50U,EAAQgwU,GAAYl0V,KAAKN,GAAO,EAAEk5V,gBAAeC,mBACxG30U,EAAOoqB,YAAY5/J,MACnBw1I,EAAOoqB,YAAYxwD,OAAM,KACvBomC,EAAO+tC,YAAY,mBAAmB,IACrC,KAxosBY/tC,KAAUA,EAAO8qB,cAAc4pN,GAAQ,CAAE0iC,eAAe,GAAO,EAyosB5Ey9D,CAAS70U,GACT2yU,GAAe3yU,EAAQ00U,GA/BJ,EAAC10U,EAAQlvI,KAC9B,GAAuB,IAAnBA,EAAQuK,OACV,OAEF,MAAMk8K,EAAWv3C,EAAOI,UAAUo3C,cAClC21K,EAAOr8V,GAASE,GAASmjd,GAAen0U,EAAQhvI,KAChDgvI,EAAOI,UAAUw3C,eAAeL,EAAS,EA0BvCu9R,CAAe90U,EAAQ20U,GACvB,MAAM12a,EAAQ+hG,EAAOI,UAAUwjC,SACzBzK,EAAOszR,GAAWxuZ,EAAM2zH,eAAgB3zH,EAAM4zH,YAAa7xB,EAAOrgB,IAAIyhE,WAC5EphD,EAAO+tC,YAAY,oBACnB5U,EAAK99H,MAAK/qB,IACR,MAAMtZ,EAAOsZ,EAAEuqC,UACX7jD,EAAK6G,KAAKvO,OAAOghB,EAAEw5B,OAAS,KAAO0nT,KACrCx6V,EAAKytX,WAAWn0W,EAAEw5B,OAAS,EAAG,GAC9B8la,GAAgB5vU,EAAOrgB,IAAK3oH,EAAK0wB,YAAYt0B,GAAKA,IAAM4sI,EAAOrgB,IAAIyhE,YACrE,GACA,KAEG,KAgBH2zR,GAA4B,CAAC/0U,EAAQgwU,IAhDxB,EAAChwU,EAAQgwU,KAC1B,MAAMrrT,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAOksS,GAAe9vU,EAAQ2kB,GAAK/3J,KAAIg/L,IACrC,MAAM9hJ,EAASxuC,KAAKC,IAAI,EAAGopJ,EAAIkN,aACzBo+S,EAAaI,GAAcrwU,EAAOrgB,IAAKisE,EAAOjnC,EAAIiN,eAAgB9nH,GAClE2qa,EAAoB1E,GAA2BC,EAAYpkR,EAAOqkR,GACxE,OAAOsE,GAAav0U,EAAQ4rD,EAAO6oR,GAAmB,EAAOxE,EAAW,IACvEp+c,QAAOf,GAAWA,EAAQuK,OAAS,GAAE,EAyCgB25c,CAAWh1U,EAAQgwU,GAAYl0V,KAAKN,GAAO1qH,IACnGkvI,EAAOoqB,YAAY+rB,UAAS,KAxCT,EAACn2C,EAAQlvI,KAC5Bq8V,EAAOr8V,GAASE,GAASsjd,GAAat0U,EAAQhvI,IAAO,EAwCnDikd,CAAaj1U,EAAQlvI,EAAQ,KAExB,KAEHokd,GAAgB,CAACC,EAAOvqd,EAAO+5G,KACnC,IAAK,IAAI7zF,EAAI,EAAGA,EAAIqkc,EAAM95c,OAAQyV,IAChC,GAAI6zF,EAAUwwW,EAAMrkc,GAAIlmB,GACtB,OAAO,EAGX,OAAO,CAAK,EASR+0L,GAAU3/C,IACd,MAAMo1U,EAAY,CAChB,IACA,IACA,IACA,IACA,IACA,KAEIC,EAAW,CAAC,IACZC,EAAgB,KAAMC,OA9lqBJznW,EA8lqBqBm1Q,GAAgBjjP,GAAQnuI,QAAOI,GACrD,mBAAjBA,EAAQqE,MAA8C,kBAAjBrE,EAAQqE,MACxC0pI,EAAOw1U,sBAAsBvjd,EAAQ67K,OAhmqBdqiS,EAmmqB9BjtF,GAAsBljP,GAnmqBkC,CAC5DowU,eAAgBjzF,GAAkBrvQ,GAClCuvQ,cAAeH,GAAiBpvQ,GAChCqiW,yBAHuB,IAACriW,EAAUqiW,CAmmqBA,EAC5BsF,EAAqB,IA1soBCz1U,IAAUA,EAAO7uI,QAAQkwI,MAAM,wBA0soB1Bq0U,CAAsB11U,GACvDA,EAAO8K,GAAG,WAAW13I,IACnB,GAAkB,KAAdA,EAAE4rL,UAAmBo2M,GAAGO,gBAAgBviY,IAAM4sI,EAAOI,UAAU+8C,eAAiBn9C,EAAOI,UAAUme,aAAc,CACjH,MAAMyxT,EAAa5yF,GAAgBk4F,IAAiB,UAChCtF,EAAWI,eAAe/0c,OAAS,GAAK20c,EAAW3yF,cAAchiX,OAAS,GAAKo6c,MAChFjB,GAAYx0U,EAAQgwU,IACrC58c,EAAE9E,gBAEN,KACC,GACH0xI,EAAO8K,GAAG,WAAW13I,IACnB,GAAkB,KAAdA,EAAE4rL,SAAkBh/C,EAAOI,UAAU+8C,eAAiBn9C,EAAOI,UAAUme,aAAc,CACvF,MAAMyxT,EAAa5yF,GAAgBk4F,IAAiB,UAChCtF,EAAW3yF,cAAchiX,OAAS,GAAKo6c,MACxCV,GAA0B/0U,EAAQgwU,IACnD58c,EAAE9E,gBAEN,KACC,GACH,MAAMqnd,EAAsB,KAC1B,GAAI31U,EAAOI,UAAU+8C,eAAiBn9C,EAAOI,UAAUme,aAAc,CACnE,MAAMyxT,EAAa5yF,GAAgBk4F,IAAiB,UAChCtF,EAAWI,eAAe/0c,OAAS,GAAKo6c,MAzE1C,EAACz1U,EAAQgwU,KAC/B,MAAMrrT,EAAM3kB,EAAOI,UAAUwjC,SAC7BksS,GAAe9vU,EAAQ2kB,GAAK/3J,KAAIg/L,IAC9B,MAAM9hJ,EAASxuC,KAAKC,IAAI,EAAGopJ,EAAIkN,YAAc,GACvCo+S,EAAaI,GAAcrwU,EAAOrgB,IAAKisE,EAAOjnC,EAAIiN,eAAgB9nH,GAClE2qa,EAAoB1E,GAA2BC,EAAYpkR,EAAOqkR,GAClEyE,EAAgBpC,GAAetyU,EAAQ4rD,EAAOjnC,EAAIiN,eAAgB9nH,EAAQ2qa,GAAmB,GAC/FC,EAAcr5c,OAAS,GACzB2kI,EAAOoqB,YAAY+rB,UAAS,KAC1Bw8R,GAAe3yU,EAAQ00U,EAAc,GAEzC,GACA,EA+DIkB,CAAgB51U,EAAQgwU,EAE5B,GAEFhwU,EAAO8K,GAAG,SAAS13I,IAnDkB8hd,GAoDlBG,EAAUjid,GApDoC,CAACopB,EAAM5xB,IACjE4xB,IAAS5xB,EAAMo0L,UAAYo2M,GAAGO,gBAAgB/qY,MAoDjD+qd,GACF,IAEF31U,EAAO8K,GAAG,YAAY13I,IArDgB8hd,GAsDlBE,EAAWhid,GAtDmC,CAAC08K,EAAKllL,IACjEklL,EAAIygB,WAAW,KAAO3lM,EAAMird,YAsD/B74E,GAAMljN,iBAAiB95C,EAAQ21U,EACjC,GACA,EAOEG,GAAS91U,IACb,MAAM3kG,EAAOk/E,GAAMl/E,KACb22J,EAAYojM,GAAGpjM,UAAWC,EAASmjM,GAAGnjM,OAAQtyE,EAAMqgB,EAAOrgB,IAAKygB,EAAYJ,EAAOI,UAAW7jC,EAASyjC,EAAOzjC,OAC9G+wB,EAAUuhO,GAAIvhO,QACdyoV,EAAUzoV,EAAQzB,YAClBmqV,EAAW1oV,EAAQ5B,cAAgB4B,EAAQxB,WAC3CY,EAAQmiO,GAAI9gO,WAAWE,YAAc4gO,GAAI9gO,WAAWC,SACpDqxI,EAAQwvF,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,QACnCupV,EAAwB,CAACnoS,EAAKsD,KAClC,IACEpxC,EAAOwK,SAASujC,YAAYD,GAAK,EAAOpgK,OAAO0jK,GACjD,CAAE,MAAOn5B,GACT,GAEI8mC,EAAqB3rL,GAClBA,EAAE2rL,qBAELm3R,EAA0B,KAC9B,MAAMC,EAAexxT,IACnB,MAAMrjJ,EAAOq+G,EAAIn7G,OAAO,QAClB45I,EAAWuG,EAAIuvB,gBAErB,OADA5yK,EAAK6lB,YAAYi3H,GACVhe,EAAU6K,WAAWC,UAAU5pI,EAAM,CAAEskC,OAAQ,QAAS,EASjEo6F,EAAO8K,GAAG,WAAW13I,IACnB,MAAM4rL,EAAU5rL,EAAE4rL,QAClB,IAAKD,EAAmB3rL,KAAO4rL,IAAYiT,GAAUjT,IAAYgT,IAAchyD,EAAOI,UAAUme,aAAc,CAC5G,MAAM4+B,EAAcn9C,EAAOI,UAAU+8C,cAC/B77K,EAAO0+H,EAAO5tC,UACpB,GAAI+qF,IAAgB43K,GAAY/0N,EAAO5vI,OAAQkR,GAC7C,OAEF,IAAK67K,IAfmBx4B,KAC1B,MAAMvkB,EAAY+1U,EAAaxxT,GACzByxT,EAASz2V,EAAIilC,YAGnB,OAFAwxT,EAAOvxT,WAAW7kB,EAAO5tC,WAElBguC,IADc+1U,EAAaC,EACD,EAUVC,CAAoBr2U,EAAOI,UAAUwjC,UACxD,OAEFxwK,EAAE9E,iBACF0xI,EAAOwuB,WAAW,IACdltJ,EAAKsiH,YAAcjE,EAAI2gB,QAAQh/H,EAAKsiH,YACtCoc,EAAOI,UAAUquB,kBAAkBntJ,EAAKsiH,WAAY,GAEpDoc,EAAOI,UAAUquB,kBAAkBntJ,EAAM,GAE3C0+H,EAAO0uB,aACT,IACA,EAEE4nT,EAAY,KAChBt2U,EAAOo+L,UAAU5zU,IAAI,SAAU,KAAM,YAAY,EAE7C+rd,EAA8B,KAC7Bv2U,EAAO2sC,QACVhtD,EAAIzrD,KAAK8rE,EAAOwK,SAAU,qBAAqBp3I,IAC7C,IAAIuxJ,EACJ,GAAIvxJ,EAAE3E,SAAWuxI,EAAOwK,SAASviI,gBAG/B,GAFA08I,EAAMvkB,EAAUwjC,SAChB5jC,EAAO5tC,UAAUs5C,QACF,cAAXt4I,EAAEkD,KAAsB,CAC1B,GAAI0+W,GAAmBrwN,EAAIiN,gBACzB,OAEFxxB,EAAU2/R,aAAa3sa,EAAE8mD,QAAS9mD,EAAE+mD,QACtC,MACEimF,EAAU0kB,OAAOH,EAErB,GAEJ,EAwBIg6O,EAAY,KACXo6C,MAAMhpb,UAAUotK,gBACnBn9B,EAAO8K,GAAG,aAAa13I,IACrB,IAAK2rL,EAAmB3rL,IAA4B,SAAtBA,EAAE3E,OAAOmxH,SAAqB,CAC1D,MAAMt+G,EAAO0+H,EAAO5tC,UACpB9wF,EAAKi+M,OACLy9K,GAAMljN,iBAAiB95C,GAAQ,KAC7B1+H,EAAKoqI,OAAO,GAEhB,IAEJ,EAEI8qU,EAAwB,KAC5B,MAAMC,EAAwB50F,GAAyB7hP,GACvDA,EAAO8K,GAAG,SAAS13I,IACjB,MAAM3E,EAAS2E,EAAE3E,OACb,aAAa2C,KAAK3C,EAAOmxH,WAAaD,EAAI4+B,WAAW9vJ,KACvD2E,EAAE9E,iBACF0xI,EAAOI,UAAU9sI,OAAO7E,GACxBuxI,EAAO0uB,eAEe,MAApBjgK,EAAOmxH,UAAoBD,EAAIytP,SAAS3+W,EAAQgod,IAAuD,IAA7Bhod,EAAO2yH,WAAW/lH,QAAgBskH,EAAI4+B,WAAW9vJ,EAAOi5B,cACpIt0B,EAAE9E,iBACF8xI,EAAU9sI,OAAO7E,GACnB,GACA,EAuCEiod,EAA6B,KACjC12U,EAAO8K,GAAG,WAAW13I,IACnB,IAAK2rL,EAAmB3rL,IAAMA,EAAE4rL,UAAYgT,GACtC5xD,EAAU+8C,eAAoD,IAAnC/8C,EAAUwjC,SAAS/R,YAAmB,CACnE,MAAM5uC,EAAkBmd,EAAUyuC,UAAU5rD,gBAC5C,GAAIA,GAAmBA,EAAgBrD,UAAuD,UAA3CqD,EAAgBrD,SAASnwH,cAE1E,OADA2D,EAAE9E,kBACK,CAEX,CAEF,OAAO,CAAI,GACX,EA2BEqod,EAAyB,KAC7B,MAAMC,EAAU,KACdX,EAAsB,gBAAgB,GACtCA,EAAsB,4BAA4B,GAC7Cl2F,GAAkB//O,IACrBi2U,EAAsB,wBAAwB,EAChD,EAEG50F,GAAarhP,IAChBA,EAAO8K,GAAG,8BAA+B8rU,EAC3C,EAEIC,EAAsB,KAiB1B72U,EAAO8K,GAAG,0BAA0B13I,IACnB,eAAXA,EAAEkD,MAAuC,kBAAdlD,EAAE+9L,SAhBjC91J,EAAKskF,EAAIrsH,OAAO,4BAA4B0D,IAC1C,IAAI2H,EACJ,IAAI+oB,EAAa1wB,EAAK0wB,WACtB,MAAMof,EAAO64E,EAAIyhE,UACjB,IAAoB,OAAf15J,QAAsC,IAAfA,OAAwB,EAASA,EAAW04J,aAAeppL,EAAM,CAC3F,KAAO0wB,IAAei4F,EAAI2gB,QAAQ54G,IAAa,CAC7C,IAAsC,QAAhC/oB,EAAK+oB,EAAWA,kBAA+B,IAAP/oB,OAAgB,EAASA,EAAGyhL,aAAe14J,GAAcA,IAAeof,EACpH,OAEFpf,EAAaA,EAAWA,UAC1B,CACAi4F,EAAIn1H,IAAIk9B,EAAY,KAAM,CAAE,iBAAkB,GAChD,IAMF,GACA,EAmBEovb,EAAsB,KAC1B92U,EAAO+2U,cAAc/od,KAAK,kFAAsG,EAE5Hgpd,EAAwB,KACvBh3U,EAAO2sC,QACV3sC,EAAO8K,GAAG,WAAW,KACfh8I,SAAS0wN,gBAAkB1wN,SAASwS,MACtC0+H,EAAO46B,SAASlvB,OAClB,GAEJ,EAEIurU,EAAa,KACZj3U,EAAO2sC,SACV3sC,EAAO+2U,cAAc/od,KAAK,4BAC1BgyI,EAAO8K,GAAG,SAAS13I,IACjB,IAAIuxJ,EACsB,SAAtBvxJ,EAAE3E,OAAOmxH,WACX+kC,EAAM3kB,EAAOI,UAAUwjC,SACvB5jC,EAAO5tC,UAAUs5C,QACjB1L,EAAOI,UAAU0kB,OAAOH,GACxB3kB,EAAOI,UAAU1iF,YACjBsiF,EAAO0uB,cACT,IAEJ,EAEIwoT,EAA0B,KAC1B73M,GACFr/H,EAAO8K,GAAG,WAAW13I,IACnB,GAAIgiY,GAAGt2M,eAAe1rL,KAAOA,EAAEN,WAA2B,KAAdM,EAAE4rL,SAAgC,KAAd5rL,EAAE4rL,SAAiB,CACjF5rL,EAAE9E,iBACgB0xI,EAAOI,UAAU+sP,SACzBuuD,OAAO,OAAsB,KAAdtob,EAAE4rL,QAAiB,WAAa,UAAW,eACtE,IAEJ,EAEIm4R,EAAoB,KACxBn3U,EAAO8K,GAAG,SAAS13I,IACjB,IAAIy1H,EAAMz1H,EAAE3E,OACZ,GACE,GAAoB,MAAhBo6H,EAAIx4H,QAEN,YADA+C,EAAE9E,uBAGGu6H,EAAMA,EAAInhG,WAAW,IAEhCs4G,EAAO+2U,cAAc/od,KAAK,kDAAkD,EAExEopd,EAA8B,KAClCp3U,EAAO8K,GAAG,QAAQ,KAChB9K,EAAOrgB,IAAIzrD,KAAK8rE,EAAO5tC,UAAW,UAAUh/F,IAC1CA,EAAE9E,gBAAgB,GAClB,GACF,EAYE8wY,EAAyB3kW,EA2BzBsrI,EAAQ,KA1KZ/lC,EAAO8K,GAAG,WAAW13I,IACnB,GAAI2rL,EAAmB3rL,IAAMA,EAAE4rL,UAAYo2M,GAAGpjM,UAC5C,OAEF,IAAIrtC,EAAMvkB,EAAUwjC,SACpB,MAAM/oH,EAAY8pG,EAAIiN,eAChB9nH,EAAS66G,EAAIkN,YACb/qH,EAAO64E,EAAIyhE,UACjB,IAAIlsI,EAAS2F,EACb,GAAK8pG,EAAI0N,WAAwB,IAAXvoH,EAAtB,CAGA,KAAOoL,EAAOxtB,YAAcwtB,EAAOxtB,WAAWk8F,aAAe1uE,GAAUA,EAAOxtB,aAAeof,GAC3FoO,EAASA,EAAOxtB,WAEM,eAApBwtB,EAAO0qE,WACTogB,EAAO/hH,UAAU+wI,OAAO,kBAAcp/J,EAAWslD,GACjDyvG,EAAMhlC,EAAIilC,YACVD,EAAIK,SAASnqG,EAAW,GACxB8pG,EAAIM,OAAOpqG,EAAW,GACtBulF,EAAU0kB,OAAOH,GATnB,CAUA,IAuJFuxT,IACKrnH,GAAID,cAvGT5uN,EAAO8K,GAAG,yBAAyB13I,IAC5BgiY,GAAGO,gBAAgBviY,IAPC4sI,KAC3B,MAAM1+H,EAAO0+H,EAAO5tC,UACduyD,EAAM3kB,EAAOI,UAAUwjC,SAC7B,OAAOjf,EAAIiN,iBAAmBjN,EAAImN,cAAgBnN,EAAIiN,iBAAmBtwJ,GAA4B,IAApBqjJ,EAAIkN,aAAqBlN,EAAIoN,YAAczwJ,EAAK8/G,WAAW/lH,MAAM,EAIjHg8c,CAAqBr3U,IAClDI,EAAU1iF,WACZ,IACC,GAsGCs4Z,IACFO,IACAC,IAtHFx2U,EAAO8K,GAAG,QAAQ,KAChBmrU,EAAsB,4BAA6B30R,GAAmBthD,GAAQ,IAuH9Eo3U,IACAV,IA/CFn6W,EAAO81F,cAAc,MAAMt7L,IACzB,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAC0B,8BAA3B/Z,EAAM+Z,GAAG+vG,KAAK,UAChB9pH,EAAM+Z,GAAG4wC,QAEb,IA2CIgrE,GACFsqV,IACAC,IACAE,KAEAb,KAGAP,IApSJ/1U,EAAO8K,GAAG,WAAW13I,IACnB,IAAK2rL,EAAmB3rL,IAAMA,EAAE4rL,UAAYgT,EAAW,CACrD,IAAKhyD,EAAO5tC,UAAUz1E,qBAAqB,MAAMthB,OAC/C,OAEF,GAAI+kI,EAAU+8C,eAAoD,IAAnC/8C,EAAUwjC,SAAS/R,YAAmB,CACnE,MAAM76J,EAAOopI,EAAUyuC,UACjB5rD,EAAkBjsH,EAAKisH,gBAC7B,GAAsB,OAAlBjsH,EAAK4oH,SAGP,OAFAD,EAAIj+D,OAAO1qD,QACX5D,EAAE9E,iBAGA20H,GAAmBA,EAAgBrD,UAAuD,OAA3CqD,EAAgBrD,SAASnwH,gBAC1EkwH,EAAIj+D,OAAOuhE,GACX7vH,EAAE9E,iBAEN,CACF,KAoRAqwY,IArPgD,MAClD,MAAM24E,EAA4B,KAChC,MAAMhwN,EAAW3nI,EAAIqrP,WAAW5qO,EAAUC,WAAW/b,WAAU,IAC/D,MAAO,KACL,MAAM71H,EAAS2xI,EAAUC,WACrB5xI,IAAWuxI,EAAO5tC,YACpButB,EAAIyxE,UAAU3iM,EAAQ,QAAS,MAC/B4sC,EAAKisN,GAAUzmI,IACbpyH,EAAO8od,iBAAiB12V,EAAKyD,WAAU,GAAM,IAEjD,CACD,EAEGkzV,EAA4B,KACxBp3U,EAAU+8C,eAAiBx9D,EAAIwgB,UAAUC,EAAUC,WAAY1gB,EAAI2gB,WAAa3gB,EAAIwgB,UAAUC,EAAUzC,SAAUhe,EAAI2gB,SAEhIN,EAAO8K,GAAG,YAAY13I,IACpB,IAAImnR,EACJ,UAAKx7F,EAAmB3rL,IAAqB,IAAdA,EAAE4rL,SAA+B,KAAd5rL,EAAE4rL,UAAmBw4R,OACrEj9L,EAAkB+8L,IAClBt3U,EAAOwK,SAASujC,YAAY,UAAU,GACtCwsG,IACAnnR,EAAE9E,kBACK,EAGT,IAEFqxH,EAAIzrD,KAAK8rE,EAAOwK,SAAU,OAAOp3I,IAC/B,IAAK2rL,EAAmB3rL,IAAMokd,IAA6B,CACzD,MAAMj9L,EAAkB+8L,IACxBt6E,GAAMljN,iBAAiB95C,GAAQ,KAC7Bu6I,GAAiB,GAErB,IACA,EAmNAk9L,GACAd,IACAE,IACAC,IACAI,IACAR,IACF,EAOF,OALIn7C,GAAMv7R,IAlDJg2U,IACFO,IACAC,IACAY,IACAd,IACI5pV,IACFsqV,IACAC,IACAE,MAGApB,IACFp3E,IACAg4E,IACAG,IACAI,MAsCFnxS,IAEK,CACLq5N,yBACArsD,SAjEe,KACf,IAAKgjI,GAAW/1U,EAAOlyE,QACrB,OAAO,EAET,MAAMyqG,EAAMv4B,EAAOI,UAAU+sP,SAC7B,OAAQ50N,IAAQA,EAAI8D,YAAiC,IAAnB9D,EAAI8D,UAAgB,EA6DvD,EAcGq7S,GAAQjtG,GAASvoL,IAYjBy1R,GAAc33U,GAAUA,EAAO2sC,OAAS3sC,EAAOj4G,aAAa63F,SAASnwH,mBAAgBG,EACrFgod,GAAkB3nc,GAAO09U,GAAS19U,GAAKzF,IAAwB,IAAnBuwG,EAAYvwG,KACxDqtc,GAAmB73U,IACvB,MAAMzC,EAAYyC,EAAO7uI,QAAQzD,IAC3Bq7Z,EAAY/oR,EAAOokS,aAAarb,UACtC,OAAO6uD,GAAgB,CACrBvqD,2BAA4B9vR,EAAU,8BACtCy5C,qBAAsBz5C,EAAU,wBAChC25C,oBAAqB35C,EAAU,uBAC/B+0R,2BAA4B/0R,EAAU,8BACtC05C,kBAAmB15C,EAAU,qBAC7BixR,kCAAmCjxR,EAAU,qCAC7C80R,yBAA0B90R,EAAU,4BACpCq1R,sBAAuBr1R,EAAU,yBACjC+pR,uBAAwB/pR,EAAU,0BAClCg1R,kBAAmBh1R,EAAU,qBAC7BgqR,wBAAyBhqR,EAAU,2BACnCs0R,kBAAmBt0R,EAAU,qBAC7B00R,wBAAyB10R,EAAU,2BACnC6iS,eAAgB7iS,EAAU,kBAC1Bs1R,cAAet1R,EAAU,iBACzBkzR,UAAWknD,GAAY33U,GACvB0yR,gBAAiBn1R,EAAU,mBAC3Bo1R,2BAA4B5uC,GAA4B/jP,GACxDu4C,SAAUh7C,EAAU,oBACpBt2B,UAAU,EACVgjT,WAAYlB,EACZj6Z,SAAUkxI,EAAOwK,UACjB,EAEEstU,GAAmB93U,IACvB,MAAMzC,EAAYyC,EAAO7uI,QAAQzD,IACjC,OAAOkqd,GAAgB,CACrBzzG,gBAAiB5mO,EAAU,mBAC3B8mO,wBAAyB9mO,EAAU,2BACnCqnO,iBAAkBrnO,EAAU,oBAC5BojO,eAAgBpjO,EAAU,kBAC1BntI,OAAQmtI,EAAU,UAClB6mO,eAAgB7mO,EAAU,kBAC1BsjO,cAAetjO,EAAU,iBACzBgjO,eAAgBhjO,EAAU,kBAC1BkjO,aAAcljO,EAAU,gBACxB+iO,YAAa/iO,EAAU,eACvB0mO,iCAAkC1mO,EAAU,uBAC5C,EA+GEw6U,GAAa/3U,IACjBA,EAAOg4U,4BACPh4U,EAAO8kI,aAAc,EA9jmBN9kI,KACfA,EAAO7xH,SAAS,OAAO,EA8jmBvB8pc,CAASj4U,GACTA,EAAO0L,OAAM,GAd2B1L,KACxC,MAAMl5F,EAAOk5F,EAAOrgB,IAAIyhE,UACnBphD,EAAO2sC,QAAYghN,GAAa3tP,IAAWA,EAAOI,UAAUC,UAAS,KAAUv5F,GAClF+jV,GAAgB/jV,GAAMzL,MAAKge,IACzB,MAAMriD,EAAOqiD,EAAIw1H,UACX6vN,EAAW3rC,GAAU/7V,GAAQ6zX,GAAgB7zX,GAAMulH,MAAMljE,GAAOA,EACtE2mF,EAAOI,UAAU0kB,OAAO45O,EAAShlB,UAAU,GAE/C,EAOAw+F,CAAkCl4U,GAClCA,EAAO0uB,YAAY,CAAEnuG,SAAS,IAC9B,MAAM43Z,EAAuBn2F,GAAwBhiP,GACjDxwH,EAAW2oc,IACbA,EAAqBjtd,KAAK80I,EAAQA,GApCpBA,KAChB,MAAMo4U,EAAYl2F,GAAaliP,GAC3Bo4U,GACFp7E,GAAMljN,iBAAiB95C,GAAQ,KAC7B,IAAI2/P,EAEFA,GADgB,IAAdy4E,EACYp4U,EAEAA,EAAO08K,cAAchvT,IAAI0qd,GAErCz4E,IAAgBA,EAAYpjX,YAC9BojX,EAAYj0P,QACZi0P,EAAYv/P,UAAUwyC,iBACxB,GACC,IACL,EAuBAwlS,CAAUp4U,EAAO,EAEbq4U,GAAwBr4U,GAAUA,EAAO2sC,OAAS3sC,EAAOuvC,GAAG+4I,iBAAmBtoL,EAAOrgB,IAAI2oM,iBAuB1FgwJ,GAAiBt4U,IACrB,MAAMsoL,EAAmB+vJ,GAAsBr4U,GACzCu4U,EAAU34F,GAAW5/O,GACrBrY,EAAMqY,EAAOkpL,WACbsvJ,EAAY,KAChBlwJ,EAAiBgxC,UAAU3xO,GACtBqY,EAAO2sC,QACV3sC,EAAOuvC,GAAG+4I,iBAAiBgxC,UAAUi/G,EACvC,EAEIv5b,EAAS,KACTghH,EAAOlyE,QACT0qZ,IAEAx4U,EAAO8K,GAAG,SAAU0tU,EACtB,EAEF,GAAIx4U,EAAO+2U,cAAc17c,OAAS,EAAG,CACnC,IAAIo9c,EAAiB,GACrBl+V,GAAMl/E,KAAK2kG,EAAO+2U,eAAej6b,IAC/B27b,GAAkB37b,EAAQ,MAAM,IAElCkjH,EAAOrgB,IAAI1gE,SAASw5Z,EACtB,CACA,MAAMC,EAAiB9tc,QAAQi5C,IA9CK,EAACm8E,EAAQrY,EAAKgxV,KAClD,MACE96V,KAAM+6V,EACN96V,KAAM+6V,GACJzrH,EAAYzlO,GAAKx1H,GAAQ+nH,QAAQ0uM,SAAS3yT,IAAIwxa,GAA0Bt1a,MACtE2md,EAAkBF,EAAWhsd,KAAIo4B,IACrC,MAAM2iG,EAAMzN,QAAQ0uM,SAASl7T,IAAI+5a,GAA0BziZ,IAC3D,OAAI41F,EAAS+M,GACJ/8G,QAAQC,QAAQwtc,GAAsBr4U,GAAQuoL,WAAWvjS,EAAK2iG,IAEhE/8G,QAAQC,SAAS,IAEpBi4C,EAAW,IACZg2Z,EACHT,GAAsBr4U,GAAQk5N,QAAQ2/G,IAExC,OAAI74U,EAAO2sC,OACF7pH,EAEAA,EAASj2D,OAAO,CAACmzI,EAAOuvC,GAAG+4I,iBAAiB4wC,QAAQy/G,IAC7D,EA0BmCI,CAA8B/4U,EAAQrY,EAAK4wV,IAAUx0Z,KAAK/kC,GAAQmuV,MAAMnuV,GACrGg6b,EAAer5F,GAAgB3/O,GAIrC,OAHIg5U,GApOc,EAACh5U,EAAQzpH,KAC3B,MAAMjV,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WACnCv3C,EAAY81S,GAAkBrrO,GAAYhkH,IAC1Cwb,EAAQikG,GAAaM,QAAQ,SACnC4uO,GAAMnzU,EAAO,OAAQ,YACrB2mG,GAAS3mG,EAAOikG,GAAaO,SAAS/qG,IACtCktG,GAAS5oE,EAAW/9B,GACpBkjH,EAAO8K,GAAG,UAAU,KAClB88D,GAAS9qL,EAAM,GACf,EA4NAm8b,CAAYj5U,EAAQg5U,GAEfN,CAAc,EAyCjBQ,GAA+Bl5U,KACZ,IAAnBA,EAAOlyE,UAVckyE,KACpBu7R,GAAMv7R,IACTA,EAAOh1H,KAAK,CACVu1C,SAAS,EACT3a,OAAQ,SAGZo6F,EAAOm5U,aAAen5U,EAAOo1C,WAAW,CAAExvI,OAAQ,OAAQ,EAIxDwza,CAAmBp5U,GACnB+3U,GAAW/3U,GACb,EAeIq5U,GAAoBr5U,IACxB,MAAMmtC,EAAYntC,EAAOj4G,aACzB,IAAI29F,EAAMsa,EAAOwK,SACbxK,EAAO2sC,SACT+qS,GAAMtqS,SAASD,EAAW,oBAC1BntC,EAAOwoD,gBAAkB9iE,EAAM52H,SAC/BkxI,EAAOwvJ,cAAgB3gS,OACvBmxI,EAAO0sK,YAAcv/H,EACrBntC,EAAOurN,qBAAuBp+K,GAEhC,MAAM7rK,EAAO0+H,EAAO5tC,UACpB9wF,EAAKiqD,UAAW,EAChBy0E,EAAOs5U,SAAWj4F,GAAarhP,GAC/BA,EAAOu5U,cAAgBj4F,GAAkBthP,GACrCA,EAAOu/P,oBACLv/P,EAAO2sC,QAAqD,WAA3C+qS,GAAMz7Z,SAAS36C,EAAM,YAAY,KACpDA,EAAKwb,MAAMzG,SAAW,YAExB/U,EAAK0gI,gBAAkB,QAEzB1gI,EAAKiqD,UAAW,EAChBy0E,EAAOokS,aAAe+G,GAAanrS,GACnCA,EAAO5vI,OAASivW,GAAOy4G,GAAiB93U,IACxCA,EAAOrgB,IAAM8qP,GAAS/kP,EAAK,CACzBsoP,aAAa,EACbxI,cAAexlO,EAAOy6C,WACtBirL,oBAAqB1lO,EACrB2sO,eAAe,EACfvB,aAAcprO,EAAO2sC,OAAS3sC,EAAO5tC,UAAY,KACjDm5Q,QAASvrO,EAAO2sC,OAChBv8K,OAAQ4vI,EAAO5vI,OACf2oW,eAAgBqmB,GAAwBp/O,GACxCg5N,eAAgBqmB,GAAkBr/O,GAClCkrO,YAAa93W,IACX4sI,EAAO7xH,SAAS,YAAa/a,EAAE,IAGnC4sI,EAAOzjC,OA5PYyjC,KACnB,MAAMzjC,EAAS8zT,GAAUwnD,GAAiB73U,GAASA,EAAO5vI,QA4D1D,OA3DAmsG,EAAO63R,mBAAmB,2BAA2B,CAACr9X,EAAO5E,KAC3D,MAAMwtH,EAAMqgB,EAAOrgB,IACbugT,EAAe,YAAc/ta,EACnC,IAAI2e,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB,IAAI3iB,EAAQ6I,EAAK6pH,KAAK1uH,GACtB,GAAIhE,IAAU6I,EAAK6pH,KAAKq/S,GAAe,CACrC,GAA+B,IAA3B/xa,EAAMy6B,QAAQ,UAA6C,IAA3Bz6B,EAAMy6B,QAAQ,SAChD,SAEW,UAATz2B,GACFhE,EAAQwxH,EAAIotP,eAAeptP,EAAImyL,WAAW3jT,GAAQ6I,EAAK7E,MAClDhE,EAAMkN,SACTlN,EAAQ,MAEV6I,EAAK6pH,KAAKq/S,EAAc/xa,GACxB6I,EAAK6pH,KAAK1uH,EAAMhE,IACE,aAATgE,GACT6E,EAAK6pH,KAAKq/S,EAAc/xa,GACxB6I,EAAK6pH,KAAK1uH,EAAM,OAEhB6E,EAAK6pH,KAAKq/S,EAAclgS,EAAOy6C,WAAWtsL,EAAOgE,EAAM6E,EAAK7E,MAEhE,CACF,KAEFoqG,EAAO81F,cAAc,UAAUt7L,IAC7B,IAAI+Z,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACbxa,EAAOU,EAAK6pH,KAAK,SAAW,UACL,IAAzBvqH,EAAKsyB,QAAQ,SACf5xB,EAAK6pH,KAAK,OAAQ,OAASvqH,EAE/B,KAEEgtX,GAAoBtjP,IACtBzjC,EAAO81F,cAAc,UAAUt7L,IAC7B,IAAI4H,EACJ,IAAImS,EAAI/Z,EAAMsE,OACd,KAAOyV,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACnB9Z,EAAKV,KAAO,EACZU,EAAK7E,KAAO,WACZ6E,EAAK7I,MAAQ,UAAY6xI,EAAOrgB,IAAI22D,OAA6B,QAArB33K,EAAK3H,EAAK7I,aAA0B,IAAPwQ,EAAgBA,EAAK,IAAM,IACtG,KAGJ49F,EAAO81F,cAAc,2BAA2Bt7L,IAC9C,IAAI+Z,EAAI/Z,EAAMsE,OACd,MAAMq4Y,EAAmB1zQ,EAAO5vI,OAAO29L,sBACvC,KAAOj9K,KAAK,CACV,MAAM9Z,EAAOD,EAAM+Z,GACf9Z,EAAKu3J,QAAQmlP,IAAkD,IAA7B18Y,EAAKqO,OAAO,MAAMhK,QACtDrE,EAAK+sH,OAAO,IAAIs8Q,GAAQ,KAAM,GAElC,KAEK9jS,CAAM,EA+LGi9W,CAAax5U,GAC7BA,EAAOiL,WAAa22R,GAhRO5hS,KAC3B,MAAMzC,EAAYyC,EAAO7uI,QAAQzD,IACjC,MAAO,IACFmqd,GAAiB73U,MACjB83U,GAAiB93U,MACjB43U,GAAgB,CACjBv3C,oBAAqB9iS,EAAU,uBAC/Bg2Q,kBAAmBh2Q,EAAU,qBAC7BioO,cAAejoO,EAAU,iBACzBmoO,oBAAqBnoO,EAAU,uBAC/BylQ,eAAgBzlQ,EAAU,kBAC1Bg+N,SAAUh+N,EAAU,YACpBulQ,gBAAiBvlQ,EAAU,mBAC3BklQ,OAAQllQ,EAAU,UAClBslQ,aAActlQ,EAAU,gBACxBolQ,cAAeplQ,EAAU,mBAE5B,EA+PiCk8U,CAAqBz5U,GAASA,GAChEA,EAAOI,UAAYo+R,GAAgBx+R,EAAOrgB,IAAKqgB,EAAO46B,SAAU56B,EAAOiL,WAAYjL,GACnFA,EAAO05U,UAAY3lF,GAAU/zP,GAC7BA,EAAO/hH,UAAYkzZ,GAAUnxS,GAC7BA,EAAOoqB,YAAc2nR,GAAY/xS,GACjCA,EAAO25U,sBAAwB,IAAIle,GAAWz7T,GAC9CA,EAAO+3Q,oBAAsBo2D,GAAmBnuU,GAChD+lT,GAAQ/lT,GACR8hM,GAAQ9hM,GACR+mT,GAAQ/mT,GACHu7R,GAAMv7R,KAjoEGA,KACdA,EAAO8K,GAAG,aAAa13I,IACjBA,EAAEhG,QAAU,IACdgG,EAAE9E,iBACFg5c,GAAoBtnU,GACtB,GACA,EA4nEAwlM,CAAQxlM,GA1uBIA,KACd2/C,GAAQ3/C,EAAO,EA0uBbk/C,CAAQl/C,IAEV,MAAMrwC,EAAQ+kP,GAAQ10M,GACtB4lT,GAAQ5lT,EAAQrwC,GAvmMFqwC,KACdA,EAAO8K,GAAG,cAAc,IAAMonR,GAAclyR,IAAQ,EAumMpD45U,CAAQ55U,GACR6yS,GAAQ7yS,GACRo8K,GAAQp8K,GACR,MAAM65U,EAAgBr+C,GAAQx7R,GAnHhBA,KACd,MAAMta,EAAMsa,EAAOwK,SAAUlpI,EAAO0+H,EAAO5tC,UAtomBzB4tC,KAClBA,EAAO7xH,SAAS,UAAU,EAsomB1B2rc,CAAY95U,GACPmiP,GAAwBniP,KAC3Bta,EAAIpkH,KAAKy4c,YAAa,EACtBrC,GAAMtmR,UAAU9vL,EAAM,aAAc,UAEtC0+H,EAAOm/P,OAAS22E,GAAO91U,GAzomBFA,KACrBA,EAAO7xH,SAAS,aAAa,EAyomB7B6rc,CAAeh6U,GACf,MAAMi6U,EAAiBp6F,GAAkB7/O,QAClBpwI,IAAnBqqd,IACF34c,EAAK69C,IAAM86Z,GAEb,MAAMC,EAAU93F,GAAWpiP,GACvBk6U,GACFl6U,EAAO8K,GAAG,oBAAoB13I,IAC5BmnH,GAAMl/E,KAAK6+a,GAASjod,IAClBmB,EAAE9B,QAAU8B,EAAE9B,QAAQtC,QAAQiD,GAAS0e,GAC9B,wBAAuB4wP,OAAO5wP,GAAO,UAC5C,GACF,IAGNqvH,EAAO8K,GAAG,cAAc,KACtB9K,EAAO+qB,UAAU/qB,EAAO5tC,UAAU,IAEpC4tC,EAAO8K,GAAG,mCAAmC13I,IAC3C4sI,EAAOy4P,UAAuB,qBAAXrlY,EAAEkD,IAA2B,GAChD,EAwFF6jd,CAAQn6U,GAtWuBA,KAC/B,MAAMo6U,EAAan2F,GAAcjkP,GACfplB,EAASspQ,GAAUlkP,MAClBjlB,EAAYq/V,IAAkD,YAJxDrsd,IAFVA,IAA6B,QAAtBA,EAAI0B,cAEM4qd,CAAStsd,IADfA,IAAOA,EAAIsN,QAAU,IAAMtN,EAAIsN,QAAU,IAClBi/c,CAAoBvsd,GAAO,QAAU,UAIxCwsd,CAAmBH,IAC/D9wc,QAAQxD,KAAK,8MACf,EAkWA00c,CAAyBx6U,GACzB65U,EAAc/9V,MAAK,KACjB,MAAM2+V,EA1EYz6U,KACpB,IAAI06U,GAAW,EACf,MAAMC,EAAkBpwb,YAAW,KAC5Bmwb,GACH16U,EAAO46U,kBAAiB,EAC1B,GACC,KACH,MAAO,KACL5kY,aAAa2kY,GACbD,GAAW,EACX16U,EAAO46U,kBAAiB,EAAM,CAC/B,EA+DwBC,CAAc76U,GACrCs4U,GAAet4U,GAAQj8E,MAAK,KAC1Bm1Z,GAA6Bl5U,GAC7By6U,GAAgB,GAChB,IACDK,IACD96U,EAAO46U,kBAAiB,GACxBtC,GAAet4U,GAAQj8E,MAAK,KAC1B+2Z,IAAW/2Z,MAAKg3Z,IACd/6U,EAAO46U,kBAAiB,GACxB1B,GAA6Bl5U,GAC7B5pD,GAAW4pD,EAAO,IACjB/5G,IACD+5G,EAAOonS,oBAAoBhiZ,KAAK,CAC9B9uB,KAAM,QACNigB,KAAM7I,OAAOuY,KAEfizb,GAA6Bl5U,GAC7B5pD,GAAW4pD,EAAO,GAClB,GACF,GACF,EAGEnuI,GAAS4pH,EAGTu/V,GAAQvwG,GAASvoL,IA6BjB+4R,GAAe,CAACj7U,EAAQk7U,KAC5B,MAAMC,EAActsH,GAAIvhO,QAAQzB,YAAci2P,GAAkB9hP,GAAU,iBACpEo7U,EAAkBp7U,EAAOtyF,UAAUyta,GACnCrtO,EAAWptH,GAAOK,GAAaS,QAAQwe,EAAOj4G,cAAe,YAAYmsC,KAAKo6R,IAC9E+sH,EAhCoB,EAACv8b,EAAIhN,EAAOwpc,EAAaxtO,KACnD,MAAMqhD,EAASpuK,GAAaM,QAAQ,UAUpC,OATAysH,EAASzyM,MAAK1B,GAAKs2T,GAAM9gE,EAAQ,WAAYx1P,KAC7C4mF,GAAS4uK,EAAQmsL,GACjB/6V,GAAS4uK,EAAQ,CACfrwQ,GAAIA,EAAK,OACTy8b,YAAa,IACbC,kBAAmB,OACnB1pc,UAEFmuJ,GAAMkvH,EAAQ,yBACPA,CAAM,EAqBDssL,CAAoBz7U,EAAOlhH,GAAIs8b,EAAiBr9F,GAAe/9O,GAAS8tG,GAAUnuH,IAC9F07V,EAAI/1b,OAAS,KACX+1b,EAAI/1b,OAAS,KACb06G,EAAO7xH,SAAS,OAAO,EAEzB6xH,EAAOurN,qBAAuB2vH,EAAQlmJ,gBACtCh1L,EAAOivJ,cAAgBosL,EACvBr7U,EAAO07U,WA1Ba17U,KACpB,IAAI07U,EAAa19F,GAAWh+O,GAAU,eAClCi+O,GAAmBj+O,KAAYA,EAAO27U,kBACxCD,GAAc,eAAiB17U,EAAOq+G,gBAAgB4tK,SAAW,QAEnEyvD,GAAc,wEACd,MAAME,EAAS19F,GAAUl+O,GACnB67U,EAAY19F,GAAan+O,GACzB87U,EAAqB97U,EAAOtyF,UAAUo0U,GAAkB9hP,IAK9D,OAJIo+O,GAAyBp+O,KAC3B07U,GAAc,uDAAyDt9F,GAAyBp+O,GAAU,QAE5G07U,GAA0B,oBAAcE,8BAAqCC,eAAyB77U,EAAOlhH,mBAAqBg9b,wBAC3HJ,CAAU,EAaGK,CAAc/7U,GAClCg7U,GAAMxwd,IAAI0wd,EAAQlmJ,gBAAiBqmJ,EAAI,EAEnCW,GAAkBh8U,IACtB,MAAMmvJ,EAASnvJ,EAAOivJ,cAChBgtL,EAAQ,KACZj8U,EAAOwoD,gBAAkB2mG,EAAO3mG,gBAChC6wR,GAAkBr5U,EAAO,EAE3B,GAAIyjP,GAAuBzjP,IAAW6uN,GAAIvhO,QAAQzB,YAAa,CAC7D,MAAMnG,EAAMsa,EAAOwK,SACnB9kB,EAAItgG,OACJsgG,EAAIz2G,MAAM+wH,EAAO07U,YACjBh2V,EAAIm2D,QACJogS,GACF,KAAO,CACL,MAAM7/V,GA1DI5tH,EA0DUuyH,GAAaS,QAAQ2tK,GA1DH5wK,GAAO/vH,EA0DK,OA1DWqD,IA0DH,KACxDuqH,EAAOwlD,SACPq6S,GAAO,KAET9sL,EAAOc,OAASjwJ,EAAO07U,UACzB,CA/DW,IAACltd,CA+DZ,EAcI0td,GAAQzxG,GAASvoL,IACjBi6R,GAAa,CAACn8U,EAAQo8U,EAAoB5rY,KAC9C,MAAM6rY,EAAS9qG,GAAc7jX,IAAI8iF,GAC3B8rY,EAAY/qG,GAAcpY,KAAK3oR,IAAWwvD,EAAO27U,gBAAgB3sd,QAAQ,MAAO,IAEtF,GADAwhF,EAAS+pC,GAAMxpH,KAAKy/E,GAChB6rY,IAAyD,IAA/C9hW,GAAMk6D,QAAQ2nS,EAAoB5rY,GAAgB,CAC9D,GAAIwvD,EAAO9qH,QAAQs7D,GACjB,OAEF,IACE,MAAM+rY,EAAiBF,EAAOr8U,EAAQs8U,IAAc,CAAC,EACrDt8U,EAAO9qH,QAAQs7D,GAAU+rY,EACrB/sc,EAAW+sc,EAAerjZ,QAC5BqjZ,EAAerjZ,KAAK8mE,EAAQs8U,GAC5BF,EAAmBpud,KAAKwiF,GAE5B,CAAE,MAAOp9E,GA1ySW,EAAC4sI,EAAQ7tI,EAAM8zB,KACrC,MAAM94B,EAAUsiX,GAAK/hU,UAAU,CAC7B,mCACAv7C,IAEFyiY,GAAU50P,EAAQ,kBAAmB,CAAE7yI,YACvCq6a,GAAUr6a,EAAS84B,GACnBohZ,GAAarnS,EAAQ7yI,EAAQ,EAoySzBqvd,CAAgBx8U,EAAQxvD,EAAQp9E,EAClC,CACF,GA0DIqpd,GAAyB,CAACjud,EAAS2gS,KAChC,CACLumB,gBAAiBlnT,EACjBwmU,gBAAiB7lC,EACjB7xJ,IAAK,CAAC,IAQJo/U,GAAmB18U,IACvB,MAAM89N,EAAgB99N,EAAOj4G,aAC7B,OAAOi4G,EAAO2sC,OAAS8vS,GAAuB,MAPjB3+G,KAC7B,MAAM9oC,EAAkBknJ,GAAM13c,OAAO,OAErC,OADA03c,GAAMz5R,YAAYuyI,EAAiB8oC,GAC5B2+G,GAAuBznJ,EAAiBA,EAAgB,EAIT2nJ,CAAuB7+G,EAAc,EAEvF8+G,GAAgB58U,IACpB,MAAMnX,EAAMmX,EAAOj4G,aAEnB,OADAi4G,EAAOwkS,WAAa37S,EAAI/rG,MAAM1G,QAC1BwkG,EAASwlQ,GAASpgP,IApCMA,KAC5B,MAAMtpD,EAASspD,EAAOwjS,MAAMxuF,SAC5B,OAAOt+P,EAASA,IAAWgmY,GAAiB18U,EAAO,EAmC1C68U,CAAsB78U,GACpBxwH,EAAW4wW,GAASpgP,IAlCLA,KAC1B,MAAMnX,EAAMmX,EAAOj4G,aAEbgqB,EADQquU,GAASpgP,EACVwjS,CAAMxjS,EAAQnX,GAQ3B,OAPI92E,EAAK2jQ,gBAAgBp+S,WACvBy6C,EAAK2jQ,gBAAgB52R,GAAKizB,EAAK2jQ,gBAAgB52R,IAAMkhH,EAAOlhH,GAAK,WAE/DizB,EAAKijR,iBAAmBjjR,EAAKijR,gBAAgB19T,WAC/Cy6C,EAAKijR,gBAAgBl2S,GAAKizB,EAAKijR,gBAAgBl2S,IAAMkhH,EAAOlhH,GAAK,oBAEnEizB,EAAKzxB,OAASyxB,EAAK+qa,aAAe/qa,EAAK+qa,aAAej0V,EAAI0L,aACnDxiF,CAAI,EAwBFgra,CAAoB/8U,GAEpB08U,GAAiB18U,EAC1B,EAmBI9mE,GAAOwvP,UACX1oL,EAAO7xH,SAAS,iBA5FA6xH,KAChB,MAAMg9U,EAAeziW,GAAMxpH,KAAK+tX,GAAgB9+O,IAC1Ci9U,EAAej9U,EAAOuvC,GAAGx2G,SAAS1zD,SAAS+0G,MAC3C8iW,EAAY,IACb/iW,GAAYzsH,IAAI,WAAW0sH,SAC3BD,GAAYzsH,IAAIsvd,GAAc5iW,OAEnCszO,GAAOwvH,GAAW,CAACC,EAAS3tS,KACrBkkB,GAAMupR,EAAcztS,IACvBxvC,EAAOuvC,GAAGx2G,SAASqkZ,QAAQ5tS,EAAM2tS,EACnC,GACA,EAkFFE,CAAUr9U,GAhFMA,KAChB,MAAMwjS,EAAQpjD,GAASpgP,GACvB,GAAIplB,EAAS4oT,GAAQ,CACnB,MAAM85C,EAAQ9rG,GAAa9jX,IAAI81a,GAC/BxjS,EAAOwjS,MAAQ85C,EAAMt9U,EAAQwxO,GAAarY,KAAKqqE,KAAW,CAAC,EACvDh0Z,EAAWwwH,EAAOwjS,MAAMtqW,OAC1B8mE,EAAOwjS,MAAMtqW,KAAK8mE,EAAQwxO,GAAarY,KAAKqqE,IAAUxjS,EAAO27U,gBAAgB3sd,QAAQ,MAAO,IAEhG,MACEgxI,EAAOwjS,MAAQ,CAAC,CAClB,EAuEA+5C,CAAUv9U,GArEMA,KAChB,MAAMoK,EAAQk2O,GAAStgP,GACjBw9U,EAAQ/rG,GAAa/jX,IAAI08I,GAC/BpK,EAAOoK,MAAQozU,EAAMx9U,EAAQyxO,GAAatY,KAAK/uN,GAAO,EAmEtDqzU,CAAUz9U,GArGQA,KAClB,MAAMo8U,EAAqB,GAC3BjvH,EAAOq0B,GAAWxhP,IAAS7tI,IACzBgqd,GAAWn8U,EAAQo8U,EANEjqd,IAChBA,EAAKnD,QAAQ,MAAO,IAKc0ud,CAAiBvrd,GAAM,GAC9D,EAkGFwrd,CAAY39U,GACZ,MAAM49U,QAAmBhB,GAAc58U,GAvBd,EAACA,EAAQ1C,KAClC,MAAMugV,EAAc,CAClBt0a,KAAMmyE,EAASlwH,KAAK8xI,EAAI/zF,MAAMgzE,MAAM9hF,GACpCiP,KAAMgyE,EAASlwH,KAAK8xI,EAAI5zF,MAAM6yE,MAAM9hF,GACpCsnN,UAAWrmI,EAASlwH,KAAK8xI,EAAIykH,WAAWxlI,MAAMd,GAC9CwzD,WAAYmC,IACSA,GAA+B,aAAtBpxC,EAAOhkH,KAAKtuB,OAEtCguH,EAASlwH,KAAK8xI,EAAI2xC,YAAY5zI,MAAK9P,GAAKA,EAAE6lJ,IAC5C,GAGJpxC,EAAOuvC,GAAK,IACPvvC,EAAOuvC,MACPsuS,EACJ,EASDC,CAAmB99U,EAAQtkB,EAASlwH,KAAKoyd,EAAWtgV,KAAK/gB,MAAM,CAAC,IAChEyjB,EAAO01K,gBAAkBkoK,EAAWloK,gBACpCqyH,GAA6B/nS,GACzBA,EAAO2sC,OACT0sS,GAAkBr5U,GAhJP,EAACA,EAAQk7U,KACtBD,GAAaj7U,EAAQk7U,GACjBA,EAAQxlK,kBACVwlK,EAAQxlK,gBAAgB54R,MAAM1G,QAAU4pH,EAAOwkS,WAC/CxkS,EAAOn1E,OAASmwZ,GAAMjoI,SAASmoI,EAAQxlK,kBAEzC11K,EAAOj4G,aAAajL,MAAM1G,QAAU,OACpC4kc,GAAM5pR,UAAUpxD,EAAOlhH,GAAI,cAAe,QAC1CkhH,EAAOj4G,aAAajL,MAAMi4R,WAAa/0K,EAAO+9U,cAC9C/B,GAAgBh8U,EAAO,EAyIrBg+U,CAAOh+U,EAAQ,CACb01K,gBAAiBkoK,EAAWloK,gBAC5Bsf,gBAAiB4oJ,EAAW5oJ,iBAEhC,EAGIipJ,GAAQxzG,GAASvoL,IACjBg8R,GAAoB/rd,GAA2B,MAAnBA,EAAK7C,OAAO,GACxC6ud,GAAe,CAACC,EAAcp+U,KAClC,MAAMq+U,EAAe/+F,GAAgBt/O,GAC/Bs+U,EAAc/+F,GAAev/O,GACnC,IAAKyvO,GAAKa,QAAQ+tG,IAAkC,OAAjBA,EAAuB,CACxD,MAAMr5b,EAAMsiG,GAAWg3V,GAAeA,EAAc,GAAIt+U,EAAO08K,cAAcn+D,iBAAmB8/N,OAChGD,EAAa5zd,IAAIw6B,GAAKmoV,OAAM,KAv7SN,EAACntO,EAAQh7G,EAAK7yB,KACtCm1a,GAAStnS,EAAQ,oBAAqBunS,GAAgB,WAAYviZ,EAAK7yB,GAAM,EAu7SzEosd,CAAkBv+U,EAAQh7G,EAAKq5b,EAAa,GAEhD,GAEIG,GAAY,CAACx+U,EAAQjsH,KACzB,MAAMyvZ,EAAQpjD,GAASpgP,GACvB,GAAIplB,EAAS4oT,KAAW06C,GAAkB16C,KAAW9vO,GAAM89K,GAAarY,KAAMqqE,GAAQ,CACpF,MAAMi7C,EAAWp+F,GAAYrgP,GACvBh7G,EAAMy5b,EAAWz+U,EAAOq+G,gBAAgB30B,WAAW+0P,GAAY,UAAWj7C,UAAgBzvZ,OAChGy9V,GAAaxmW,KAAKw4Z,EAAOx+Y,GAAKmoV,OAAM,KA97SjB,EAACntO,EAAQh7G,EAAK7yB,KACnCm1a,GAAStnS,EAAQ,iBAAkBunS,GAAgB,QAASviZ,EAAK7yB,GAAM,EA87SnEusd,CAAe1+U,EAAQh7G,EAAKw+Y,EAAM,GAEtC,GAEIm7C,GAAY,CAAC3+U,EAAQjsH,KACzB,MAAMq2H,EAAQk2O,GAAStgP,GACvB,GAAc,WAAVoK,IAAuBspD,GAAM+9K,GAAatY,KAAM/uN,GAAQ,CAC1D,MAAMw0U,EAAWr+F,GAAYvgP,GACvBh7G,EAAM41F,EAASgkW,GAAY5+U,EAAOq+G,gBAAgB30B,WAAWk1P,GAAY,UAAWx0U,UAAgBr2H,OAC1G09V,GAAazmW,KAAKo/H,EAAOplH,GAAKmoV,OAAM,KAr8SjB,EAACntO,EAAQh7G,EAAK7yB,KACnCm1a,GAAStnS,EAAQ,iBAAkBunS,GAAgB,QAASviZ,EAAK7yB,GAAM,EAq8SnE0sd,CAAe7+U,EAAQh7G,EAAKolH,EAAM,GAEtC,GAMI00U,GAA0B,CAAC9+U,EAAQ7tI,EAAM4hB,IAAW2nG,EAASlwH,KAAK2G,GAAMN,QAAOM,GAAQm1H,GAAWn1H,KAAUgoH,GAAYlkH,IAAI9D,KAAOvF,KAAIuF,IAAQ,CACnJ6yB,IAAK,GAAIg7G,EAAO08K,cAAcn+D,iBAAmBpsP,UAAe4hB,OAChE5hB,KAAMupH,EAAS/iH,KAAKxG,OAEhB+qd,GAAY,CAACkB,EAAcp+U,EAAQjsH,KACvC,MAAMgrc,EAAkBD,GAAwB9+U,EAAQ,UAAWjsH,GAC7Dirc,EAVuBh/U,IAAUtkB,EAASlwH,KAAKuzX,GAAY/+O,IAASnuI,OAAOy1H,IAAY16H,KAAIo4B,IAAO,CACxGA,MACA7yB,KAAMupH,EAASE,WAQQqjW,CAAuBj/U,GAAQpjB,SAAQ,IAAMkiW,GAAwB9+U,EAAQ8+O,GAAgB9+O,GAAS,MAC7HmtN,EAru3BUt8U,KACV,MAAM0H,EAAI,GACJvqB,EAAO+nB,IACXwC,EAAEvqB,KAAK+nB,EAAE,EAEX,IAAK,IAAIjF,EAAI,EAAGA,EAAID,EAAIxV,OAAQyV,IAC9BD,EAAIC,GAAGuqB,KAAKrtC,GAEd,OAAOuqB,CAAC,EA6t3BD2uG,CAAI,CACT63V,EACAC,KACEE,IACFd,EAAa5zd,IAAI00d,EAAQl6b,KAAKmoV,OAAM,KAl+SjB,EAACntO,EAAQh7G,EAAK7yB,KACnCm1a,GAAStnS,EAAQ,iBAAkBunS,GAAgB,QAASviZ,EAAK7yB,GAAM,EAk+SnEgtd,CAAen/U,EAAQk/U,EAAQl6b,IAAKk6b,EAAQ/sd,KAAK4qH,iBAAiB,GAClE,GACF,EAEEqiW,GAAc,CAACp/U,EAAQjsH,KAC3B,MAAMsrc,EAAa,CAACltd,EAAM6yB,KACxBusV,GAAcvmW,KAAK7Y,EAAM6yB,GAAKmoV,OAAM,KA5+ShB,EAACntO,EAAQh7G,EAAK7yB,KACpCm1a,GAAStnS,EAAQ,kBAAmBunS,GAAgB,SAAUviZ,EAAK7yB,GAAM,EA4+SrEmtd,CAAgBt/U,EAAQh7G,EAAK7yB,EAAK,GAClC,EAEJu7V,GAAO+zB,GAAqBzhP,IAAS,CAACh7G,EAAK7yB,KACzCktd,EAAWltd,EAAM6yB,GACjBg7G,EAAO7uI,QAAQvD,IAAI,UAAW4zX,GAAWxhP,GAAQnzI,OAAOsF,GAAM,IAEhEg7V,EAAOq0B,GAAWxhP,IAASxvD,MACzBA,EAAS+pC,GAAMxpH,KAAKy/E,KACL+gS,GAAcpY,KAAK3oR,IAAY0tY,GAAkB1tY,IAC9D6uY,EAAW7uY,EAAQ,WAAYA,WAAkBz8D,OACnD,GACA,EAUEg7V,GAAc,CAAC/uO,EAAQjsH,KAC3B,MAAMqqc,EAAe/vG,GAAaA,aAC5B0pG,EAAa,MACZ/3U,EAAOlyE,SAXMkyE,KACpB,MAAMwjS,EAAQpjD,GAASpgP,GACvB,OAAQplB,EAAS4oT,IAAUxoT,EAAcw2P,GAAa9jX,IAAI81a,GAAO,EASxC+7C,CAAcv/U,IAPnBA,KACpB,MAAMoK,EAAQk2O,GAAStgP,GACvB,OAAOhlB,EAAcy2P,GAAa/jX,IAAI08I,GAAO,EAKKo1U,CAAcx/U,IAC5D9mE,GAAK8mE,EACP,EAEFw+U,GAAUx+U,EAAQjsH,GAClB4qc,GAAU3+U,EAAQjsH,GAClBoqc,GAAaC,EAAcp+U,GAC3Bk9U,GAAUkB,EAAcp+U,EAAQjsH,GAChCqrc,GAAYp/U,EAAQjsH,GACpBqqc,EAAatvG,YAAY/qT,KAAKg0Z,EAAYA,EAAW,EAMjDrhY,GAASspD,IACb,MAAMlhH,EAAKkhH,EAAOlhH,GAClB2wV,GAAKC,QAAQ4P,GAAgBt/O,IAC7B,MAAM6oO,EAAe,KACnBo1G,GAAMr8S,OAAO/yK,OAAQ,QAASg6W,GAC9B7oO,EAAOtpD,QAAQ,EAEjB,IAAKoyR,GAAWt+U,MAAMo+U,UAEpB,YADAq1G,GAAM/pZ,KAAKrlE,OAAQ,QAASg6W,GAG9B,IAAK7oO,EAAOj4G,aACV,OAEF,MAAMv5B,EAAUuyH,GAAaS,QAAQwe,EAAOj4G,cACtCioL,EAAWmgJ,GAAQ3hW,GACzBwxI,EAAO8K,GAAG,UAAU,KAClB7sB,EAAMzvH,EAAQmxH,IAAIvtH,YAAYyuH,GAAQqvO,GAAS1hW,EAASqyH,EAAK1uH,QAC7DouH,GAAS/xH,EAASwhN,EAAS,IAE7BhwE,EAAOuvC,GAAG+4I,iBAxBgB,EAAC95T,EAASwxI,IAAWy5N,GAASC,WAAWlrW,EAAS,CAC5EuqW,eAAgBwoB,GAAkBvhP,GAClCg5N,eAAgBqmB,GAAkBr/O,KAsBLy/U,CAAoBjxd,EAASwxI,GACrD8gP,GAAW9gP,GAIdA,EAAO2sC,QAAS,GAHhB3sC,EAAO+9U,cAAgB/9U,EAAOj4G,aAAajL,MAAMi4R,WACjD/0K,EAAOj4G,aAAajL,MAAMi4R,WAAa,UAIzC,MAAM9hT,EAAO+sI,EAAOj4G,aAAa90B,MAAQgrd,GAAM99U,UAAUrhH,EAAI,QACzD7rB,IACF+sI,EAAO0qH,YAAcz3P,EACjB8tX,GAAe/gP,KAAYgzN,GAAkBhzN,EAAOj4G,gBACtDk2b,GAAMx7R,YAAYw7R,GAAMz5c,OAAO,QAAS,CACtClO,KAAM,SACNnE,KAAM2sB,IACJA,GACJkhH,EAAO+gP,gBAAiB,GAE1B/gP,EAAO8kS,kBAAoB1xa,IACzB4sI,EAAO7xH,SAAS/a,EAAEkD,KAAMlD,EAAE,EAE5B6qd,GAAM/pZ,KAAKjhE,EAAM,eAAgB+sI,EAAO8kS,mBACxC9kS,EAAO8K,GAAG,SAAS,KACjB9K,EAAO0/U,cAAc,KAEnB1+F,GAAkBhhP,IAAY/sI,EAAKikV,OAAO5/U,UAAarE,EAAKikV,OAAO77U,QAAWpI,EAAK4xa,gBACrF5xa,EAAK4xa,cAAgB5xa,EAAKikV,OAC1BjkV,EAAKikV,OAAS,KACZl3M,EAAO08K,cAAcijK,cACrB3/U,EAAO25R,UAAS,GACT1ma,EAAK4xa,cAAc5xa,MAIhC+sI,EAAO+5C,cAAgB2sP,GAAc1mS,GACrCA,EAAOonS,oBAAsBrB,GAAoB/lS,GA72qB7BA,IAA6C,QAAnCA,EAAO7uI,QAAQzD,IAAI,YA82qB7Ckyd,CAAc5/U,IAChBA,EAAO8K,GAAG,cAAc13I,IAClBA,EAAE84C,OACJ94C,EAAE9B,QAAU2sd,GAAM3nS,OAAOljL,EAAE9B,SAC7B,IAGA2vX,GAA2BjhP,IAC7BA,EAAO8K,GAAG,UAAU,KACd9K,EAAO8kI,aACT9kI,EAAO9zF,MACT,IAGAg1U,GAAuBlhP,KACzBA,EAAO4kS,cAAgB,MACjB5kS,EAAO8kI,aAAgB9kI,EAAOzjH,WAAcyjH,EAAO+yM,YACrD/yM,EAAO9zF,KAAK,CACVtG,OAAQ,MACRwnH,WAAW,EACXyyT,WAAW,GAEf,EAEF7/U,EAAO08K,cAAc5xK,GAAG,eAAgB9K,EAAO4kS,gBAEjD5kS,EAAO08K,cAAclyT,IAAIw1I,GACzB+uO,GAAY/uO,EAAQA,EAAOjsH,OAAO,EAiB9B0uS,GAAkBlsL,KAAWxI,WAC7BM,GAAUo0L,GAAgBp0L,UAC1BD,GAAWq0L,GAAgBr0L,WAC3B0xV,GAAmB5qc,IACvB,GAAI+lG,EAAW/lG,GACb,MAAO,GACF,CACL,MAAM2tZ,EAAc71E,EAAU93U,GAAWA,EAAUA,EAAQhkB,MAAM,QAC3D6ud,EAAiB7yH,EAAM21E,EAAa30E,IAC1C,OAAOb,EAAS0yH,EAAgBz4V,GAClC,GAEI04V,GAAkB,CAAClyd,EAAMqD,KAC7B,MAAM0d,EAx/4BS,EAACoB,EAAKwtG,KACrB,MAAM9jF,EAAI,CAAC,EACLpO,EAAI,CAAC,EAEX,OADA2zF,GAAejvG,EAAKwtG,EAAM0B,GAAOxlF,GAAIwlF,GAAO5zF,IACrC,CACLoO,IACApO,IACD,EAi/4Bc2qL,CAAS/kN,GAAS,CAAChD,EAAOJ,IAChCsvH,EAAWvvH,EAAMC,KAE1B,OApBqBg4U,EAoBAl3T,EAAO8qB,EApBGqsI,EAoBAn3J,EAAO0c,EApBM,CAC5Cw6S,SAAU/4T,EAAS+4T,GACnB50U,QAAS6b,EAASg5J,IAFE,IAAC+/J,EAAU//J,CAoBS,EAOpCi6S,GAAa,CAACC,EAAe/td,IAC1BuhM,GAAMwsR,EAAcn6I,WAAY5zU,GAKnCgud,GAA2B,CAACC,EAAe/xV,KASxC,IARsB,CAC3BgyV,YAAY,EACZC,iBAAiB,EACjBj/b,QAAQ,EACRk/b,aAAc34V,GAAMw4V,EAAe,gBAAgB7jW,MAAM,aACzDikW,gBAAgB,MAKbnyV,EAHuB,CAAE+4L,SAAS,GAGF,CAAC,IAGlCq5J,GAAqB,CAACtzP,EAAiBh8N,KAC3C,IAAIwN,EACJ,MAAM+hd,EAAiE,QAAnC/hd,EAAKxN,EAAQwvd,wBAAqC,IAAPhid,EAAgBA,EAAK,CAAC,EACrG,OAAIwuN,GAAmBA,EAAgBwzP,iBAC9BpmW,GAAMn3G,OAAO,CAAC,EAAG+pN,EAAgBwzP,iBAAkBD,GAEnDA,CACT,EAaIE,GAAiB,CAACC,EAAgBX,EAAeY,EAAwB3vd,KAC7E,MAAM4vd,EAAgBjB,GAAiBgB,EAAuBE,gBACxDC,EAAiBnB,GAAiB3ud,EAAQ+jB,SAC1Cgsc,EAxCiB,EAAChB,EAAe/td,IAChC8td,GAAWC,EAAe/td,GAAQ+td,EAAcn6I,WAAW5zU,GAAQ,CAAC,EAuCtDgvd,CAAiBjB,EAAe,UAE/CkB,EAZmB,EAACP,EAAgBX,EAAee,EAAgBI,IACrER,GAAkBZ,GAAWC,EAAe,UACvCmB,EAEAJ,EAQeK,CAAmBT,EAAgBX,EAAee,EADpDC,EAAahsc,QAAU4qc,GAAiBoB,EAAahsc,SAAW+rc,GAEhFM,EAjBe,EAACR,EAAe7rc,IAAY,IAC9C4qc,GAAiBiB,MACjBjB,GAAiB5qc,IAeIssc,CAAeT,EAAeK,GACtD,OAAO7mW,GAAMn3G,OAAOjS,EAAS,CAC3B6vd,eAAgBD,EAChB7rc,QAASqsc,GACT,EAKEE,GAAiB,CAACZ,EAAgBxyV,EAASr9G,EAAgB8vc,EAAwB3vd,KACvF,IAAIwN,EACJ,MAAM+id,EAAwBb,EAAiB,CAAE/lJ,OAAQqlJ,GAAmD,QAAzBxhd,EAAKxN,EAAQ2pU,cAA2B,IAAPn8T,EAAgBA,EAAK,CAAC,EAAG0vH,IAAa,CAAC,EACrJ6xV,EAAgBF,GAAgB,CAAC,UAAW1nR,GAAUopR,EAAuBvwd,IAC7Ewwd,EAAkBpnW,GAAMn3G,OAAO4N,EAAgB8vc,EAAwBZ,EAAc/ud,UAP1E,EAAC0vd,EAAgBX,IAC3BW,GAAkBZ,GAAWC,EAAe,UAMmD0B,CAAWf,EAAgBX,GAhEhH,EAACA,EAAe/td,EAAM02C,EAAW,CAAC,KACnD,MAAMk9R,EAAWm6I,EAAcn6I,WACzB87I,EAAiBj6V,GAAMm+M,EAAU5zU,GAAMoqH,MAAM,CAAC,GACpD,OAAOhC,GAAMn3G,OAAO,CAAC,EAAGylC,EAAUg5a,EAAe,EA6DiGv4V,CAAW42V,EAAe,UAAY,CAAC,EAAG,CAAES,iBAAkBF,GAAmBK,EAAwBZ,EAAc/ud,aACzQ,OAAOyvd,GAAeC,EAAgBX,EAAeY,EAAwBa,EAAgB,EAOzF52T,GAAY,CAAC/qB,EAAQnX,IAz4VP,EAACmX,EAAQnX,IAAQ+zS,GAAwB58R,GAAQA,OAAO+qB,UAAUliC,GAy4VnDi5V,CAAY9hV,EAAQnX,GAEjDk5V,GAAyB/hV,IAC7B,MAIMgiV,EAAcrkc,GAAS,KAC3BwvU,EAAO,4BAA4Bj8V,MAAM,MAAMiB,IACzCwrB,IAAUxrB,GACZ6tI,EAAO/hH,UAAUyjC,OAAO,QAAUvvD,EACpC,IAEY,SAAVwrB,GAVe,EAACxrB,EAAMhE,KAC1B6xI,EAAO/hH,UAAU+wI,OAAO78J,EAAMhE,GAC9B6xI,EAAO0uB,aAAa,EASlB8iR,CAAa,QAAU7zZ,EACzB,EAEFqiH,EAAO0vT,eAAeuyB,YAAY,CAChCC,YAAaF,EAAY,QACzBG,cAAeH,EAAY,UAC3BI,aAAcJ,EAAY,SAC1BK,YAAaL,EAAY,WACzBM,YAAaN,EAAY,SACzB,EAeEO,GAAqBviV,IACzB+hV,GAAuB/hV,GAdUA,KACjC,MAAMwiV,EAAcrwd,GAAQ,KAC1B,MAAMiuI,EAAYJ,EAAOI,UACnBrpI,EAAQqpI,EAAU+8C,cAAgB,CAACn9C,EAAOrgB,IAAIwgB,UAAUC,EAAUyuC,UAAW7uC,EAAOrgB,IAAI2gB,UAAYF,EAAUwjD,oBACpH,OAAOvnE,EAAOtlH,GAAOC,GAAQgkH,EAAcglB,EAAO/hH,UAAUs8X,UAAUvjZ,EAAM7E,KAAO,EAErF6tI,EAAO0vT,eAAeuyB,YAAY,CAChCC,YAAaM,EAAY,aACzBL,cAAeK,EAAY,eAC3BJ,aAAcI,EAAY,cAC1BH,YAAaG,EAAY,iBACxB,QAAQ,EAIXC,CAA2BziV,EAAO,EA6D9B0iV,GAAY,CAAC1iV,EAAQ7xI,KACzB,MAAMiyI,EAAYJ,EAAOI,UACnBzgB,EAAMqgB,EAAOrgB,IACnB,MAAI,QAAQvuH,KAAKjD,GAlCQ,EAACwxH,EAAKglC,EAAK1jC,EAAM7wH,KAC1C,MAAM02C,EAAOi6E,GAAaS,QAAQ7B,EAAIyhE,WAWtC,OATEngE,EADEmmR,GAAkBtgW,EAAM2yU,GAAcG,eAAej1N,GAAMv0J,GACtD6wH,EAAKjyH,QAAQ,KAAM,UAEnBiyH,EAAKjyH,QAAQ,UAAW,KAE7Bu4Y,GAAmBzgW,EAAM2yU,GAAcI,aAAal1N,GAAMv0J,GACrD6wH,EAAKjyH,QAAQ,0BAA2B,UAExCiyH,EAAKjyH,QAAQ,uBAAwB,IAEnC,EAuBF2zd,CAAmBhjW,EAAKygB,EAAUwjC,SAAUz1K,EAAO6xI,EAAO5vI,QAE1DjC,CACT,EAEIy0d,GAAgB,CAAC5iV,EAAQ7xI,KAC7B,GAAI6xI,EAAOI,UAAUme,aAAc,CACjC,MAAM,QAACjtJ,EAAO,QAAE4B,GA3BG/E,KACrB,GAAqB,kBAAVA,EAAoB,CAC7B,MAAM+E,EAAUqnH,GAAMn3G,OAAO,CAC3BioI,MAAOl9I,EAAMk9I,MACbxtI,KAAM,CAAEwtI,MAAOl9I,EAAMk9I,QACpBl9I,GACH,MAAO,CACLmD,QAASnD,EAAMmD,QACf4B,UAEJ,CACA,MAAO,CACL5B,QAASnD,EACT+E,QAAS,CAAC,EACX,EAa4B2vd,CAAe10d,GAC1Csla,GAAqBzzR,EAAQ,IACxB9sI,EACH5B,QAASoxd,GAAU1iV,EAAQ1uI,GAC3Bs0C,OAAQ,OACRh4C,KAAK,EACLwyI,WAAW,IACV/kG,MAAKr4B,IACN,MAAM8/c,EAngWY,EAAC9iV,EAAQ7xI,EAAO+E,IAAYypa,GAA2B38R,GAAQA,OAAO8qB,cAAc38J,EAAO+E,GAmgWrF6vd,CAAgB/iV,EAAQh9H,EAAK1R,QAAS4B,GAC9Dyga,GAAsB3zR,EAAQ8iV,EAAiB9/c,GAC/Cg9H,EAAO+qB,WAAW,GAEtB,GAqCIi4T,GAAkB,CACtB,YAAa,OACb,cAAe,QAEXC,GAAS7iW,GAAM,QACf8iW,GAAuB,CAAC/9C,EAAU3uH,EAAS3tL,IASxC/B,GAAU/F,GAAaS,QAAQqH,IAAMA,GARxBA,IAAOkZ,GAAOlZ,EAAKs8S,GAAUvoT,SAAQ,IACnDqmW,GAAOp6V,GACFjB,GAAMo7V,GAAiB79C,GAAUjxW,MAAKivZ,GAAkBziW,GAAOmI,EAAKs6V,KAEpEznW,EAASE,SAI+BwnW,CAAYv6V,KADhDA,GAAOn9F,GAAGq1F,GAAaS,QAAQg1L,GAAU3tL,KAKpDw6V,GAAcl+C,GAAY,CAAC3uH,EAAS3tL,IAAQnN,EAASlwH,KAAKq9H,GAAKj8H,IAAIm0H,GAAaS,SAAS3vH,OAAOg+V,IAAa37R,MAAK1lE,GAAW00d,GAAqB/9C,EAAU3uH,EAAShoT,EAAQmxH,KAAKlD,GAD5J,EAAC0oT,EAAUt8S,IAAQnN,EAASlwH,KAAKi/W,GAASvoL,IAAIjmI,SAAS4sE,EAAKs8S,GAAU,IACyFm+C,CAAoBn+C,EAAU32a,EAAQmxH,QAAOpD,MAAM,IACxOgnW,GAAcF,GAAY,aAC1BG,GAAgB9wR,GAJMo5H,GAAcA,EAAW98T,QAAQ,YAAa,IAAIA,QAAQ,QAAS,MAI5Cq0d,GAAY,gBAEzDI,GAAwBzjV,GAAU6qP,GAAgB7qP,EAAO5tC,WAAWl+B,MAAKy7B,IAC7E,MAAM90C,EAAY80C,EAAM90C,YACxB,OAAO6gE,EAASlwH,KAAKynW,GAASp4S,GAAaA,EAAUnzB,WAAamzB,EAAU,IAOxE6oa,GAAY,CAAC1jV,EAAQ5jB,IALH4jB,IAAUtkB,EAASlwH,KAAKw0I,EAAOI,UAAUwjC,UAAU1vG,MAAKywF,IAC9E,MAAM79G,EAAOk5F,EAAO5tC,UAEpB,OADsBuyD,EAAIiN,iBAAmB9qH,GAA4B,IAApB69G,EAAIkN,YAClCn2C,EAASE,OAASF,EAASlwH,KAAKw0I,EAAOI,UAAUC,UAAS,GAAM,IAEnDsjV,CAAgB3jV,GAAQpjB,QAAQxB,EAAMqoW,GAAuBzjV,IAASpzI,IAAIm0H,GAAaS,SAAS3vH,OAAOg+V,IAAa37R,KAAKkoD,GACzJwnW,GAAW,CAAC5jV,EAAQ7jB,IAAWunW,GAAU1jV,EAAQitN,EAASvxO,EAAS/iH,KAAMwjH,IAEzE0nW,GAAqB,CAAC7jV,EAAQ7xI,KAClC,GAAI,YAAYiD,KAAKjD,GAAQ,CAC3B,MAAM21d,EAAiBtzc,SAASriB,EAAO,IACvC,GAAI21d,GAAkB,GAAKA,GAAkB,EAAG,CAC9C,MAAM58D,EA7rrBelnR,IAAUzlB,GAAM+yK,QAAQttJ,EAAO7uI,QAAQzD,IAAI,2BA6rrB9Cq2d,CAAmB/jV,GAC/BgkV,EA7rrBehkV,IAAUzlB,GAAM+yK,QAAQttJ,EAAO7uI,QAAQzD,IAAI,sBA6rrB5Cu2d,CAAmBjkV,GACvC,OAAIgkV,EAAY3od,OAAS,EAChB2od,EAAYF,EAAiB,IAAM31d,EAEnC+4Z,EAAU48D,EAAiB,IAAM31d,CAE5C,CACE,OAAOA,CAEX,CACE,OAAOA,CACT,EAEI+1d,GAAqB5uc,IACzB,MAAMy2S,EAAQz2S,EAAKpkB,MAAM,WACzB,OAAOg8V,EAAMnhC,GAAOz2S,IACS,IAAvBA,EAAKsT,QAAQ,MAAiBmgB,GAAWzzB,EAAM,MAAQyzB,GAAWzzB,EAAM,KAGnEA,EAFA,IAAKA,OAIbrnB,KAAK,IAAI,EA6BRk2d,GAAyBnkV,IAC7B,MAAMwxS,EAAe,CAACr/a,EAAMhE,KAC1B6xI,EAAO/hH,UAAU+wI,OAAO78J,EAAMhE,GAC9B6xI,EAAO0uB,aAAa,EAEtB1uB,EAAO0vT,eAAeuyB,YAAY,CAChC,4DAA6D9wR,IAC3DqgP,EAAargP,EAAQ,EAEvB,wBAAyB,CAACA,EAASjkC,EAAK/+J,KACtCqjb,EAAargP,EAAS,CAAEhjM,SAAQ,EAElC,UAAa,CAACi2d,EAAUl3T,EAAK/+J,KAC3Bqjb,EAAa,cAAe,CAAErjb,SAAQ,EAExC,SAAY,CAACi2d,EAAUl3T,EAAK/+J,KA1CT,EAAC6xI,EAAQ7xI,KAC9B,MAAMmnB,EAAOuuc,GAAmB7jV,EAAQ7xI,GACxC6xI,EAAO/hH,UAAU+wI,OAAO,WAAY,CAAE7gK,MAAO+1d,GAAmB5uc,KAChE0qH,EAAO0uB,aAAa,EAwChB21T,CAAerkV,EAAQ7xI,EAAM,EAE/B,SAAY,CAACi2d,EAAUl3T,EAAK/+J,KAvCT,EAAC6xI,EAAQ7xI,KAC9B6xI,EAAO/hH,UAAU+wI,OAAO,WAAY,CAAE7gK,MAAO01d,GAAmB7jV,EAAQ7xI,KACxE6xI,EAAO0uB,aAAa,EAsChB41T,CAAetkV,EAAQ7xI,EAAM,EAE/B,WAAc,CAACi2d,EAAUl3T,EAAK/+J,KA1BT,EAAC6xI,EAAQ/+G,KAChC++G,EAAO/hH,UAAU+wI,OAAO,aAAc,CAAE7gK,MAAOuf,OAAOuT,KACtD++G,EAAO0uB,aAAa,EAyBhB61T,CAAiBvkV,EAAQ7xI,EAAM,EAEjC,KAAQ,CAACgjM,EAASjkC,EAAKizK,KACrB,IAAIxhU,EACJ6ya,EAAargP,EAAS,CACpBhjM,MAAOgyU,EAAK3jT,KACZ0jT,YAAwC,QAA1BvhU,EAAKwhU,EAAKF,kBAA+B,IAAPthU,EAAgBA,EAAK,MACrE,EAEJ,aAAgBwyL,IACdnxD,EAAO/hH,UAAUyjC,OAAOyvI,EAAQ,EAElC,cAAiB,KACfqgP,EAAa,aAAa,EAE5B,YAAe,CAAC4yC,EAAUl3T,EAAK/+J,KAC7Bqjb,EAAa52T,EAASzsH,GAASA,EAAQ,IAAI,EAE7C,gBAAmB,CAACi2d,EAAUl3T,EAAK/+J,KACjCqjb,EAAarjb,EAAM,GAErB,EAEEq2d,GAA6BxkV,IACjC,MAAMykV,EAAgBtyd,GAAQ6tI,EAAO/hH,UAAUjtB,MAAMmB,GACrD6tI,EAAO0vT,eAAeuyB,YAAY,CAChC,4DAA6D9wR,GAAWszR,EAActzR,GACtF,cAAiB,IAAMszR,EAAc,eACpC,SACHzkV,EAAO0vT,eAAejiR,qBAAqB,YAAY,IAzEnCztC,IAAU4jV,GAAS5jV,GAAQnX,GAAO26V,GAAcxjV,EAAO5tC,UAAWy2B,EAAIlJ,OAAMpD,MAAM,IAyEzCmoW,CAAc1kV,KAC3EA,EAAO0vT,eAAejiR,qBAAqB,YAAY,IArEnCztC,IAAU4jV,GAAS5jV,GAAQnX,GAAO06V,GAAYvjV,EAAO5tC,UAAWy2B,EAAIlJ,OAAMpD,MAAM,IAqEvCooW,CAAc3kV,KAC3EA,EAAO0vT,eAAejiR,qBAAqB,cAAc,IApEnCztC,IAAU4jV,GAAS5jV,GAAQnX,IACjD,MAAM/hF,EAAOi6E,GAAaS,QAAQwe,EAAO5tC,WACnCwyX,EAAiB99V,GAAU+B,GAAKA,GAAOkZ,GAAOlZ,EAAK,gBAAgBzN,EAAM1vF,GAAIob,IAMnF,OAAO89a,EAAeloW,YALA,KACpB,MAAMz7F,EAAa9Q,WAAWqoH,GAAM3P,EAAK,gBACnC9rG,EAAW5M,WAAWqoH,GAAM3P,EAAK,cACvC,OAAOn7G,OAAOuT,EAAalE,EAAS,GAES,IAC9Cw/F,MAAM,IA2DwDsoW,CAAgB7kV,IAAQ,EAwBnF8kV,GAAqB9kV,IACzBA,EAAO0vT,eAAeuyB,YAAY,CAChC8C,OAAQ,KAjqOG/kV,KAAU2hC,GAAO3hC,EAAQ,SAAS,EAkqO3CyiQ,CAAOziQ,EAAO,EAEhBglV,QAAS,KACPv/B,GAAQzlT,EAAO,IAGnBA,EAAO0vT,eAAeuyB,YAAY,CAAE+C,QAAS,IAAMjgC,GAAW/kT,IAAW,QAAQ,EA4C7EsF,GAAS,CAACtF,EAAQpxC,KACtB,GAAIoxC,EAAOhkH,KAAK+wJ,aACd,OAEF,MAAMptD,EAAMqgB,EAAOrgB,IACbglC,EAAM3kB,EAAOI,UAAUwjC,SACvB5sK,EAAO43F,EAASoxC,EAAOI,UAAUC,WAAaL,EAAOI,UAAUzC,SAC/D9iF,EAAY+zC,EAAS+1D,EAAIiN,eAAiBjN,EAAImN,aAC9ChrH,EAAOqsZ,GAAgBxzU,EAAK9kE,GAClC,IAAK/T,IAASA,EAAK+6F,kBACjB,OAEF,MAAM0pT,EAAW38V,EAAS00B,GAAWQ,GAC/BqwU,EAAe7yQ,GAAmBthD,GAnBhB,EAACA,EAAQhpI,EAAM8vC,EAAM+T,KAC7C,MAAM8kE,EAAMqgB,EAAOrgB,IACb7nH,EAAWd,GAAQ2oH,EAAI2gB,QAAQtpI,IAASA,EAAK8L,gBAAkBgkC,EAC/Dm+a,EAAiBntd,EAASd,GAAQA,EAAO2oH,EAAIwgB,UAAUtlF,EAAW/iD,EAAUgvC,GAClF,OAAO40E,EAASlwH,KAAKy5d,GAAgBr4d,IAAIm0H,GAAaS,QAAQ,EAgB9D0jW,CAAkBllV,EAAQhpI,EAAM8vC,EAAM+T,GAAWxf,MAAK6kG,IACpD,MAAMoiD,EAAW2xQ,GAAej0T,EAAQnlF,EAAWqlF,EAAYvgB,IAAK74E,GAAM,EAAOqtZ,GACjF5I,EAASrrT,EAAanf,GAAaS,QAAQ8gE,IAC3CtiD,EAAOI,UAAUquB,kBAAkB6zB,EAAU,GAC7CtiD,EAAO7xH,SAAS,WAAY,CAAEm0K,aAC9B+vQ,GAAeryT,EAAQ,kBAAkB,GACzC,EAKEmlV,GAAqBnlV,IACzBA,EAAO0vT,eAAeuyB,YAAY,CAChCmD,qBAAsB,KALLplV,KAAUsF,GAAOtF,GAAQ,EAAK,EAM7Czc,CAAayc,EAAO,EAEtBqlV,oBAAqB,KAPLrlV,KAAUsF,GAAOtF,GAAQ,EAAM,EAQ7CyiD,CAAYziD,EAAO,GAErB,EAkEEqsB,GAAmBrsB,IACvBuiV,GAAmBviV,GArbMA,KACzBA,EAAO0vT,eAAeuyB,YAAY,CAChC,iBAAkB9wR,IAChB,MAAMzrE,EAAMsa,EAAOwK,SACnB,IAAIouN,EACJ,IACElzO,EAAIqoD,YAAYojB,EAClB,CAAE,MAAOl5C,GACP2gN,GAAS,CACX,CAIA,GAHgB,UAAZznK,GAAwBzrE,EAAI4/V,oBAAoBn0R,KAClDynK,GAAS,GAEPA,IAAWlzO,EAAI8vV,sBAAsBrkR,GAAU,CACjD,IAAIr9C,EAAM9T,EAAOtyF,UAAU,uHACvBmhT,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,WAC7BonB,EAAMA,EAAI9kJ,QAAQ,UAAW,YAE/BgxI,EAAOonS,oBAAoBhiZ,KAAK,CAC9B7O,KAAMu9H,EACNx9I,KAAM,SAEV,IAEF,EA8ZFivd,CAAmBvlV,GA3KMA,KACzBA,EAAO0vT,eAAeuyB,YAAY,CAChCuD,gBAAiB,KACfxlV,EAAOoqB,YAAY5/J,KAAK,EAE1Bi7d,gBAAiB,KACfzlV,EAAOoqB,YAAY5/J,KAAK,EAE1Bk7d,KAAM,KACJ1lV,EAAOoqB,YAAYyvQ,MAAM,EAE3B8rD,KAAM,KACJ3lV,EAAOoqB,YAAY2vQ,MAAM,GAE3B,EA8JF6rD,CAAmB5lV,GApDMA,KACzBA,EAAO0vT,eAAeuyB,YAAY,CAChC4D,mBAAoB,CAACzB,EAAUl3T,EAAK/+J,KAClC,IAAIw8W,EAAU,EACd3qO,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUyuC,WAAW73K,IAC3C07V,GAAY17V,IAAS2zW,MAAcx8W,IACrC6xI,EAAOI,UAAU9sI,OAAO0D,IACjB,IAIRgpI,EAAO5tC,UAAU,EAEtB0zX,cAAe,CAAC1B,EAAUl3T,EAAK/+J,KAC7B6xI,EAAOI,UAAU9sI,OAAOnF,EAAM,EAEhCmod,UAAW,KACT,MAAMl+D,EAAcp4Q,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUC,WAAYkzN,IACtE,GAAI6kD,EAAa,CACf,MAAMzzP,EAAM3kB,EAAOrgB,IAAIilC,YACvBD,EAAIgM,mBAAmBynP,GACvBp4Q,EAAOI,UAAU0kB,OAAOH,EAC1B,IAEF,EA6BFohU,CAAmB/lV,GApWMA,KACzBA,EAAO0vT,eAAeuyB,YAAY,CAChC+D,WAAY,KACV,MAAMvsD,EAAKz5R,EAAOI,UAAUo3C,cAC5Bx3C,EAAOwuB,WAAWxuB,EAAOo1C,cACzBp1C,EAAOI,UAAUw3C,eAAe6hP,EAAG,EAErCqnC,YAAa,CAACsjB,EAAUl3T,EAAK/+J,KAC3By0d,GAAc5iV,EAAQA,EAAOrgB,IAAI02D,WAAW,MAAO,CAAErvJ,IAAK74B,IAAS,EAErE83d,qBAAsB,KACpBjmV,EAAO+tC,YAAY,oBAAoB,EAAO,OAAO,EAEvDm4S,WAAY,CAAC9B,EAAUl3T,EAAK/+J,KAC1By0d,GAAc5iV,EAAQA,EAAOrgB,IAAI22D,OAAOnoL,GAAO,EAEjDg4d,WAAY,CAAC/B,EAAUl3T,EAAK/+J,KAC1By0d,GAAc5iV,EAAQ7xI,EAAM,EAE9Bi4d,iBAAkB,CAAChC,EAAUl3T,EAAK/+J,KAChCy0d,GAAc5iV,EAAQ7xI,EAAM,EAE9Bk4d,cAAe,CAACjC,EAAUl3T,EAAK/+J,KAC7B6xI,EAAOwuB,WAAWrgK,EAAM,EAE1Bm4d,kBAAmB,CAAClC,EAAUl3T,EAAK/+J,KACjC6xI,EAAO+tC,YAAY,oBAAoB,EAAO5/K,EAAMa,QAAQ,mBAAoBgxI,EAAOI,UAAUg1C,WAAW,CAAExvI,OAAQ,UAAW,EAEnI2gb,eAAgB,KACdvmV,EAAOwuB,WAAWi0N,GAAsBziP,GAAQ,GAElD,EAsUFwmV,CAAmBxmV,GAjJMA,KACzB,MAAMymV,EAAuB,CAACrC,EAAUl3T,EAAK/+J,KAC3C,GAAI6xI,EAAOhkH,KAAK+wJ,aACd,OAEF,MAAM25S,EAAc9rW,EAASzsH,GAAS,CAAEo5B,KAAMp5B,GAAUA,EAClD+qK,EAASl5B,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUyuC,UAAW,KAC5Dj0I,EAAS8rb,IAAgB9rW,EAAS8rW,EAAYn/b,QAChDm/b,EAAYn/b,KAAOm/b,EAAYn/b,KAAKv4B,QAAQ,KAAM,OAC7CkqK,GAAWwtT,EAAYn/b,MAC1By4G,EAAO/hH,UAAUyjC,OAAO,QAEtBgla,EAAYn/b,MACdy4G,EAAO/hH,UAAU6L,MAAM,OAAQ48b,EAAaxtT,GAEhD,EAEFl5B,EAAO0vT,eAAeuyB,YAAY,CAChC5qS,OAAQ,KACN,GAAIr3C,EAAOI,UAAUme,aAAc,CACjC,GAAIve,EAAOI,UAAU+8C,cAAe,CAClC,MAAMt0D,EAAMmX,EAAOrgB,IAAIwgB,UAAUH,EAAOI,UAAUC,WAAY,KAI9D,YAHIxX,GACFmX,EAAOrgB,IAAIj+D,OAAOmnE,GAAK,GAG3B,CACAmX,EAAO/hH,UAAUyjC,OAAO,OAC1B,GAEFila,cAAeF,EACflwS,WAAYkwS,GACZ,EAkHFG,CAAmB5mV,GACnB8kV,GAAmB9kV,GACnBmlV,GAAmBnlV,GAvEMA,KACzBA,EAAO0vT,eAAeuyB,YAAY,CAChC4E,gBAAiB,KACfztB,GAAY5D,GAAYx1T,EAAO,EAEjC8mV,iBAAkB,CAAC1C,EAAUl3T,EAAK/+J,KAChCihJ,GAASpP,EAAQ7xI,EAAM,EAEzB44d,gBAAiB,CAAC3C,EAAUl3T,EAAKnlD,KAC/BqxV,GAAYvB,GAAW73T,EAAO,GAEhC,EA6DFgnV,CAAmBhnV,GAvLMA,KACzBmkV,GAAuBnkV,GACvBwkV,GAA2BxkV,EAAO,EAsLlCinV,CAAmBjnV,GAhCQA,KAC3BA,EAAO0vT,eAAeuyB,YAAY,CAChCiF,cAAe,CAAC9C,EAAUl3T,EAAK/+J,KAC7B,MAAM6I,EAAiB,OAAV7I,QAA4B,IAAVA,EAAmBA,EAAQ6xI,EAAOI,UAAUyuC,UAC3E,GAAI73K,IAASgpI,EAAO5tC,UAAW,CAC7B,MAAMqnU,EAAKz5R,EAAOI,UAAUo3C,cAC5Bx3C,EAAOrgB,IAAIj+D,OAAO1qD,GAAM,GACxBgpI,EAAOI,UAAUw3C,eAAe6hP,EAClC,GAEF0tD,SAAU,KACRnnV,EAAO46B,SAASwsT,OAAO,EAEzBC,SAAU,CAACjD,EAAUl3T,EAAK/+J,KACxBu9I,GAAM1L,GAAkB,IAAV7xI,EAAe,EAE/Bm5d,mBAAoB,KAClBtnV,EAAO0hM,WAAa1hM,EAAO0hM,UAC3B1hM,EAAO+qB,WAAW,GAEpB,EAaFw8T,CAAqBvnV,EAAO,EAGxBwnV,GAAwB,CAAC,cACzBC,GAAyBt2R,GAAW9zE,EAAWmqW,GAAuBr2R,EAAQ1hM,eACpF,MAAMi4d,GACJ,WAAA/9d,CAAYq2I,GACVj2I,KAAKu0L,SAAW,CACdlN,MAAO,CAAC,EACRp6J,KAAM,CAAC,EACP7oB,MAAO,CAAC,GAEVpE,KAAKi2I,OAASA,CAChB,CACA,WAAA+tC,CAAYojB,EAAS5hB,GAAK,EAAOphL,EAAO6U,GACtC,MAAMg9H,EAASj2I,KAAKi2I,OACd2nV,EAAmBx2R,EAAQ1hM,cAC3BivT,EAAqB,OAAT17S,QAA0B,IAATA,OAAkB,EAASA,EAAK8uT,WACnE,GAAI9xL,EAAOlyE,QACT,OAAO,EAEgB,aAArB65Z,IACG,uCAAuCv2d,KAAKu2d,IAAsBjpK,EA/hmB7D1+K,KACd4jC,GAAO5jC,GAAQ3kG,MAAKspH,GAAO3kB,EAAOI,UAAU0kB,OAAOH,IAAK,EAiimBlDr4G,CAAQ0zF,GAFRA,EAAO0L,SAUX,GALkB1L,EAAO7xH,SAAS,oBAAqB,CACrDgjL,UACA5hB,KACAphL,UAEY4wL,qBACZ,OAAO,EAET,MAAM96J,EAAOl6B,KAAKu0L,SAAStnK,KAAK2wc,GAChC,QAAIn4c,EAAWyU,KACbA,EAAK0jc,EAAkBp4S,EAAIphL,GAC3B6xI,EAAO7xH,SAAS,cAAe,CAC7BgjL,UACA5hB,KACAphL,WAEK,EAGX,CACA,iBAAAuiL,CAAkBygB,GAChB,IAAKs2R,GAAuBt2R,IAAYpnM,KAAKi2I,OAAOm/P,OAAOpsD,YAAchpV,KAAKi2I,OAAOlyE,QACnF,OAAO,EAET,MAAM65Z,EAAmBx2R,EAAQ1hM,cAC3Bw0B,EAAOl6B,KAAKu0L,SAASlN,MAAMu2S,GACjC,QAAIn4c,EAAWyU,IACNA,EAAK0jc,EAGhB,CACA,iBAAAn1N,CAAkBrhE,GAChB,IAAKs2R,GAAuBt2R,IAAYpnM,KAAKi2I,OAAOm/P,OAAOpsD,YAAchpV,KAAKi2I,OAAOlyE,QACnF,MAAO,GAET,MAAM65Z,EAAmBx2R,EAAQ1hM,cAC3Bw0B,EAAOl6B,KAAKu0L,SAASnwL,MAAMw5d,GACjC,OAAIn4c,EAAWyU,GACNA,EAAK0jc,GAEP,EACT,CACA,WAAA1F,CAAY2F,EAAatxd,EAAO,QAC9B,MAAMgoL,EAAWv0L,KAAKu0L,SACtBovK,GAAOk6H,GAAa,CAAC9xd,EAAUq7L,KAC7Bg8J,EAAOh8J,EAAQ1hM,cAAcyB,MAAM,MAAMigM,IACvC7S,EAAShoL,GAAM66L,GAAWr7L,CAAQ,GAClC,GAEN,CACA,UAAA25J,CAAW0hC,EAASr7L,EAAUf,GAC5B,MAAM4yd,EAAmBx2R,EAAQ1hM,cACjC1F,KAAKu0L,SAAStnK,KAAK2wc,GAAoB,CAACvD,EAAU70S,EAAIphL,IAAU2H,EAAS5K,KAAe,OAAV6J,QAA4B,IAAVA,EAAmBA,EAAQhL,KAAKi2I,OAAQuvC,EAAIphL,EAC9I,CACA,qBAAAqnd,CAAsBrkR,GACpB,MAAMw2R,EAAmBx2R,EAAQ1hM,cACjC,QAAI1F,KAAKu0L,SAAStnK,KAAK2wc,EAKzB,CACA,oBAAAr2R,CAAqBH,EAASr7L,EAAUf,GACtChL,KAAKu0L,SAASlN,MAAM+f,EAAQ1hM,eAAiB,IAAMqG,EAAS5K,KAAe,OAAV6J,QAA4B,IAAVA,EAAmBA,EAAQhL,KAAKi2I,OACrH,CACA,oBAAAytC,CAAqB0jB,EAASr7L,EAAUf,GACtChL,KAAKu0L,SAASnwL,MAAMgjM,EAAQ1hM,eAAiB,IAAMqG,EAAS5K,KAAe,OAAV6J,QAA4B,IAAVA,EAAmBA,EAAQhL,KAAKi2I,OACrH,EAGF,MAOMi2U,GAAwB,CAACj2U,EAAQ8tC,EAAKsD,KAC1C,IACEpxC,EAAOwK,SAASujC,YAAYD,GAAK,EAAOpgK,OAAO0jK,GACjD,CAAE,MAAOn5B,GACT,GAEI4vU,GAAqB,CAACh/V,EAAKuoD,KAC/BvoD,EAAIlJ,IAAIqiB,gBAAkBovC,EAAQ,OAAS,OAAO,EAe9C02S,GAAoB9nV,IACxBA,EAAOs5U,UAAW,EAClBt5U,EAAOI,UAAU4/R,iBAAiB/nC,iBAClCj4P,EAAO+3Q,oBAAoBugC,gBAhBDt4S,KAC1BtkB,EAASlwH,KAAKw0I,EAAOI,UAAUyuC,WAAWxzI,MAAKwtF,IAC7CA,EAAInjH,gBAAgB,oBAAoB,GACxC,EAcFqid,CAAoB/nV,EAAO,EAEvBgoV,GAAsB,CAAChoV,EAAQ1+H,KACnC0+H,EAAOs5U,UAAW,EACdt5U,EAAOu/P,mBACTsoF,GAAmBvmd,GAAM,GAdG,EAAC0+H,EAAQoxC,KACvC6kS,GAAsBj2U,EAAQ,eAAgBoxC,GAC9C6kS,GAAsBj2U,EAAQ,2BAA4BoxC,GAC1D6kS,GAAsBj2U,EAAQ,uBAAwBoxC,EAAM,EAa5D62S,CAAwBjoV,GAAQ,GAC5Bg/P,GAAmBh/P,IACrBA,EAAO0L,QArBkB1L,KAC3BA,EAAOI,UAAU0kB,OAAO9kB,EAAOI,UAAUwjC,SAAS,EAsBlDskT,CAAqBloV,GACrBA,EAAO0uB,aAAa,EAEhBy5T,GAAiB,CAACnoV,EAAQoxC,KAC9B,MAAM9vK,EAAOy/G,GAAaS,QAAQwe,EAAO5tC,WAhDvB,EAACy2B,EAAK+tD,EAAKxF,KACzBn7K,GAAI4yH,EAAK+tD,KAASxF,EACpBntD,GAAS4E,EAAK+tD,GACLxF,GACTnR,GAAMp3C,EAAK+tD,EACb,EA4CAw3D,CAAY9sO,EAAM,uBAAwB8vK,GACtCA,GACF02S,GAAkB9nV,GACdA,EAAOu/P,mBACTsoF,GAAmBvmd,GAAM,IAG3B0md,GAAoBhoV,EAAQ1+H,EAC9B,EAEIyrK,GAAa/sC,GAAUA,EAAOs5U,SAE9B8O,GAAgB,CAAC,QAMjBC,GAAwB,CAACroV,EAAQ5sI,KACrC,GARmBA,IAAgB,UAAXA,EAAEkD,KAQtBgyd,CAAal1d,KAAOgiY,GAAGt2M,eAAe1rL,GAAI,CAC5C,MAAMy1H,EAAM9H,GAAaS,QAAQpuH,EAAE3E,QANd,EAACuxI,EAAQnX,IAEzBgyF,GAAUhyF,EAAK,KADPA,GAAOn9F,GAAGm9F,EAAK9H,GAAaS,QAAQwe,EAAO5tC,cACvBl+B,MAAKnhE,GAAK2tH,GAAO3tH,EAAG,UAKrDw1d,CAAiBvoV,EAAQnX,GAAKxtF,MAAK9T,IAEjC,GADAn0B,EAAE9E,iBACE,KAAK8C,KAAKm2B,GAAO,CACnB,MAAMy1J,EAAWh9C,EAAOrgB,IAAIrsH,OAAO,GAAIi0B,YAAiB6jJ,GAAc7jJ,EAAM,UACxEy1J,EAAS3hL,QACX2kI,EAAOI,UAAUwyC,eAAeoK,EAAS,IAAI,EAEjD,MACEnuL,OAAOu2B,KAAKmC,EAAM,SAAU,uGAC9B,GAEJ,KAnB6Bn0B,IAAKiqH,EAAW+qW,GAAeh1d,EAAEkD,MAmBnDkyd,CAAuBp1d,IAChC4sI,EAAO7xH,SAAS/a,EAAEkD,KAAMlD,EAC1B,EA+BIq1d,GAAeluW,GAAMs2L,QAAQ,qXAAqY,KACxa,MAAM63K,GACJ,eAAOC,CAASx2d,GACd,QAASs2d,GAAat2d,EAAK1C,cAC7B,CACA,WAAA9F,CAAYq8K,GACVj8K,KAAKqB,SAAW,CAAC,EACjBrB,KAAKi8K,SAAWA,GAAY,CAAC,EAC7Bj8K,KAAKgL,MAAQhL,KAAKi8K,SAASjxK,OAAShL,KACpCA,KAAK6+d,YAAc7+d,KAAKi8K,SAAS4iT,aAAeptW,CAClD,CACA,IAAAiuP,CAAKt3W,EAAM6Q,GACT,OAAOjZ,KAAKokB,SAAShc,EAAM6Q,EAC7B,CACA,QAAAmL,CAAShc,EAAM6Q,GACb,MAAM+qP,EAAS57P,EAAK1C,cACd7E,EAAQi9W,GAAY95G,EAAiB,OAAT/qP,QAA0B,IAATA,EAAkBA,EAAO,CAAC,EAAGjZ,KAAKgL,OACjFhL,KAAKi8K,SAAS6iT,YAChB9+d,KAAKi8K,SAAS6iT,WAAWj+d,GAE3B,MAAM0zK,EAAWv0K,KAAKqB,SAAS2iQ,GAC/B,GAAIzvF,EACF,IAAK,IAAIxtJ,EAAI,EAAG4Z,EAAI4zI,EAASjjK,OAAQyV,EAAI4Z,EAAG5Z,IAAK,CAC/C,MAAMhb,EAAWwoK,EAASxtJ,GAC1B,IAAIhb,EAASg4D,QAAb,CAMA,GAHIh4D,EAASivQ,MACXh7Q,KAAK87K,IAAIkoF,EAAQj4P,EAASmuB,MAExBr5B,EAAMs9W,gCACR,OAAOt9W,EAET,IAA8C,IAA1CkL,EAASmuB,KAAK/4B,KAAKnB,KAAKgL,MAAOnK,GAEjC,OADAA,EAAM0D,iBACC1D,CATT,CAWF,CAEF,OAAOA,CACT,CACA,EAAAkgJ,CAAG34I,EAAM2D,EAAU4tH,EAAS9pB,GAI1B,IAHiB,IAAb9jG,IACFA,EAAW0lH,GAET1lH,EAAU,CACZ,MAAMgzd,EAAkB,CACtB7kc,KAAMnuB,EACNg4D,SAAS,GAEP8rC,GACF2gB,GAAMn3G,OAAO0ld,EAAiBlvX,GAEhC,MAAMniE,EAAQtlC,EAAK1C,cAAcyB,MAAM,KACvC,IAAI4f,EAAI2mB,EAAMp8B,OACd,KAAOyV,KAAK,CACV,MAAMi4c,EAActxb,EAAM3mB,GAC1B,IAAIwtJ,EAAWv0K,KAAKqB,SAAS29d,GACxBzqT,IACHA,EAAW,GACXv0K,KAAK6+d,YAAYG,GAAa,IAG9BzqT,EADE56C,EACS,CACTolW,KACGxqT,GAGM,IACNA,EACHwqT,GAGJ/+d,KAAKqB,SAAS29d,GAAezqT,CAC/B,CACF,CACA,OAAOv0K,IACT,CACA,GAAA87K,CAAI1zK,EAAM2D,GACR,GAAI3D,EAAM,CACR,MAAMslC,EAAQtlC,EAAK1C,cAAcyB,MAAM,KACvC,IAAI4f,EAAI2mB,EAAMp8B,OACd,KAAOyV,KAAK,CACV,MAAMi4c,EAActxb,EAAM3mB,GAC1B,IAAIwtJ,EAAWv0K,KAAKqB,SAAS29d,GAC7B,IAAKA,EAKH,OAJAr7H,GAAO3jW,KAAKqB,UAAU,CAAC28G,EAAQihX,KAC7Bj/d,KAAK6+d,YAAYI,GAAa,UACvBj/d,KAAKqB,SAAS49d,EAAY,IAE5Bj/d,KAET,GAAIu0K,EAAU,CACZ,GAAKxoK,EAEE,CACL,MAAMmzd,EAAmB77H,EAAY9uL,GAAUxkG,GAAWA,EAAQ71C,OAASnuB,IAC3EwoK,EAAW2qT,EAAiBnrW,KAC5B/zH,KAAKqB,SAAS29d,GAAezqT,EAC7B6uL,EAAO87H,EAAiBprW,MAAM/jD,IAC5BA,EAAQhM,SAAU,CAAI,GAE1B,MAREwwG,EAASjjK,OAAS,EASfijK,EAASjjK,SACZtR,KAAK6+d,YAAYz2d,GAAM,UAChBpI,KAAKqB,SAAS29d,GAEzB,CACF,CACF,MACEr7H,GAAO3jW,KAAKqB,UAAU,CAAC28G,EAAQ51G,KAC7BpI,KAAK6+d,YAAYz2d,GAAM,EAAM,IAE/BpI,KAAKqB,SAAW,CAAC,EAEnB,OAAOrB,IACT,CACA,IAAAg7Q,CAAK5yQ,EAAM2D,EAAU4tH,GACnB,OAAO35H,KAAK+gJ,GAAG34I,EAAM2D,EAAU4tH,EAAS,CAAEqhJ,MAAM,GAClD,CACA,GAAA9uQ,CAAI9D,GACFA,EAAOA,EAAK1C,cACZ,MAAMlF,EAAUR,KAAKqB,SAAS+G,GAC9B,SAAU5H,GAA8B,IAAnBA,EAAQ8Q,OAC/B,EAGF,MAAM6td,GAAqBj5c,IACpBA,EAAIk5c,mBACPl5c,EAAIk5c,iBAAmB,IAAIT,GAAgB,CACzC3zd,MAAOkb,EACP24c,YAAa,CAACz2d,EAAMi/K,KACds3S,GAAgBC,SAASx2d,IAAS8d,EAAIm5c,mBACxCn5c,EAAIm5c,kBAAkBj3d,EAAMi/K,EAC9B,KAICnhK,EAAIk5c,kBAEPE,GAAa,CACjB,IAAA5/G,CAAKt3W,EAAM6Q,EAAMq4M,GACf,OAAOtxN,KAAKokB,SAAShc,EAAM6Q,EAAMq4M,EACnC,EACA,QAAAltM,CAAShc,EAAM6Q,EAAMq4M,GACnB,MAAM9sN,EAAOxE,KACb,GAAIwE,EAAKu/D,SAAoB,WAAT37D,GAA8B,WAATA,EACvC,OAAO01W,GAAY11W,EAAK1C,cAAwB,OAATuT,QAA0B,IAATA,EAAkBA,EAAO,CAAC,EAAGzU,GAEvF,MAAM+6d,EAAiBJ,GAAmB36d,GAAM4f,SAAShc,EAAM6Q,GAC/D,IAAe,IAAXq4M,GAAoB9sN,EAAK2mD,OAAQ,CACnC,IAAIA,EAAS3mD,EAAK2mD,SAClB,KAAOA,IAAWo0a,EAAe36I,wBAC/Bz5R,EAAO/mC,SAAShc,EAAMm3d,GAAgB,GACtCp0a,EAASA,EAAOA,OAASA,EAAOA,cAAWtlD,CAE/C,CACA,OAAO05d,CACT,EACA,EAAAx+U,CAAG34I,EAAM2D,EAAU4tH,GACjB,OAAOwlW,GAAmBn/d,MAAM+gJ,GAAG34I,EAAM2D,EAAU4tH,EACrD,EACA,GAAAmiD,CAAI1zK,EAAM2D,GACR,OAAOozd,GAAmBn/d,MAAM87K,IAAI1zK,EAAM2D,EAC5C,EACA,IAAAivQ,CAAK5yQ,EAAM2D,GACT,OAAOozd,GAAmBn/d,MAAMg7Q,KAAK5yQ,EAAM2D,EAC7C,EACA,iBAAA0qa,CAAkBrua,GAChB,OAAO+2d,GAAmBn/d,MAAMkM,IAAI9D,EACtC,GAGI8vL,GAAQwoL,GAASvoL,IACvB,IAAIqnS,GACJ,MAAMC,GAAiB,CAACxpV,EAAQn2I,KAC9B,GAAkB,oBAAdA,EACF,OAAOm2I,EAAOwK,SAEhB,IAAKxK,EAAO2sC,QAAU,2DAA2Dv7K,KAAKvH,GACpF,OAAOm2I,EAAOwK,SAASviI,gBAEzB,MAAMwhd,EAAYvpG,GAAalgP,GAC/B,OAAIypV,GACGzpV,EAAOypV,YACVzpV,EAAOypV,UAAYxnS,GAAM3uL,OAAOm2d,GAAW,IAEtCzpV,EAAOypV,WAETzpV,EAAO5tC,SAAS,EAGnB2gU,GAAY,CAAC/yR,EAAQn2I,EAAWuJ,KADlB4sI,KAAWA,EAAOn1E,OAEhC6+Z,CAAY1pV,GACdA,EAAO7xH,SAAStkB,EAAWuJ,GAClB25K,GAAW/sC,IACpBqoV,GAAsBroV,EAAQ5sI,EAChC,EAEIu2d,GAAoB,CAAC3pV,EAAQn2I,KAIjC,GAHKm2I,EAAO4pV,YACV5pV,EAAO4pV,UAAY,CAAC,GAElB5pV,EAAO4pV,UAAU//d,IAAcm2I,EAAOlyE,QACxC,OAEF,MAAM+7Z,EAAeL,GAAexpV,EAAQn2I,GAC5C,GAAIq2X,GAAalgP,GAAS,CAcxB,GAbKupV,KACHA,GAA2B,CAAC,EAC5BvpV,EAAO08K,cAAc5xK,GAAG,gBAAgB,KACjC9K,EAAO08K,cAAc2hF,cACpBkrF,KACF77H,GAAO67H,IAA0B,CAACxhX,EAAQ51G,KACxC6tI,EAAOrgB,IAAIiiD,OAAO4nT,GAAexpV,EAAQ7tI,GAAM,IAEjDo3d,GAA2B,KAE/B,KAGAA,GAAyB1/d,GAC3B,OAEF,MAAMqL,EAAW9B,IACf,MAAM3E,EAAS2E,EAAE3E,OACXq7d,EAAU9pV,EAAO08K,cAAchvT,MACrC,IAAIojB,EAAIg5c,EAAQzud,OAChB,KAAOyV,KAAK,CACV,MAAMxP,EAAOwod,EAAQh5c,GAAGshF,WACpB9wF,IAAS7S,GAAUwzL,GAAM1T,UAAU9/K,EAAQ6S,KAC7CyxZ,GAAU+2D,EAAQh5c,GAAIjnB,EAAWuJ,EAErC,GAEFm2d,GAAyB1/d,GAAaqL,EACtC+sL,GAAM/tH,KAAK21Z,EAAchge,EAAWqL,EACtC,KAAO,CACL,MAAMA,EAAW9B,IACf2/Z,GAAU/yR,EAAQn2I,EAAWuJ,EAAE,EAEjC6uL,GAAM/tH,KAAK21Z,EAAchge,EAAWqL,GACpC8qI,EAAO4pV,UAAU//d,GAAaqL,CAChC,GAEI60d,GAAmB,IACpBV,GACH,yBAAArR,GACE,MAAMzpd,EAAOxE,KACbwwH,GAAMl/E,KAAK9sC,EAAKy7d,sBAAsB73d,IACpCw3d,GAAkBp7d,EAAM4D,EAAK,GAEjC,EACA,iBAAAi3d,CAAkBj3d,EAAMi/K,GACtB,MAAM7iL,EAAOxE,KACA,UAAToI,GAA6B,SAATA,IAGpB5D,EAAKu/D,UAGLsjH,EACE7iL,EAAKu2Q,YACP6kN,GAAkBp7d,EAAM4D,GAEnB5D,EAAKy7d,qBAGRz7d,EAAKy7d,qBAAqBh8d,KAAKmE,GAF/B5D,EAAKy7d,qBAAuB,CAAC73d,GAKxB5D,EAAKu2Q,aAAev2Q,EAAKq7d,YAClCr7d,EAAKoxH,IAAIiiD,OAAO4nT,GAAej7d,EAAM4D,GAAOA,EAAM5D,EAAKq7d,UAAUz3d,WAC1D5D,EAAKq7d,UAAUz3d,KAE1B,EACA,qBAAAmya,GACE,MAAM/1a,EAAOxE,KACPuX,EAAO/S,EAAK6jG,UACZutB,EAAMpxH,EAAKoxH,IACbpxH,EAAKq7d,YACPl8H,GAAOn/V,EAAKq7d,WAAW,CAACz7d,EAAOgE,KAC7B5D,EAAKoxH,IAAIiiD,OAAO4nT,GAAej7d,EAAM4D,GAAOA,EAAMhE,EAAM,WAEnDI,EAAKq7d,YAETr7d,EAAKo+K,QAAUrrK,GAAQq+G,IAC1Br+G,EAAKgkB,OAAS,KACdq6F,EAAIiiD,OAAOrzK,EAAKqsK,UAChBj7C,EAAIiiD,OAAOrzK,EAAKi8I,WAEd7qB,IACFA,EAAIiiD,OAAOtgK,GACXq+G,EAAIiiD,OAAOrzK,EAAK4jL,gBAEpB,GAGI83S,GAAsB97d,GACtBysH,EAASzsH,GACJ,CACLA,MAAOA,EAAM+C,MAAM,QACnB8nC,OAAO,GAEA+5I,EAAU5kL,EAAOysH,GACnB,CACLzsH,QACA6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,mEAgCT+8d,GAAkB,CAAC/8d,EAAS0hB,IAEzB1hB,GADgBkhW,GAAUx/U,EAAO1hB,SAAW,GAAK,KAAM0hB,EAAO1hB,WAGjEg9d,GAAgBt7c,GAAUA,EAAOmqB,MACjCoxb,GAAe,CAACj8d,EAAOkJ,EAAWlK,EAAU,MAChD,MAAM0hB,EAASxX,EAAUlJ,GACzB,OAAI2sH,EAAUjsG,GACLA,EAAS,CACd1gB,MAAOA,EACP6qC,OAAO,GACL,CACFA,OAAO,EACP7rC,WAGK0hB,CACT,EAaIw4L,GAAW,CAACrnE,EAAQqqV,EAAgBC,EAAoBD,KAC5D,MAAMtxZ,EAAW,CAAC,EACZtsE,EAAS,CAAC,EACV46G,EAAW,CAACl1G,EAAMhE,EAAOkJ,KAC7B,MAAMwX,EAASu7c,GAAaj8d,EAAOkJ,GACnC,OAAI8yd,GAAct7c,IAChBpiB,EAAO0F,GAAQ0c,EAAO1gB,OACf,IAEPmb,QAAQxD,KAAKokd,GAAgB,gCAAiC/3d,WAAgB0c,KACvE,EACT,EAaI07c,EAAep4d,GAAQuhM,GAAM36H,EAAU5mE,GAoC7C,MAAO,CACL4Y,SAhDe,CAAC5Y,EAAMwqL,KACtB,MAAMtlL,EA7CYslL,IAAQ/hE,EAAS+hE,EAAKtlL,WA6CtBmzd,CAAc7tS,GAxERrmL,KAC1B,MAAM6iM,EAAY,MAChB,OAAQ7iM,GACR,IAAK,QACH,OAAO02V,EACT,IAAK,UACH,OAAOlyO,EACT,IAAK,WACH,OAAOtrG,EACT,IAAK,SACH,OAAOkE,EACT,IAAK,SACH,OAAOknB,EACT,IAAK,SACH,OAAOggF,EACT,IAAK,WACH,OAAOqvW,GACT,IAAK,WACH,OAAOjwb,GAAO+4I,EAAU/4I,EAAKY,GAC/B,IAAK,SACH,OAAOZ,GAAO+yT,EAAK/yT,EAAK9nC,QAC1B,QACE,OAAOupH,EAEV,EAvBiB,GAwBlB,OAAOttH,GAASi8d,GAAaj8d,EAAOgrM,EAAW,uBAAwB7iM,KAAS,EA+CtCm0d,CAAoB9tS,EAAKtlL,WAAaslL,EAAKtlL,UAC7EqG,EA1BkB,EAACvL,EAAMuL,EAAcrG,KAC/C,IAAK0jH,EAAYr9G,GAAe,CAC9B,MAAMmR,EAASu7c,GAAa1sd,EAAcrG,GAC1C,GAAI8yd,GAAct7c,GAChB,OAAOA,EAAO1gB,MAEdmb,QAAQpc,MAAMg9d,GAAgB,yCAA0C/3d,YAAiB0c,GAE7F,CACgB,EAiBO67c,CAAoBv4d,EAAMwqL,EAAKtwK,QAAShV,GAC7D0hE,EAAS5mE,GAAQ,IACZwqL,EACHtwK,QAAS3O,EACTrG,aAEgBuwH,GAAMn7H,EAAQ0F,GAAMyqH,SAAQ,IAAMgL,GAAMyiW,EAAgBl4d,KAChEkpC,MAAKltC,GAASk5G,EAASl1G,EAAMhE,EAAOkJ,IAAW,EAwCzDkzd,eACA78d,IAtCUyE,GAAQy1H,GAAMn7H,EAAQ0F,GAAMyqH,SAAQ,IAAMgL,GAAM7uD,EAAU5mE,GAAMvF,KAAI+vL,GAAQA,EAAKtwK,YAAU0wG,iBAuCrGnvH,IAtCU,CAACuE,EAAMhE,KACjB,GAAKo8d,EAAap4d,GAGX,CACL,MAAMwqL,EAAO5jH,EAAS5mE,GACtB,OAAIwqL,EAAKguS,WACPrhd,QAAQpc,MAAM,IAAKiF,oDACZ,GAEAk1G,EAASl1G,EAAMhE,EAAOwuL,EAAKtlL,UAEtC,CATE,OADAiS,QAAQxD,KAAK,IAAK3T,iGACX,CAST,EA2BAy4d,MAzBYz4d,IACZ,MAAM04d,EAAaN,EAAap4d,GAIhC,OAHI04d,UACKp+d,EAAO0F,GAET04d,CAAU,EAqBjBxpV,MAnBYlvI,GAAQuhM,GAAMjnM,EAAQ0F,GAoBlCuY,MAnBY,KACZ,IACEpB,QAAQmC,IAAIhY,KAAKC,MAAMD,KAAKsa,UAAUu8c,GAAmB,CAACxxd,EAAM3K,IAC1D2sH,EAAU3sH,IAAUulB,EAASvlB,IAAUysH,EAASzsH,IAAU0sH,EAAO1sH,IAAU6+V,EAAU7+V,IAAUuhB,EAAcvhB,GACxGA,EAEFpD,OAAOgF,UAAUwB,SAASrG,KAAKiD,MAE1C,CAAE,MAAOjB,IACPoc,QAAQpc,MAAMA,GAChB,GAUD,EAGG49d,GAAe,CACnB,SACA,YAEIC,GAAe,CAAC/qV,EAAQgrV,EAAYC,EAAgBjvc,KACxD,MAAMkvc,EAAUD,EAAeD,EAAWt9d,OACpCupU,EAAUg0J,EAAejvc,GAC/B,IACEi7S,EAAQk0J,UACV,CAAE,MAAO/3d,GAEP,YADAkW,QAAQpc,MAAM,wCAAyC8uB,KAAU5oB,EAEnE,CACA83d,EAAQE,aACJF,EAAQG,iBAAmBp0J,EAAQo0J,gBACrClD,GAAenoV,EAAQi3L,EAAQo0J,gBAEjCL,EAAWp9d,IAAIouB,GA16pBM,EAACgkH,EAAQhkH,KAC9BgkH,EAAO7xH,SAAS,aAAc,CAAE6N,QAAO,EA06pBvCsvc,CAAetrV,EAAQhkH,EAAK,EAiCxBorL,GAAWpnE,IACf,MAAMgrV,EAAapxT,GAAK,UAClBqxT,EAAiBrxT,GAAK,CAC1B2xT,OAAQ,CACNJ,SAAU1wb,EACV2wb,WAAY3wb,EACZ4wb,gBAAgB,GAElB/R,SAAU,CACR6R,SAAU1wb,EACV2wb,WAAY3wb,EACZ4wb,gBAAgB,KAIpB,MA5hBwCrrV,KACxCA,EAAO8K,GAAG,yEAAyE13I,IAC7E25K,GAAW/sC,IACb5sI,EAAE9E,gBACJ,IAEF0xI,EAAO8K,GAAG,qBAAqB13I,IACV,SAAdA,EAAE+9L,SAAoC,SAAd/9L,EAAE+9L,UAAuBpkB,GAAW/sC,IAC/D5sI,EAAE9E,gBACJ,IAEF0xI,EAAO8K,GAAG,SAAS13I,IACjB,IAAKA,EAAE+oZ,aAAepvO,GAAW/sC,GAAS,CACxC,MAAMwrV,EAAYxrV,EAAOoqB,YAAY5/J,MACjCwwH,EAAcwwW,IAChBxrV,EAAOoqB,YAAYyvQ,MAEvB,KAEF75R,EAAO8K,GAAG,kBAAkB,KAC1B,GAAIiiC,GAAW/sC,GAAS,CACtB,MAAMwrV,EAAYxrV,EAAOoqB,YAAY5/J,MACjCwwH,EAAcwwW,IAChBxrV,EAAOoqB,YAAYyvQ,MAEvB,IACA,EAigBF4xD,CAAkCzrV,GAC3B,CACL+sC,WAAY,IAAMA,GAAW/sC,GAC7BpyI,IAAKouB,GAhDO,EAACgkH,EAAQirV,EAAgBD,EAAYhvc,KACnD,GAAIA,IAASgvc,EAAWt9d,MAAxB,CAEO,IAAKgmM,GAAMu3R,EAAgBjvc,GAChC,MAAM,IAAIxoB,MAAM,gBAAiBwoB,iBAE/BgkH,EAAO8kI,YACTimN,GAAa/qV,EAAQgrV,EAAYC,EAAgBjvc,GAEjDgkH,EAAO8K,GAAG,QAAQ,IAAMigV,GAAa/qV,EAAQgrV,EAAYC,EAAgBjvc,IAJ3E,CAKA,EAsCe0vc,CAAQ1rV,EAAQirV,EAAev9d,MAAOs9d,EAAYhvc,GAC/DtuB,IAAK,IAAMs9d,EAAWt9d,MACtBqd,SAAU,CAACiR,EAAMshH,KACf2tV,EAAer9d,IAvCA,EAACq9d,EAAgBjvc,EAAMshH,KAC1C,GAAIjgB,EAAWytW,GAAc9uc,GAC3B,MAAM,IAAIxoB,MAAM,gCAAiCwoB,KAEnD,MAAO,IACFivc,EACH,CAACjvc,GAAO,IACHshH,EACH8tV,WAAY,KACV,IACE9tV,EAAI8tV,YACN,CAAE,MAAOh4d,GACPkW,QAAQpc,MAAM,0CAA2C8uB,KAAU5oB,EACrE,IAGL,EAuBsBu4d,CAAaV,EAAev9d,MAAOsuB,EAAMshH,GAAK,EAEpE,EAGG3f,GAASpD,GAAMl/E,KAAMiyP,GAAU/yK,GAAM+yK,QACrCs+L,GAAgB,CACpBC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,IAAK,KAEDC,GAAgBlyW,GAAMs2L,QAAQ,8BAE9B67K,GAAgBz6d,IACpB,MAAMktL,EAAW,CAAC,EACZkgF,EAAQwvF,GAAIhhO,GAAGjB,WAAaiiO,GAAIhhO,GAAGnB,QACzC/O,GAAO2vK,GAAQr7R,EAAQxC,cAAe,MAAMtB,IAJ3BJ,IAAOA,KAAO0+d,GAKzBE,CAAWx+d,GACbgxL,EAAShxL,IAAS,EAEd,cAAciD,KAAKjD,GACrBgxL,EAASH,QAAUxuK,SAASriB,EAAO,KAEnCgxL,EAAS02R,SAAW1nd,EAAMoiM,WAAW,GACrCpR,EAASH,QAAU4sS,GAAcz9d,IAAUA,EAAMgB,cAAcohM,WAAW,GAE9E,IAEF,MAAMzxK,EAAK,CAACqgK,EAASH,SACrB,IAAIjxL,EACJ,IAAKA,KAAO0+d,GACNttS,EAASpxL,GACX+wB,EAAG9wB,KAAKD,GAERoxL,EAASpxL,IAAO,EAoBpB,OAjBAoxL,EAASrgK,GAAKA,EAAG7wB,KAAK,KAClBkxL,EAAS3tD,SACX2tD,EAAS3sL,KAAM,EACX6sQ,EACFlgF,EAAS5sL,MAAO,EAEhB4sL,EAAS1sL,OAAQ,GAGjB0sL,EAAS7sL,OACP+sQ,EACFlgF,EAAS7sL,MAAO,GAEhB6sL,EAAS5sL,MAAO,EAChB4sL,EAAS7sL,MAAO,IAGb6sL,CAAQ,EAEjB,MAAMytS,GACJ,WAAAjje,CAAYq2I,GACVj2I,KAAKq0U,UAAY,CAAC,EAClBr0U,KAAK8ie,gBAAkB,GACvB9ie,KAAKi2I,OAASA,EACd,MAAMzxI,EAAOxE,KACbi2I,EAAO8K,GAAG,0BAA0B13I,KAC7B7E,EAAKu+d,YAAY15d,KAAM7E,EAAKw+d,cAAc35d,IAAQA,EAAE2rL,uBACvDphE,GAAOpvH,EAAK6vU,WAAWj/I,IACjB5wL,EAAKy+d,cAAc55d,EAAG+rL,KACxB5wL,EAAKs+d,gBAAkB1tS,EAAS8tS,YAAY19d,MAAM,GACnC,YAAX6D,EAAEkD,MACJ/H,EAAK2+d,sBAAsB/tS,GAE/B,IAEE5wL,EAAKy+d,cAAc55d,EAAG7E,EAAKs+d,gBAAgB,MACT,IAAhCt+d,EAAKs+d,gBAAgBxxd,QACR,YAAXjI,EAAEkD,MACJ/H,EAAK2+d,sBAAsB3+d,EAAKs+d,gBAAgB,IAGpDt+d,EAAKs+d,gBAAgBp6d,SAEzB,GAEJ,CACA,GAAAjI,CAAIyH,EAAS6qM,EAAMqwR,EAASp4d,GAC1B,MAAMxG,EAAOxE,KACPk6B,EAAO11B,EAAK6+d,qBAAqBD,GAKvC,OAJAxvW,GAAO2vK,GAAQ/yK,GAAMxpH,KAAKkB,KAAWA,IACnC,MAAMktL,EAAW5wL,EAAK8+d,eAAep7d,EAAS6qM,EAAM74K,EAAMlvB,GAC1DxG,EAAK6vU,UAAUj/I,EAASrgK,IAAMqgK,CAAQ,KAEjC,CACT,CACA,MAAAz9H,CAAOzvD,GACL,MAAMktL,EAAWp1L,KAAKsje,eAAep7d,GACrC,QAAIlI,KAAKq0U,UAAUj/I,EAASrgK,aACnB/0B,KAAKq0U,UAAUj/I,EAASrgK,KACxB,EAGX,CACA,oBAAAsuc,CAAqBD,GACnB,MAAM5+d,EAAOxE,KACP+jL,EAAMq/S,EACZ,MAAmB,kBAARr/S,EACF,KACLv/K,EAAKyxI,OAAO+tC,YAAYD,GAAK,EAAO,KAAK,EAElCvzD,GAAMp7G,QAAQ2uK,GAChB,KACLv/K,EAAKyxI,OAAO+tC,YAAYD,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAG,EAG1CA,CAEX,CACA,cAAAu/S,CAAep7d,EAAS6qM,EAAMqwR,EAASp4d,GACrC,MAAMqpU,EAAY7jN,GAAM3tH,IAAI0gS,GAAQr7R,EAAS,KAAMy6d,IAKnD,OAJAtuJ,EAAUA,EAAU/iU,OAAS,GAAKk/G,GAAMn3G,OAAOg7T,EAAUA,EAAU/iU,OAAS,GAAI,CAC9E4oB,KAAMkpc,EACNp4d,MAAOA,GAAShL,KAAKi2I,SAEhBzlB,GAAMn3G,OAAOg7T,EAAU,GAAI,CAChCthI,KAAM/yM,KAAKi2I,OAAOtyF,UAAUovJ,GAC5BmwR,YAAa7uJ,EAAU7uU,MAAM,IAEjC,CACA,WAAAu9d,CAAY15d,GACV,OAAOA,EAAEP,QAAUO,EAAER,SAAWQ,EAAET,OACpC,CACA,aAAAo6d,CAAc35d,GACZ,MAAkB,YAAXA,EAAEkD,MAAsBlD,EAAE4rL,SAAW,KAAO5rL,EAAE4rL,SAAW,GAClE,CACA,aAAAguS,CAAc55d,EAAG+rL,GACf,QAAKA,IAGDA,EAAS5sL,OAASa,EAAER,SAAWusL,EAAS7sL,OAASc,EAAET,UAGnDwsL,EAAS3sL,MAAQY,EAAEP,QAAUssL,EAAS1sL,QAAUW,EAAEN,cAGlDM,EAAE4rL,UAAYG,EAASH,SAAW5rL,EAAEyid,UAAYzid,EAAEyid,WAAa12R,EAAS02R,YAC1Ezid,EAAE9E,kBACK,KAGX,CACA,qBAAA4+d,CAAsB/tS,GACpB,OAAOA,EAASl7J,KAAOk7J,EAASl7J,KAAK/4B,KAAKi0L,EAASpqL,OAAS,IAC9D,EAGF,MAiDMgkE,GAAW,KACf,MAAMy7F,EAlDS,MACf,MAAMkP,EAAU,CAAC,EACXsvE,EAAY,CAAC,EACb6hG,EAAS,CAAC,EACVz6N,EAAQ,CAAC,EACT0oN,EAAe,CAAC,EAChB1H,EAAkB,CAAC,EACnBh5T,EAAW,CAAC,EACZmxU,EAAW,CAAC,EACZ9uB,EAAQ,CAAC,EACTj6T,EAAM,CAACu6S,EAAYzuS,IAAS,CAACnE,EAAMwqL,KACvCooH,EAAW5yS,EAAK1C,eAAiB,IAC5BktL,EACHrmL,OACD,EAIH,MAAO,CACLq6K,UAAWnmL,EAAIk5K,EAAS,UACxB4vK,sBAAuB9oV,EAAIk5K,EAAS,sBACpC+M,gBAAiBjmL,EAAIk5K,EAAS,gBAC9Bi8J,cAAen1U,EAAIk5K,EAAS,cAC5B4L,eAAgB9kL,EAAIk5K,EAAS,eAC7B2b,YAAa70L,EAAIwoP,EAAW,YAC5B81B,kBAAmBt+Q,EAAIwoP,EAAW,kBAClC4uF,kBAAmBp3U,EAAIwoP,EAAW,kBAClCs6O,iBAAkB9ie,EAAIqqV,EAAQ,iBAC9Bt1J,eAAgB/0L,EAAIs4U,EAAc,eAClCyqJ,kBAAmB/ie,EAAI4wU,EAAiB,kBACxCj9I,eAAgB3zL,EAAI4wU,EAAiB,eACrCoyJ,WAAYhje,EAAI+oV,EAAU,WAC1Bk6I,QAASjje,EAAIi6T,EAAO,SACpB24J,QAjBc,CAACjrd,EAAMgrd,IAAY/iW,EAAMjoH,EAAK1C,eAAiB0td,EAkB7D36I,WAjBiB,CAACrwU,EAAMsrH,IAASr7G,EAASjQ,EAAK1C,eAAiBguH,EAkBhEp4G,OAAQ,KAAM,CACZq+J,UACAsvE,YACA54H,QACAy6N,SACA/R,eACA1H,kBACAmY,WACA9uB,QACAriT,aAEH,EAIcsrd,GACf,MAAO,CACLJ,iBAAkB94T,EAAO84T,iBACzB38S,UAAWnc,EAAOmc,UAClBwN,eAAgB3pB,EAAO2pB,eACvBoB,eAAgB/qB,EAAO+qB,eACvBguS,kBAAmB/4T,EAAO+4T,kBAC1BnQ,QAAS5oT,EAAO4oT,QAChBz9I,cAAenrK,EAAOmrK,cACtBtgJ,YAAa7qB,EAAO6qB,YACpBypF,kBAAmBt0G,EAAOs0G,kBAC1B0kN,WAAYh5T,EAAOg5T,WACnBl+S,eAAgB9a,EAAO8a,eACvBmB,gBAAiBjc,EAAOic,gBACxB6iK,sBAAuB9+K,EAAO8+K,sBAC9B1R,kBAAmBptK,EAAOotK,kBAC1B6rJ,QAASj5T,EAAOi5T,QAChBjrJ,WAAYhuK,EAAOguK,WACnBn9T,OAAQmvJ,EAAOnvJ,OAChB,EAGG8kL,GAAQsgL,GAASvoL,IACjB9+K,GAASm3G,GAAMn3G,OAAQw7G,GAASrE,GAAMl/E,KAC5C,MAAMsyb,GACJ,WAAAhke,CAAYm1B,EAAI3tB,EAASurT,GACvB3yT,KAAKmrB,QAAU,CAAC,EAChBnrB,KAAKm/T,WAAa,GAClBn/T,KAAKgtd,cAAgB,GACrBhtd,KAAK6je,UAAY,CAAC,EAClB7je,KAAK8je,YAAa,EAClB9je,KAAK0uY,WAAY,EACjB1uY,KAAKwyB,WAAY,EACjBxyB,KAAKg3X,gBAAiB,EACtBh3X,KAAKklS,cAAgB,KACrBllS,KAAK+6Q,aAAc,EACnB/6Q,KAAKuvd,UAAW,EAChBvvd,KAAK+jE,SAAU,EACf/jE,KAAKovd,aAAe,GACpBpvd,KAAKige,qBAAuB,GAC5Bjge,KAAKu/T,aAAc,EACnBv/T,KAAKwvd,eAAgB,EACrBxvd,KAAK2yT,cAAgBA,EACrB3yT,KAAK4xd,gBAAkBj/J,EAAcoxK,gBACrC1qd,GAAOrZ,KAAMgge,IACb,MAAMx7d,EAAOxE,KACbA,KAAK+0B,GAAKA,EACV/0B,KAAK8gE,QAAS,EACd,MAAMu4W,EA38Ce,EAAC09C,EAAwB3vd,KAChD,MAAM48d,EAAgBn+c,GAAMze,GAC5B,OAAOswd,GAAepzV,IAAWD,GAAUC,GAAS0/V,EAAejN,EAAwBiN,EAAc,EAy8C7EC,CAAiBtxK,EAAc1rS,eAAgB7f,GACzEpH,KAAKoH,QAAUk2M,GAAS94M,EAAM60a,EAAmBjya,GA3xvBlC6uI,KACjB,MAAMutC,EAAiBvtC,EAAO7uI,QAAQ4Z,SACtCwiK,EAAe,KAAM,CACnBl2K,UAAW,SACXgV,QAAS2zH,EAAOlhH,KAElByuJ,EAAe,WAAY,CAAEl2K,UAAW,WACxCk2K,EAAe,SAAU,CAAEl2K,UAAW,WACtCk2K,EAAe,SAAU,CAAEl2K,UAAW,WACtCk2K,EAAe,eAAgB,CAAEl2K,UAAW,WAC5Ck2K,EAAe,WAAY,CAAEl2K,UAAW,WACxCk2K,EAAe,kBAAmB,CAChCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,SAAU,CACvBl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,SACXgV,QAAS,CAAC,IAEZkhK,EAAe,UAAW,CACxBl2K,UAAW,SACXgV,QAAS,oBAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,SACXgV,QAAS2zH,EAAO27U,kBAElBpuS,EAAe,UAAW,CACxBl2K,UAAWumX,GAAoB59O,EAAQ,WACvC3zH,QAAS,YAEXkhK,EAAe,aAAc,CAC3Bl2K,UAAWumX,GAAoB59O,GAC/B3zH,QAAS,KAEXkhK,EAAe,0BAA2B,CACxCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,YAAa,CAC1Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAWlJ,IACT,MAAM6qC,EAAQ4hF,EAASzsH,IAAUm5H,GAAWn5H,GAC5C,OAAI6qC,EACK,CACL7qC,QACA6qC,SAGK,CACLA,OAAO,EACP7rC,QAAS,8BAEb,EAEFkf,QAAS,MAEXkhK,EAAe,0BAA2B,CACxCl2K,UAAW,SACXgV,QAAS,CAAC,IAEZkhK,EAAe,mBAAoB,CACjCl2K,UAAWlJ,IACT,MAAM6qC,EAAQqkF,EAAW,CACvB,QACA,YACA,SACA,WACClvH,GACH,OAAO6qC,EAAQ,CACb7qC,QACA6qC,SACE,CACFA,OAAO,EACP7rC,QAAS,uDACV,EAEHkf,QAAS,YAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS,mCAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,cAAe,CAC5Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,+BAAgC,CAC7Cl2K,UAAWlJ,GACL2sH,EAAU3sH,IAKHysH,EAASzsH,GAJX,CACL6qC,OAAO,EACP7qC,SAQK,CACL6qC,OAAO,EACP7rC,QAAS,+BAIfkf,QAAS,eAEXkhK,EAAe,yBAA0B,CACvCl2K,UAAW,SACXgV,QAAS,yDAEXkhK,EAAe,0BAA2B,CACxCl2K,UAAW,SACXgV,QAAS,sDAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,wBAAyB,CACtCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,2BAA4B,CACzCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,QAAS,CACtBl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,YAAa,CAC1Bl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,0BAA2B,CACxCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,4BAA6B,CAC1Cl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,wBAAyB,CAAEl2K,UAAW,aACrDk2K,EAAe,WAAY,CACzBl2K,UAAW,SACXgV,QAAS,OAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,kBAAmB,CAChCl2K,UAAW,SACXgV,QAAS,UAEXkhK,EAAe,SAAU,CACvBl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,SACXgV,QAAS,8MAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,SACXgV,QAAS,8MAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,cAAe,CAC5Bl2K,UAAW,SACXgV,QAAS,SAEXkhK,EAAe,cAAe,CAC5Bl2K,UAAWlJ,IACT,MAAM6qC,GAAkB,IAAV7qC,GAAmBysH,EAASzsH,IAAU4kL,EAAU5kL,EAAOysH,GACrE,OAAI5hF,EACE4hF,EAASzsH,GACJ,CACLA,MAAO++V,EAAM/+V,EAAM+C,MAAM,KAAMg9V,IAC/Bl1T,SAEOg0T,EAAU7+V,GACZ,CACLA,QACA6qC,UAEiB,IAAV7qC,EACF,CACLA,MAAO,GACP6qC,SAGK,CACL7qC,QACA6qC,SAIG,CACLA,OAAO,EACP7rC,QAAS,kDAEb,EAEFkf,QAASy0W,GAAW9gP,GAAU,GAAK,CAAC,aAEtCutC,EAAe,gBAAiB,CAAEl2K,UAAW,WAC7Ck2K,EAAe,mBAAoB,CACjCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,WAAY,CACzBl2K,UAAWlJ,IACT,MAAM6qC,EAAQ4hF,EAASzsH,IAAU4kL,EAAU5kL,EAAOysH,GAClD,OAAI5hF,EAEK,CACL7qC,MAFe6+V,EAAU7+V,GAASA,EAAQ++V,EAAM/+V,EAAM+C,MAAM,KAAMg9V,IAGlEl1T,SAGK,CACLA,OAAO,EACP7rC,QAAS,2CAEb,EAEFkf,QAAS,KAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,6BAA8B,CAC3Cl2K,UAAW,SACXgV,QAAS,qCAEXkhK,EAAe,kBAAmB,CAChCl2K,UAAWlJ,IACT,MAAM6qC,EAAQ8hF,EAAU3sH,IAAUysH,EAASzsH,GAC3C,OAAI6qC,GACY,IAAV7qC,GAAmBqvX,GAAkBvvP,YAAcuvP,GAAkBxvP,SAChE,CACL7/H,MAAO,GACP6qC,SAGK,CACL7qC,OAAiB,IAAVA,EAAiB,0CAA4CA,EACpE6qC,SAIG,CACLA,OAAO,EACP7rC,QAAS,8BAEb,EAEFkf,SAAU8hH,KAEZo/C,EAAe,0BAA2B,CACxCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,aAAc,CAAEl2K,UAAW,WAC1Ck2K,EAAe,kBAAmB,CAAEl2K,UAAW,WAC/Ck2K,EAAe,QAAS,CACtBl2K,UAAWlJ,IAAmB,IAAVA,GAAmBysH,EAASzsH,IAAUqhB,EAAWrhB,GACrEke,QAAS,WAEXkhK,EAAe,YAAa,CAAEl2K,UAAW,WACzCk2K,EAAe,UAAW,CAAEl2K,UAAW,WACvCk2K,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,8BAA+B,CAC5Cl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,iBAAkB,CAC/Bl2K,UAAWlJ,IACT,MAAM6qC,GAAkB,IAAV7qC,GAAmBysH,EAASzsH,GAC1C,OAAI6qC,EACK,CACL7qC,OAAiB,IAAVA,EAAkB,GAAKA,EAC9B6qC,SAGK,CACLA,OAAO,EACP7rC,QAAS,4BAEb,EAEFkf,QAAS,gJAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,WAAY,CAAEl2K,UAAW,WACxCk2K,EAAe,0BAA2B,CACxCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,0BAA2B,CACxCl2K,UAAW,SACXgV,QAAS,IAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,WAAY,CACzBl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,UAAW,CACxBl2K,UAAW,WACXgV,QAAS,KAEXkhK,EAAe,mBAAoB,CAAEl2K,UAAW,WAChDk2K,EAAe,iBAAkB,CAAEl2K,UAAW,aAC9Ck2K,EAAe,QAAS,CACtBl2K,UAAW,SACXgV,QAAS2zH,EAAO4wC,UAAU,OAAS,SAAW,QAEhDrD,EAAe,YAAa,CAAEl2K,UAAW,WACzCk2K,EAAe,yBAA0B,CACvCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,SAAU,CACvBl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,SACXgV,QAAS,mBAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS,oBAEXkhK,EAAe,mBAAoB,CACjCl2K,UAAW,SACXgV,QAAS,0CAEXkhK,EAAe,QAAS,CAAEl2K,UAAW,aACrCk2K,EAAe,yBAA0B,CAAEl2K,UAAW,aACtDk2K,EAAe,gBAAiB,CAC9Bl2K,UAAW,WACXgV,QAAS2zH,EAAOy6C,aAElBlN,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS2zH,IAEXutC,EAAe,wBAAyB,CAAEl2K,UAAW,aACrDk2K,EAAe,6BAA8B,CAC3Cl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,uBAAwB,CACrCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,sBAAuB,CAAEl2K,UAAW,YACnDk2K,EAAe,6BAA8B,CAC3Cl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,2BAA4B,CACzCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,oCAAqC,CAClDl2K,UAAWlJ,IACT,MAAM6qC,EAAQ+5I,EAAU5kL,EAAOysH,GAC/B,OAAO5hF,EAAQ,CACb7qC,QACA6qC,SACE,CACFA,OAAO,EACP7rC,QAAS,+BACV,EAEHkf,QAAS,KAEXkhK,EAAe,yBAA0B,CACvCl2K,UAAW,UACXgV,SAAS,EACTu6V,YAAY,IAEdr5L,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,iBAAkB,CAC/Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,EACTu6V,YAAY,IAEdr5L,EAAe,iBAAkB,CAC/Bl2K,UAAW,SACXgV,QAAS,SAEXkhK,EAAe,WAAY,CAAEl2K,UAAW,WACxCk2K,EAAe,SAAU,CACvBl2K,UAAW,SACXgV,QAAS,UAEXkhK,EAAe,eAAgB,CAC7Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,kBAAmB,CAAEl2K,UAAWsmX,KAC/CpwM,EAAe,0BAA2B,CAAEl2K,UAAW,WACvDk2K,EAAe,mBAAoB,CAAEl2K,UAAW,WAChDk2K,EAAe,iBAAkB,CAAEl2K,UAAWsmX,KAC9CpwM,EAAe,iBAAkB,CAAEl2K,UAAW,WAC9Ck2K,EAAe,gBAAiB,CAAEl2K,UAAWsmX,KAC7CpwM,EAAe,iBAAkB,CAAEl2K,UAAW,WAC9Ck2K,EAAe,eAAgB,CAAEl2K,UAAWsmX,KAC5CpwM,EAAe,cAAe,CAC5Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,aAAc,CAAEl2K,UAAWlJ,GAASysH,EAASzsH,KAAoB,IAAVA,IACtEo/K,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,UAAW,CAAEl2K,UAAW,UACvCk2K,EAAe,oBAAqB,CAClCl2K,UAAW,SACXgV,QAAS,+CAEXkhK,EAAe,uBAAwB,CACrCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,wBAAyB,CACtCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,UAAW,CAAEl2K,UAAW,WACvCk2K,EAAe,cAAe,CAAEl2K,UAAW,WAC3Ck2K,EAAe,mBAAoB,CACjCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,mBAAoB,CAAEl2K,UAAW,aAChDk2K,EAAe,oBAAqB,CAAEl2K,UAAW,aACjDk2K,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS,SAEXkhK,EAAe,gCAAiC,CAC9Cl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,cAAe,CAC5Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,mBAAoB,CACjCl2K,UAAW,SACXgV,QAAS,IAEXkhK,EAAe,gBAAiB,CAC9Bl2K,UAAWlJ,GACL4kL,EAAU5kL,EAAOysC,KAAuB,IAAVzsC,EAEzB,CACLA,MAAOovX,IAFkB,IAAVpvX,EAAkB,GAAKA,GAGtC6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,yCAIfkf,QAAS,CACP,CACEjgB,MAAO,IACP2d,IAAK,IACL67B,OAAQ,UAEV,CACEx5C,MAAO,KACP2d,IAAK,KACL67B,OAAQ,QAEV,CACEx5C,MAAO,IACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,KACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,MACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,OACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,QACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,SACPw5C,OAAQ,KACR46B,QAAS,SAEX,CACEp0E,MAAO,KACP0hL,IAAK,oBACLttG,QAAS,SAEX,CACEp0E,MAAO,IACP0hL,IAAK,sBACLttG,QAAS,SAEX,CACEp0E,MAAO,IACP0hL,IAAK,sBACLttG,QAAS,SAEX,CACEp0E,MAAO,IACP0hL,IAAK,gBACLttG,QAAS,SAEX,CACEp0E,MAAO,MACP0hL,IAAK,uBACLttG,QAAS,YAIf+sG,EAAe,uBAAwB,CACrCl2K,UAAWlJ,IACT,OAAIqhB,EAAWrhB,GACN,CACLA,OA5qBoB8/d,EA4qBS9/d,EA3qB9BuuB,IACL,MAAMwxc,EAAcD,EAASvxc,GAC7B,OAAO6gW,GAAgB2wG,EAAY,GA0qB7Bl1b,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,6BAlrBW8ge,KAorBxB,EAEF5hd,QAASk+B,GAAQ,KAEnBgjI,EAAe,oBAAqB,CAClCl2K,UAAW,SACXgV,QAAS,mBAEXkhK,EAAe,iBAAkB,CAC/Bl2K,UAAW,SACXgV,QAAS,gBAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAWlJ,GACL4kL,EAAU5kL,EAAOuvX,IACZ,CACLvvX,QACA6qC,OAAO,GAEA0kV,GAASvvX,GACX,CACLA,MAAO,CAACA,GACR6qC,OAAO,GAGF,CACLA,OAAO,EACP7rC,QAAS,2CAIfkf,QAAS,KAEXkhK,EAAe,uBAAwB,CACrCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,qBAAsB,CACnCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,mBAAoB,CACjCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,wBAAyB,CACtCl2K,UAAWlJ,IACT,MAAM6qC,EAAQqkF,EAAW,CACvB,YACA,YACA,YACClvH,GACH,OAAO6qC,EAAQ,CACb7qC,QACA6qC,SACE,CACFA,OAAO,EACP7rC,QAAS,qDACV,EAEHkf,QAAS,cAEXkhK,EAAe,2BAA4B,CACzCl2K,UAAWlJ,IACT,MAAM6qC,EAAQqkF,EAAW,CACvB,YACA,YACA,YACClvH,GACH,OAAO6qC,EAAQ,CACb7qC,QACA6qC,SACE,CACFA,OAAO,EACP7rC,QAAS,qDACV,EAEHkf,QAAS,cAEXkhK,EAAe,oBAAqB,CAClCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,sBAAuB,CACpCl2K,UAAW,SACXgV,QAAS,KAEXkhK,EAAe,kBAAmB,CAChCl2K,UAAW,UACXgV,SAAS,IAEXkhK,EAAe,6BAA8B,CAC3Cl2K,UAAW,WACXgV,QAAS,CACP,cACA,WACA,YACA,mBACA,kBACA,wBACA,mBACA,YACA,SACA,gBAGJkhK,EAAe,wBAAyB,CACtCl2K,UAAW,UACXgV,SAAS,IAEX2zH,EAAO8K,GAAG,iBAAiB,KACzByiC,EAAe,iBAAkB,CAC/Bl2K,UAAW,SACXgV,QAASojW,GAAKr7O,QAAU,WAAQxkI,IAElC29K,EAAe,cAAe,CAC5Bl2K,UAAW,SACXgV,QAASoxW,GAAMj7O,UAAUxC,EAAOj4G,aAAc,gBAC9C,GACF,EA8huBAs4S,CAAW9xU,GACX,MAAMgvI,EAAYxzI,KAAKoH,QAAQzD,IAC3B6vI,EAAU,yBACZ2lS,GAAY/xa,EAASiya,GAEvB,MAAMrvZ,EAASwpH,EAAU,UACrBxpH,IACF2oS,EAAc3oS,OAASA,GAEzBhqB,KAAKgqB,OAAS2oS,EAAc3oS,OAC5B,MAAMo9V,EAAU5zO,EAAU,YACtB4zO,GACFz0D,EAAcyxK,YAAYh9G,GAE5BpnX,KAAK2ha,QAAUhvG,EAAc0xK,QAC7B,MAAMp1H,EAAiBqmB,GAAkB9wX,GACrCyqW,IACFqV,GAAaA,aAAa9U,mBAAmBP,GAC7CyR,GAASvoL,IAAIomI,iBAAiBixC,mBAAmBP,IAEnD,MAAMD,EAAiBwoB,GAAkBhzX,GACrCysH,EAAc+9O,IAChB0R,GAASvoL,IAAIomI,iBAAiBkxC,mBAAmBT,GAEnDwX,GAAaS,aAAezzO,EAAU,iBACtCgzO,GAAahyH,QAAUm+D,EAAcn+D,QACrCx0P,KAAK4va,UAAS,GACd5va,KAAKs0P,gBAAkB,IAAIktK,GAAIttC,GAAmB1vX,GAAO,CAAE26V,SAAUn/V,KAAK2ha,UAC1E3ha,KAAKqke,QAAUrke,KAAK2ha,QACpB3ha,KAAK4iL,OAASm0M,GAAWvyX,GACzBxE,KAAK23U,UAAYigD,GAAoBpzX,GACrCxE,KAAKq0U,UAAY,IAAIwuJ,GAAU7ie,MAC/BA,KAAK2lc,eAAiB,IAAIg4B,GAAe39d,MACzCsiK,GAAiBtiK,MACjB,MAAMilW,EAAczxN,EAAU,gBAC1ByxN,IACFH,GAAIG,YAAcA,EAAYhgW,QAAQ,WAAY,KAEpDjF,KAAKwlL,GAAK,CACRx2G,SAAUA,KACVuvP,sBAAkB14T,EAClB25C,KAAM9O,EACNiP,KAAMjP,EACNw0I,WAAYx0I,EACZsnN,UAAWtmI,GAEb1xH,KAAKiyB,KAAOorL,GAAS74M,GACrBmuT,EAAcvuS,SAAS,cAAe,CAAE6xH,OAAQj2I,OAChD,MAAMske,EAAgBtsG,GAAiBxzX,GACnCihB,EAAW6+c,IACbA,EAAcnje,KAAKqD,EAAMA,EAE7B,CACA,MAAAmoF,GACEA,GAAO3sF,KACT,CACA,KAAA2hJ,CAAMgzK,GACJ30T,KAAKgkL,YAAY,YAAY,EAAO2wI,EACtC,CACA,QAAAjsI,GACE,OAAOA,GAAS1oL,KAClB,CACA,SAAA2jD,CAAUn3B,GACR,OAAOk5V,GAAK/hU,UAAUn3B,EACxB,CACA,QAAA+3c,CAASn8d,EAAM24W,EAAYx0W,GACzB,MAAMnF,EAAUpH,KAAKoH,QAcrB,OAbKA,EAAQo5d,aAAap4d,KACpB6oH,EAAc1kH,GAChBnF,EAAQ4Z,SAAS5Y,EAAM,CACrBkF,UAAWf,EACX+V,QAASy+V,IAGX35W,EAAQ4Z,SAAS5Y,EAAM,CACrBkF,UAAWokH,EACXpvG,QAASy+V,KAIP35W,EAAQkwI,MAAMlvI,IAAU4oH,EAAY+vP,GAA2B35W,EAAQzD,IAAIyE,GAAzB24W,CAC5D,CACA,SAAAl6L,CAAUz+K,EAAM6sB,GAEd,QADkBq+F,EAAWmkQ,GAAWz3X,MAAOoI,MAEtC6sB,QAAqCpvB,IAA5B2hX,GAAc7jX,IAAIyE,GAItC,CACA,WAAAu8J,CAAY1rJ,GACVjZ,KAAK4vd,sBAAsBjrT,YAAY1rJ,EACzC,CACA,UAAAysJ,CAAWt9J,EAAM2D,EAAUf,GACzBhL,KAAK2lc,eAAejgS,WAAWt9J,EAAM2D,EAAUf,EACjD,CACA,oBAAAu8L,CAAqBn/L,EAAM2D,EAAUf,GACnChL,KAAK2lc,eAAep+P,qBAAqBn/L,EAAM2D,EAAUf,EAC3D,CACA,oBAAA04K,CAAqBt7K,EAAM2D,EAAUf,GACnChL,KAAK2lc,eAAejiR,qBAAqBt7K,EAAM2D,EAAUf,EAC3D,CACA,WAAA2qL,CAAYztL,EAAS6qM,EAAMqwR,EAASp4d,GAClChL,KAAKq0U,UAAU5zU,IAAIyH,EAAS6qM,EAAMqwR,EAASp4d,EAC7C,CACA,WAAAg5K,CAAYD,EAAKyB,EAAIphL,EAAO6U,GAC1B,OAAOjZ,KAAK2lc,eAAe3hR,YAAYD,EAAKyB,EAAIphL,EAAO6U,EACzD,CACA,iBAAA0tK,CAAkB5C,GAChB,OAAO/jL,KAAK2lc,eAAeh/Q,kBAAkB5C,EAC/C,CACA,iBAAA0kF,CAAkB1kF,GAChB,OAAO/jL,KAAK2lc,eAAel9L,kBAAkB1kF,EAC/C,CACA,qBAAA0nS,CAAsB1nS,GACpB,OAAO/jL,KAAK2lc,eAAe8lB,sBAAsB1nS,EACnD,CACA,IAAAvkI,GACE,MAAMh7C,EAAOxE,KACTwE,EAAKs8D,SACPt8D,EAAKs8D,QAAS,EACVt8D,EAAKo+K,OACPp+K,EAAK6jG,UAAU4vC,gBAAkB,QAEjCmoD,GAAM5gJ,KAAKh7C,EAAK4jL,gBAChBgY,GAAMzgJ,KAAKn7C,EAAKuwB,KAElBvwB,EAAKyc,OACLzc,EAAK4f,SAAS,QAElB,CACA,IAAAu7B,GACE,MAAMn7C,EAAOxE,KACRwE,EAAKs8D,SACRt8D,EAAK29C,OACD39C,EAAKo+K,QACPp+K,EAAK6jG,UAAU4vC,gBAAkB,QAC7BzzI,IAASA,EAAKmuT,cAAcyhF,gBAC9B5vY,EAAKmuT,cAAcyhF,cAAgB,QAGrCh0M,GAAMzgJ,KAAKn7C,EAAK4jL,gBAChBgY,GAAM1sG,SAASlvF,EAAKuwB,GAAI,UAAWvwB,EAAKi2a,aAE1Cj2a,EAAKs8D,QAAS,EACdt8D,EAAK4f,SAAS,QAElB,CACA,QAAA4kU,GACE,OAAOhpV,KAAK8gE,MACd,CACA,gBAAA+vZ,CAAiBxpS,EAAOn7J,GACtBlsB,KAAKokB,SAAS,gBAAiB,CAC7BijK,QACAn7J,QAEJ,CACA,IAAAjL,CAAKhI,EAAO,CAAC,GACX,MAAMzU,EAAOxE,KACP8+H,EAAMt6H,EAAKw5B,aACjB,GAAIx5B,EAAKu/D,QACP,MAAO,GAET,GAAI+6D,EAAK,CACP,MAAM0lW,EAAW,IACZvrd,EACHgI,MAAM,GAEF7c,EAAQ6kW,GAAkBnqO,GAAOA,EAAI16H,MAAQ06H,EAAIpsG,UACjDwkG,EAAO1yH,EAAKigK,WAAWrgK,EAAOoge,GAOpC,OANKA,EAASnhU,WACZ7+J,EAAK4f,SAAS,cAAe,IACxBogd,EACH//d,QAASq6H,IAGN5H,CACT,CACE,MAAO,EAEX,CACA,IAAA/0E,CAAKlpC,EAAO,CAAC,GACX,MAAMzU,EAAOxE,KACb,IAAI8+H,EAAMt6H,EAAKw5B,aACf,IAAK8gG,IAAQt6H,EAAKu2Q,aAAev2Q,EAAKu/D,QACpC,MAAO,GAET,MAAMimM,EAAU,IACX/wP,EACHkpC,MAAM,EACN19C,QAASq6H,GAEX,IAAI5H,EAAO1yH,EAAK6mL,WAAW2+E,GAC3B,MAAMy6N,EAAW,IACZz6N,EACHziQ,QAAS2vH,GASX,GAPKutW,EAASphU,WACZ7+J,EAAK4f,SAAS,cAAeqgd,GAEP,QAApBA,EAAS5ob,QACXr3C,EAAK4f,SAAS,iBAAkBqgd,GAElCvtW,EAAOutW,EAASl9d,QACX0hW,GAAkBnqO,GAgBrBA,EAAI16H,MAAQ8yH,MAhBe,EACvBj+G,EAAKqha,aAAgB91a,EAAKo+K,SAC5B9jD,EAAIpsG,UAAYwkG,GAElB,MAAMhuH,EAAOk3L,GAAMhqD,UAAU5xI,EAAKuwB,GAAI,QAClC7rB,GACF2rH,GAAO3rH,EAAKqC,UAAUuzH,GAChBA,EAAI12H,OAAS5D,EAAKuwB,KACpB+pG,EAAI16H,MAAQ8yH,GACL,IAMf,CAOA,OAJAutW,EAAShge,QAAUulQ,EAAQvlQ,QAAUq6H,EAAM,MAChB,IAAvB2lW,EAAS3O,WACXtxd,EAAKora,UAAS,GAET14S,CACT,CACA,UAAAutC,CAAWl9J,EAAS0R,GAClB,OAAOwrJ,GAAWzkK,KAAMuH,EAAS0R,EACnC,CACA,UAAAoyK,CAAWpyK,GACT,OAAOoyK,GAAWrrL,KAAMiZ,EAC1B,CACA,aAAA8nJ,CAAcx5J,EAAS0R,GACjBA,IACF1R,EAAU8R,GAAO,CAAE9R,WAAW0R,IAEhCjZ,KAAKgkL,YAAY,oBAAoB,EAAOz8K,EAC9C,CACA,YAAAoud,CAAa+O,QACY7+d,IAAnB6+d,EACFjgU,GAAWzkK,KAAMA,KAAKovd,aAAc,CAAEvza,OAAQ,QAE9C4oH,GAAWzkK,KAAM0ke,GAEnB1ke,KAAKqgK,YAAY3hG,QACjB1+D,KAAK4va,UAAS,GACd5va,KAAK2kK,aACP,CACA,OAAA0jR,GACE,OAAQrob,KAAK8je,UACf,CACA,QAAAl0D,CAASvoP,GACP,MAAMs9S,GAAY3ke,KAAK8je,WACvB9je,KAAK8je,YAAcz8S,EACfA,GAASA,IAAUs9S,GACrB3ke,KAAKokB,SAAS,QAElB,CACA,YAAAgkK,GACE,MAAM5jL,EAAOxE,KAIb,OAHKwE,EAAKssD,YACRtsD,EAAKssD,UAAYtsD,EAAKmnT,iBAAmBvrH,GAAMz8L,IAAIa,EAAKuwB,GAAK,YAExDvwB,EAAKssD,SACd,CACA,uBAAAu3H,GACE,OAAOroL,KAAKwhW,oBACd,CACA,UAAAxjU,GAIE,OAHKh+B,KAAKojL,YACRpjL,KAAKojL,UAAYgd,GAAMz8L,IAAI3D,KAAK+0B,KAE3B/0B,KAAKojL,SACd,CACA,MAAAvS,GACE,MAAMrsK,EAAOxE,KACb,IAAKwE,EAAKihS,cAAe,CACvB,MAAM3mK,EAAMt6H,EAAK0gS,cACbpmK,IACFt6H,EAAKihS,cAAgB3mK,EAAI2mK,cAE7B,CACA,OAAOjhS,EAAKihS,aACd,CACA,MAAAhlJ,GACE,MAAMj8I,EAAOxE,KACb,IAAKwE,EAAKi6L,gBAAiB,CACzB,MAAM1zD,EAAMvmI,EAAKqsK,SACb9lC,IACFvmI,EAAKi6L,gBAAkB1zD,EAAIhmI,SAE/B,CACA,OAAOP,EAAKi6L,eACd,CACA,OAAAp2F,GACE,IAAIzzF,EAAI+/I,EACR,MAAMh5B,EAAM37H,KAAKygJ,SACjB,OAA8H,QAAtHkU,EAAiC,QAA3B//I,EAAK5U,KAAK2iT,mBAAgC,IAAP/tS,EAAgBA,EAAa,OAAR+mH,QAAwB,IAARA,OAAiB,EAASA,EAAIpkH,YAAyB,IAAPo9I,EAAgBA,EAAK,IAC7J,CACA,UAAA+7B,CAAWz1J,EAAK7yB,EAAM02H,GACpB,MAAMt6H,EAAOxE,KAAMwzI,EAAYhvI,EAAK4C,QAAQzD,IACtCihe,EAAuB1sG,GAAwB1zX,GACrD,GAAIihB,EAAWm/c,GACb,OAAOA,EAAqBzje,KAAKqD,EAAMy2B,EAAK6jG,GAAK,EAAM12H,GAEzD,IAAKorI,EAAU,iBAA2B,SAAR1U,GAAkBjuF,EAASiuF,IAAyB,SAAjBA,EAAIjJ,UAAgD,IAAzB56F,EAAI4D,QAAQ,UAAiC,IAAf5D,EAAI3pB,OAChI,OAAO2pB,EAET,MAAM4pc,EAAY,IAAIrjE,GAAIvmY,GAC1B,MAA2B,SAAvB4pc,EAAUxlI,UAA8C,UAAvBwlI,EAAUxlI,UAA+C,KAAvBwlI,EAAUxlI,SACxEpkU,EAELu4G,EAAU,iBACLhvI,EAAK8vP,gBAAgB6tK,WAAWlnY,GAEzCA,EAAMz2B,EAAK8vP,gBAAgB30B,WAAW1kM,EAAKu4G,EAAU,sBAEvD,CACA,SAAAwtB,CAAUliC,GACRkiC,GAAUhhK,KAAM8+H,EAClB,CACA,eAAAgmW,CAAgBz9S,GAn3DM,EAACpxC,EAAQoxC,KAC3BpxC,EAAOu5U,gBAAkBnoS,IAC3BpxC,EAAOu5U,cAAgBnoS,EACvBpxC,EAAO5tC,UAAU4vC,gBAAkBt0H,OAAOsyH,EAAOu/P,mBACjDv/P,EAAO0uB,cAjnnByB,EAAC1uB,EAAQoxC,KAAUpxC,EAAO7xH,SAAS,0BAA2B,CAAEijK,SAAQ,EAknnBxG09S,CAA4B9uV,EAAQoxC,GACtC,EA82DEy9S,CAAgB9ke,KAAMqnL,EACxB,CACA,eAAAmuN,GACE,OAAuBx1Y,KA/2Dcwvd,aAg3DvC,CACA,MAAA73Z,GACEyiX,GAASp6a,KACX,CACA,OAAAuyB,CAAQqoZ,GACNroZ,GAAQvyB,KAAM46a,EAChB,CACA,YAAAwH,GACE,OAAOpib,KAAKq6a,aAAa+H,cAC3B,CACA,cAAA4iD,GACE,OAAOhle,KAAKq6a,aAAagI,eAC3B,EAGF,MAAMlqP,GAAMuoL,GAASvoL,IACf7mJ,GAAOk/E,GAAMl/E,KACnB,IACI2zb,GADAC,IAAoB,EAEpBnF,GAAU,GACd,MAAMoF,GAAsB97d,IAC1B,MAAMkD,EAAOlD,EAAEkD,KACf+kC,GAAK8zb,GAAczhe,OAAOsyI,IACxB,OAAQ1pI,GACR,IAAK,SACH0pI,EAAO7xH,SAAS,eAAgB/a,GAChC,MACF,IAAK,SACH4sI,EAAO7xH,SAAS,eAAgB/a,GAElC,GACA,EAEEg8d,GAAqBh+S,IACzB,GAAIA,IAAU69S,GAAmB,CAC/B,MAAM/sS,EAAMuoL,GAASvoL,IACjB9Q,GACF8Q,EAAIhuH,KAAKrlE,OAAQ,SAAUqge,IAC3BhtS,EAAIhuH,KAAKrlE,OAAQ,SAAUqge,MAE3BhtS,EAAItgB,OAAO/yK,OAAQ,SAAUqge,IAC7BhtS,EAAItgB,OAAO/yK,OAAQ,SAAUqge,KAE/BD,GAAoB79S,CACtB,GAEIi+S,GAAuBC,IAC3B,MAAMC,EAAazF,GAUnB,OATAA,GAAUz8H,EAASy8H,IAAS9pV,GACnBsvV,IAAiBtvV,IAEtBmvV,GAAc9wF,eAAiBixF,IACjCH,GAAc9wF,aAAeyrF,GAAQzud,OAAS,EAAIyud,GAAQ,GAAK,MAE7DqF,GAAchxF,gBAAkBmxF,IAClCH,GAAchxF,cAAgB,MAEzBoxF,EAAWl0d,SAAWyud,GAAQzud,MAAM,EAUvCm0d,GAAuC,eAAxB1ge,SAAS2ge,WACxBN,GAAgB,IACjB9F,GACH+E,QAAS,KACT7vO,QAAS,KACTvtO,eAAgB,CAAC,EACjB88c,gBAAiB,KACjB/5c,OAAQ,KACR27c,aAAc,IACdC,aAAc,MACdC,YAAa,MACbx4N,KAAMq4G,GACN4uB,aAAc,KACdF,cAAe,KACf,KAAAp4N,GACE,MAAMx3K,EAAOxE,KACb,IAAIw0P,EAAU,GACVxqO,EAAS,GACT+5c,EAAkBviE,GAAIttC,mBAAmBnvX,SAASuoH,UAClD,yBAAyBjmH,KAAK08d,KAChCA,EAAkBA,EAAgB9+d,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9E,UAAUoC,KAAK08d,KAClBA,GAAmB,MAGvB,MAAM3T,EAAUtrd,OAAOqrH,SAAWrrH,OAAOghe,eACzC,GAAI1V,EACF57N,EAAU47N,EAAQjxZ,MAAQixZ,EAAQ57N,QAClCxqO,EAASomc,EAAQpmc,WACZ,CACL,MAAMi7V,EAAUlgX,SAAS6tB,qBAAqB,UAC9C,IAAK,IAAI7L,EAAI,EAAGA,EAAIk+V,EAAQ3zW,OAAQyV,IAAK,CACvC,MAAMkW,EAAMgoV,EAAQl+V,GAAGkW,KAAO,GAC9B,GAAY,KAARA,EACF,SAEF,MAAM8oc,EAAY9oc,EAAIlL,UAAUkL,EAAI+uE,YAAY,MAChD,GAAI,8CAA8C3kG,KAAK41B,GAAM,EACxB,IAA/B8oc,EAAUlnc,QAAQ,UACpB7U,EAAS,QAEXwqO,EAAUv3N,EAAIlL,UAAU,EAAGkL,EAAI+uE,YAAY,MAC3C,KACF,CACF,CACA,IAAKwoJ,GAAWzvP,SAAS23P,cAAe,CACtC,MAAMz/N,EAAMl4B,SAAS23P,cAAcz/N,KACN,IAAzBA,EAAI4B,QAAQ,UACd7U,EAAS,QAEXwqO,EAAUv3N,EAAIlL,UAAU,EAAGkL,EAAI+uE,YAAY,KAC7C,CACF,CAzvoBY2mN,MA0voBZnuT,EAAKgwP,QAAU,IAAIgtK,GAAIuiE,GAAiBpkQ,WAAW60B,GACnDhwP,EAAKu/d,gBAAkBA,EACvBv/d,EAAK6/d,QAAU,IAAI7iE,GAAIh9Z,EAAKgwP,SAC5BhwP,EAAKwlB,OAASA,GA7voBF2oS,EA8voBJnuT,GA7voBIu8I,GAAG,YAAa1vB,EAAM6iR,GAAkBvhF,IACtDA,EAAc5xK,GAAG,eAAgB1vB,EAAMkjR,GAA0B5hF,GA6voBjE,EACA,gBAAAqzK,CAAiB/+c,GACf,MAAMmgW,EAAUngW,EAAeg/c,SAC3B7+G,GACFpnX,KAAKoke,YAAYh9G,GAEnB,MAAMp9V,EAAS/C,EAAe+C,OAC1BA,IACFhqB,KAAKgqB,OAASA,GAEhBhqB,KAAKinB,eAAiBA,EACtB,MAAMi/c,EAAiBj/c,EAAek/c,sBACftge,IAAnBqge,GACFviI,GAAOuiI,GAAgB,CAACE,EAAeC,KACrC7/G,GAAagB,cAAcpY,KAAKi3H,GAAcD,CAAa,GAGjE,EACA,IAAAj3Z,CAAK/nE,GACH,MAAM5C,EAAOxE,KACb,IAAI8kB,EACJ,MAAMwhd,EAAuB91W,GAAMs2L,QAAQ,6MAAmN,KAgC9P,IAAIy/K,EAAiBxG,IACnBj7c,EAASi7c,CAAO,EAElB,MAAMyG,EAAc,KAClB,IAAIC,EAAY,EAChB,MAAM1G,EAAU,GAChB,IAAIvjd,EAYJ27K,GAAItgB,OAAO/yK,OAAQ,QAAS0he,GAxCTp+d,KACnB,MAAM2D,EAAW3E,EAAQgB,GACzB,GAAK2D,EAGEA,EAASg0B,MAAMv7B,EAAM,GAAG,EAoC/Bkie,CAAa,cACblqd,EAAUinV,GAnCQr8V,IACd09V,GAAIvhO,QAAQ3B,QAAUkjO,GAAIvhO,QAAQ7B,UACpC+7S,GAAU,wKACH,IACEgoD,IACThoD,GAAU,8GACH,IACE5sT,EAASzpH,EAAQ2G,UACnBoqL,GAAI5uL,OAAOnC,EAAQ2G,UACjBkjH,EAAc7pH,EAAQ1C,QACxB,CAAC0C,EAAQ1C,QAET,GAuBUiie,CAAYv/d,IAC/BopH,GAAMl/E,KAAK90B,GAASsiH,IA5IGmX,SA6IAzxI,EAAKb,IAAIm7H,EAAI/pG,MA5I1BkhH,EAAO8kI,eAAiB9kI,EAAOmyC,gBAAkBnyC,EAAO5tC,WAAW1qE,aAC/E2nc,GAAqBrvV,GACrBA,EAAOskS,wBACPtkS,EAAO1jH,SAAQ,GACf0jH,EAAOlyE,SAAU,EAwIyB,IAExCvnD,EAAUg0G,GAAM+6D,KAAK/uK,GAASsiH,IACpBt6H,EAAKb,IAAIm7H,EAAI/pG,MAEA,IAAnBvY,EAAQlL,OACVi1d,EAAe,IAEfj1b,GAAK90B,GAASsiH,IA7DY,EAAC13H,EAAS03H,IAAQ13H,EAAQw7K,QAAU9jD,EAAIx4H,QAAQZ,gBAAiB4ge,EA8DrFM,CAAsBx/d,EAAS03H,GACjC2+S,GAAU,sEAAuE3+S,GAzBlE,EAAC/pG,EAAI3tB,EAASg8K,KACjC,MAAMntC,EAAS,IAAI2tV,GAAO7uc,EAAI3tB,EAAS5C,GACvCu7d,EAAQ97d,KAAKgyI,GACbA,EAAO8K,GAAG,QAAQ,OACV0lV,IAAcjqd,EAAQlL,QAC1Bi1d,EAAexG,EACjB,IAEF9pV,EAAOmtC,UAAYntC,EAAOmtC,WAAaA,EACvCntC,EAAOtpD,QAAQ,EAkBXk6Y,CAhES/nW,KACf,IAAI/pG,EAAK+pG,EAAI/pG,GAKb,OAJKA,IACHA,EAAK8oG,GAAMiB,EAAK,QAAQh3H,QAAOM,IAAS+vL,GAAIx0L,IAAIyE,KAAOuqH,WAAWwlE,GAAImrL,UACtExkP,EAAIpjH,aAAa,KAAMqZ,IAElBA,CAAE,EA0DU+xc,CAAShoW,GAAM13H,EAAS03H,EACvC,GAEJ,EAGF,OADAq5D,GAAIhuH,KAAKrlE,OAAQ,QAAS0he,GACnB,IAAI3ld,SAAQC,IACbgE,EACFhE,EAAQgE,GAERyhd,EAAiBxG,IACfj/c,EAAQi/c,EAAQ,CAEpB,GAEJ,EACA,GAAAp8d,CAAIoxB,GACF,OAAyB,IAArBva,UAAUlJ,OACLyud,GAAQv6d,MAAM,GACZqrH,EAAS97F,GACXu3K,GAAOyzR,IAAS9pV,GACdA,EAAOlhH,KAAOA,IACpBy9F,MAAM,MACA7oG,EAASoL,IACXgrc,GAAQhrc,GAAMgrc,GAAQhrc,GAEtB,IAEX,EACA,GAAAt0B,CAAIw1I,GACF,MAAMzxI,EAAOxE,KACP+me,EAAiBvie,EAAKb,IAAIsyI,EAAOlhH,IACvC,OAAIgyc,IAAmB9wV,IAGA,OAAnB8wV,GACFhH,GAAQ97d,KAAKgyI,GAEfovV,IAAmB,GACnB7ge,EAAK8vY,aAAer+P,EACpBzxI,EAAK4f,SAAS,YAAa,CAAE6xH,WACxBgvV,KACHA,GAAuB57d,IACrB,MAAMxI,EAAQ2D,EAAK4f,SAAS,gBAC5B,GAAIvjB,EAAMo8W,YAGR,OAFA5zW,EAAE9E,iBACF8E,EAAE4zW,YAAcp8W,EAAMo8W,YACfp8W,EAAMo8W,WACf,EAEFn4W,OAAO1E,iBAAiB,eAAgB6ke,MAjBjChvV,CAoBX,EACA,YAAA4wV,CAAa9xc,EAAI3tB,GACf,OAAOpH,KAAKS,IAAI,IAAImje,GAAO7uc,EAAI3tB,EAASpH,MAC1C,EACA,MAAA23D,CAAO5pD,GACL,MAAMvJ,EAAOxE,KACb,IAAIi2I,EACJ,GAAKloI,EAAL,CAMA,IAAI8iH,EAAS9iH,GAUb,OADAkoI,EAASloI,EACL+iH,EAAOtsH,EAAKb,IAAIsyI,EAAOlhH,KAClB,MAELuwc,GAAqBrvV,IACvBzxI,EAAK4f,SAAS,eAAgB,CAAE6xH,WAEX,IAAnB8pV,GAAQzud,QACVxM,OAAOxE,oBAAoB,eAAgB2ke,IAE7ChvV,EAAOt+E,SACP0ta,GAAmBtF,GAAQzud,OAAS,GAC7B2kI,GApBL3kG,GAAK6mJ,GAAI5uL,OAAOwE,IAAW+wH,IACzBmX,EAASzxI,EAAKb,IAAIm7H,EAAI/pG,IAClBkhH,GACFzxI,EAAKmzD,OAAOs+E,EACd,GANJ,MAJE,IAAK,IAAIlvH,EAAIg5c,GAAQzud,OAAS,EAAGyV,GAAK,EAAGA,IACvCviB,EAAKmzD,OAAOooa,GAAQh5c,GA0B1B,EACA,WAAAi9J,CAAYD,EAAKyB,EAAIphL,GACnB,IAAIwQ,EACJ,MAAMpQ,EAAOxE,KACPgne,EAAWn2b,EAASzsC,GAA6B,QAAnBwQ,EAAKxQ,EAAM2wB,UAAuB,IAAPngB,EAAgBA,EAAKxQ,EAAMtC,MAAQsC,EAClG,OAAQ2/K,GACR,IAAK,eACD,IAAKv/K,EAAKb,IAAIqje,GAAW,CACvB,MAAMC,EAAgB7ie,EAAMgD,QAC5B,IAAIw8d,GAAOoD,EAAUC,EAAezie,GAAMmoF,QAC5C,CACA,OAAO,EAEX,IAAK,kBAAmB,CACpB,MAAMspD,EAASzxI,EAAKb,IAAIqje,GAIxB,OAHI/wV,GACFA,EAAOt+E,UAEF,CACT,CACF,IAAK,kBAAmB,CACpB,MAAMs+E,EAASzxI,EAAKb,IAAIqje,GACxB,OAAK/wV,GAIDA,EAAO+yM,WACT/yM,EAAOz2F,OAEPy2F,EAAOt2F,QAEF,IARLn7C,EAAKw/K,YAAY,gBAAgB,EAAO5/K,IACjC,EAQX,EAEF,QAAII,EAAK8vY,cACA9vY,EAAK8vY,aAAatwN,YAAYD,EAAKyB,EAAIphL,EAGlD,EACAwxd,YAAa,KACXtkb,GAAKyub,IAAS9pV,IACZA,EAAO9zF,MAAM,GACb,EAEJ+kb,QAAS,CAACz0c,EAAM2kB,KACdsuU,GAAKjlX,IAAIgyB,EAAM2kB,EAAM,EAEvBuM,UAAWn3B,GACFk5V,GAAK/hU,UAAUn3B,GAExB,SAAAy4J,CAAUhvC,GACR,MAAMq+P,EAAet0Y,KAAKs0Y,aACtBt0Y,KAAKs0Y,eAAiBr+P,IACpBq+P,GACFA,EAAalwX,SAAS,aAAc,CAAEmZ,cAAe04G,IAEvDA,EAAO7xH,SAAS,WAAY,CAAEmZ,cAAe+2W,KAE/Ct0Y,KAAKs0Y,aAAer+P,CACtB,EACA,WAAAmuV,CAAYh9G,GACVpnX,KAAKw0P,QAAU,IAAIgtK,GAAIxha,KAAK+je,iBAAiBpkQ,WAAWynJ,EAAQniX,QAAQ,OAAQ,KAChFjF,KAAKqke,QAAU,IAAI7iE,GAAIxha,KAAKw0P,QAC9B,GAEF4wO,GAAcppT,QAEd,MAmBMmrT,GAnBQ,MACZ,MAAMC,EAAYj4R,KAWlB,MAAO,CACLztC,kBAXwBtqH,IAAS,CACjCA,QACAgwQ,MAAOrjT,GAAKqzC,GACZuqH,QAASp1J,GAAQsxH,GAAMzmF,EAAO7qC,GAAMymH,mBASpC9tG,MAPYpR,IACZszd,EAAUvje,IAAIiQ,EAAK,EAOnBmR,KALW,IAAMmid,EAAUzje,MAAMqvH,iBAMjC7/G,MALYi0d,EAAUj0d,MAMvB,EAEmB6oK,GAEhBh0J,GAAMzW,KAAKyW,IAAKxW,GAAMD,KAAKC,IAAK0Y,GAAQ3Y,KAAK2Y,MAC7Cm9c,GAAmB,CAACljb,EAAM6uY,EAAY5lU,KAC1C,IAAIphG,EAAIgna,EAAWhna,EACfJ,EAAIona,EAAWpna,EACnB,MAAMwW,EAAI+hB,EAAK/hB,EACTxB,EAAIujB,EAAKvjB,EACT0mc,EAAUt0C,EAAW5wZ,EACrBmlc,EAAUv0C,EAAWpyZ,EACrB4mc,GAAYp6W,GAAO,IAAIjmH,MAAM,IAyBnC,MAxBoB,MAAhBqge,EAAS,KACX57c,GAAK27c,GAEa,MAAhBC,EAAS,KACXx7c,GAAKs7c,GAEa,MAAhBE,EAAS,KACX57c,GAAK1B,GAAMq9c,EAAU,IAEH,MAAhBC,EAAS,KACXx7c,GAAK9B,GAAMo9c,EAAU,IAEH,MAAhBE,EAAS,KACX57c,GAAKgV,GAEa,MAAhB4mc,EAAS,KACXx7c,GAAKoW,GAEa,MAAhBolc,EAAS,KACX57c,GAAK1B,GAAM0W,EAAI,IAEG,MAAhB4mc,EAAS,KACXx7c,GAAK9B,GAAMkY,EAAI,IAEVk1M,GAAStrN,EAAGJ,EAAGwW,EAAGxB,EAAE,EA+CvB02M,GAAW,CAACtrN,EAAGJ,EAAGwW,EAAGxB,KAClB,CACL5U,IACAJ,IACAwW,IACAxB,MAME6mc,GAAO,CACXC,QAhDc,CAACvjb,EAAM/hB,EAAGxB,IACjB02M,GAASnzL,EAAKn4B,EAAIoW,EAAG+hB,EAAKv4B,EAAIgV,EAAGujB,EAAK/hB,EAAQ,EAAJA,EAAO+hB,EAAKvjB,EAAQ,EAAJA,GAgDjEymc,oBACAM,yBA3D+B,CAACxjb,EAAM6uY,EAAY40C,EAAep9S,KACjE,IAAK,IAAIzjK,EAAI,EAAGA,EAAIyjK,EAAKl5K,OAAQyV,IAAK,CACpC,MAAMuoC,EAAM+3a,GAAiBljb,EAAM6uY,EAAYxoQ,EAAKzjK,IACpD,GAAIuoC,EAAItjC,GAAK47c,EAAc57c,GAAKsjC,EAAItjC,EAAIsjC,EAAIltB,GAAKwlc,EAAcxlc,EAAIwlc,EAAc57c,GAAKsjC,EAAI1jC,GAAKg8c,EAAch8c,GAAK0jC,EAAI1jC,EAAI0jC,EAAI1uB,GAAKgnc,EAAchnc,EAAIgnc,EAAch8c,EACjK,OAAO4+J,EAAKzjK,EAEhB,CACA,OAAO,IAAI,EAqDX62B,UAhDgB,CAACuG,EAAM0jb,KACvB,MAAMpmZ,EAAKjwE,GAAI2yC,EAAKn4B,EAAG67c,EAAS77c,GAC1B01D,EAAKlwE,GAAI2yC,EAAKv4B,EAAGi8c,EAASj8c,GAC1B+1D,EAAK35D,GAAIm8B,EAAKn4B,EAAIm4B,EAAK/hB,EAAGylc,EAAS77c,EAAI67c,EAASzlc,GAChDw/C,EAAK55D,GAAIm8B,EAAKv4B,EAAIu4B,EAAKvjB,EAAGinc,EAASj8c,EAAIi8c,EAASjnc,GACtD,OAAI+gD,EAAKF,EAAK,GAAKG,EAAKF,EAAK,EACpB,KAEF41J,GAAS71J,EAAIC,EAAIC,EAAKF,EAAIG,EAAKF,EAAG,EAyCzCklI,MAvCY,CAACziK,EAAM2jb,EAAWC,KAC9B,IAAItmZ,EAAKt9B,EAAKn4B,EACV01D,EAAKv9B,EAAKv4B,EACV+1D,EAAKx9B,EAAKn4B,EAAIm4B,EAAK/hB,EACnBw/C,EAAKz9B,EAAKv4B,EAAIu4B,EAAKvjB,EACvB,MAAMonc,EAAMF,EAAU97c,EAAI87c,EAAU1lc,EAC9B6lc,EAAMH,EAAUl8c,EAAIk8c,EAAUlnc,EAC9Bsnc,EAAc12d,GAAI,EAAGs2d,EAAU97c,EAAIy1D,GACnC0mZ,EAAc32d,GAAI,EAAGs2d,EAAUl8c,EAAI81D,GACnC0mZ,EAAa52d,GAAI,EAAGmwE,EAAKqmZ,GACzBK,EAAa72d,GAAI,EAAGowE,EAAKqmZ,GAW/B,OAVAxmZ,GAAMymZ,EACNxmZ,GAAMymZ,EACFJ,IACFpmZ,GAAMumZ,EACNtmZ,GAAMumZ,EACN1mZ,GAAM2mZ,EACN1mZ,GAAM2mZ,GAER1mZ,GAAMymZ,EACNxmZ,GAAMymZ,EACC/wP,GAAS71J,EAAIC,EAAIC,EAAKF,EAAIG,EAAKF,EAAG,EAmBzCjnE,OAAQ68N,GACRgxP,eAVqB55G,GACdp3I,GAASo3I,EAAW/sX,KAAM+sX,EAAWp4V,IAAKo4V,EAAW59V,MAAO49V,EAAWn4V,SAiF1EsoS,GA3CW,MACf,MAAM0pK,EAAQ,CAAC,EACTC,EAAY,CAAC,EACbC,EAAY,CAAC,EAgCnB,MAAO,CACLxnd,KAhCW,CAAC8T,EAAIkG,KAChB,MAAMytc,EAAa,kBAAmBztc,oBAChC0tc,EAAY,kBAAmB1tc,2CAA+ClG,8BACpF,QAAkBlvB,IAAd0ie,EAAMxzc,GACR,OAAOwzc,EAAMxzc,GACR,CACL,MAAM6zc,EAAO,IAAI/nd,SAAQ,CAACC,EAAS8vK,KACjC,MAAMi4S,EArCE,EAACC,EAAWC,EAAU/8Y,EAAU,OAC9C,IAAIszO,GAAO,EACPhjJ,EAAQ,KACZ,MAAMllH,EAAWsnP,GAAa,IAAIzlS,KAC3BqmT,IACHA,GAAO,EACO,OAAVhjJ,IACFrwF,aAAaqwF,GACbA,EAAQ,MAEVoiI,EAAU3+Q,MAAM,KAAM9mB,GACxB,EAEI6H,EAAUs2C,EAAS0xa,GACnBl4S,EAASx5H,EAAS2xa,GAMxB,MAAO,CACL1me,MANY,IAAI4W,KACXqmT,GAAkB,OAAVhjJ,IACXA,EAAQ97I,YAAW,IAAMowJ,EAAO7wJ,MAAM,KAAM9mB,IAAO+yE,GACrD,EAIAlrE,UACA8vK,SACD,EAaoBo4S,CAAQlod,EAAS8vK,GAChC43S,EAAUzzc,GAAM8zc,EAAO/nd,QACvBwjW,GAAaA,aAAaK,WAAW1pV,GAAK++B,MAAK,IAAM6ua,EAAOxme,MAAMsme,KAAY,IAAME,EAAOj4S,OAAO83S,IAAY,IAGhH,OADAH,EAAMxzc,GAAM6zc,EACLA,CACT,GAoBAnoe,IAlBU,CAACs0B,EAAIjhB,UACOjO,IAAlB2ie,EAAUzzc,KACZyzc,EAAUzzc,GAAIjhB,UACP00d,EAAUzzc,IAEnBwzc,EAAMxzc,GAAMlU,QAAQC,QAAQhN,GAC5B20d,EAAU1zc,GAAMjhB,CAAI,EAapB5H,IAXU6oB,GACHA,KAAM0zc,EAWb9ke,IALUoxB,GAAM0zc,EAAU1zc,GAM1BzT,OAVayT,WACNwzc,EAAMxzc,UACN0zc,EAAU1zc,EAAG,EASrB,EAEcmlJ,GAmCjB,IAAI+uT,GACJ,IACE,MAAM5he,EAAO,mBACb4he,GAAenke,OAAOmke,aACtBA,GAAavtN,QAAQr0Q,EAAMA,GAC3B4he,GAAaC,WAAW7he,EAC1B,CAAE,MAAOgC,IACP4/d,GAxCmB,MACnB,IAAIn1d,EAAO,CAAC,EACR/P,EAAO,GACX,MAAM6lD,EAAU,CACdugN,QAASnmQ,GACM8P,EAAK9P,IACG,KAEvB03Q,QAAS,CAAC13Q,EAAKI,KACbL,EAAKE,KAAKD,GACV8P,EAAK9P,GAAO2f,OAAOvf,EAAM,EAE3BJ,IAAKlC,GACIiC,EAAKjC,GAEdone,WAAYlle,IACVD,EAAOA,EAAK+D,QAAO0Y,GAAKA,IAAMxc,WACvB8P,EAAK9P,EAAI,EAElBmP,MAAO,KACLpP,EAAO,GACP+P,EAAO,CAAC,CAAC,EAEXxC,OAAQ,GAOV,OALAtQ,OAAOk+D,eAAetV,EAAS,SAAU,CACvCjmD,IAAK,IAAMI,EAAKuN,OAChBu5C,cAAc,EACdlM,YAAY,IAEPiL,CACR,EA/BoB,EAyCrB,CAGA,MAAMu/a,GAAY,CAChBC,KAAM,CAAE3B,SACRl3W,KAAM,CACJ0iR,SACAziR,SACA66Q,MACAm2B,OACAm9D,mBACAW,cACA55G,QACA2jH,aAZeJ,GAafK,cArsXkBrzV,IACpB,MAAMmoS,EAAeW,KACf2C,EAAWT,GAAehrS,EAAQmoS,GACxC,MAAO,CAAE6B,OAAQ,CAACY,EAAW0oD,GAAmB,IAAS7nD,EAASzB,OAAOY,EAAW0oD,EAAmBzoD,GAAiB7qS,QAAUpwI,GAAY,GAosX9I+vH,IAAK,CACHmpP,cACAyqH,WAAYpiI,GACZoiB,cACA9I,YACA4D,gBACA8rB,cACAq5F,WAAY5xD,GACZzpE,oBACA89B,oBACAxB,mBACAg/F,UAAWj1D,GACXh0Y,MAAOs+U,GAAWt+U,OAEpBy2F,KAAM,CACJ8jP,UACAtJ,YACAlkW,KAAM8oY,GACNhhC,UACAgxD,aACA7tB,UACAgxF,WAAYpwF,IAEdv0C,OACA0hB,gBACAwjB,aACAo9C,aACAY,eACA21C,kBACAhhD,iBACAX,uBACAgkD,oBACA6C,aACAe,UACA7wF,gBACAqyF,iBACAjtS,IAAKuoL,GAASvoL,IACdmsL,aAAcA,GAAaA,aAC3BkD,iBACAC,gBACAC,gBACAt3P,eACAyuM,YACAsoK,iBACAnge,KAAMwpH,GAAMxpH,KACZoO,QAASo7G,GAAMp7G,QACfmnH,GAAI/L,GAAM+L,GACVrJ,QAAS1C,GAAM0C,QACf4zL,QAASt2L,GAAMs2L,QACfx1Q,KAAMk/E,GAAMl/E,KACZzuC,IAAK2tH,GAAM3tH,IACX0oL,KAAM/6D,GAAM+6D,KACZb,QAASl6D,GAAMk6D,QACfrxK,OAAQm3G,GAAMn3G,OACdssV,KAAMn1O,GAAMm1O,KACZ7kV,QAAS0vG,GAAM1vG,QACfyiR,QAAS/yK,GAAM+yK,QACfqiE,gBAAiBp1O,GAAMo1O,iBAEnB+jI,GAAYn5W,GAAMn3G,OAAO+rd,GAAe+D,IAUjBh5W,KAC3BrrH,OAAOqrH,QAAUA,EACjBrrH,OAAO8ke,QAAUz5W,CAAO,EAE1B05W,CAAqBF,IAZSx5W,KAE1B,IACEl4G,EAAO+1G,QAAUmC,CACnB,CAAE,MAAOjrH,GACT,CACF,EAOF4ke,CAAsBH,GAEzB,CAv++BD,qBCEgE1xd,EAAO+1G,QAG9D,WAAe,aAgBvB,SAAS+7W,EAAUzsb,EAAQvxC,GACzBuxC,EAAOn2C,MAAM,OAAO5E,SAAQ1B,IAC1BkL,EAASlL,EAAM,GAEnB,CACA,MAAMmpe,EACJ,WAAApqe,GACEI,KAAKiqe,aAAU,EACfjqe,KAAKiqe,QAAU,CAAC,CAClB,CACA,EAAAlpV,CAAGzjG,EAAQ4sb,GACTH,EAAUzsb,GAAQz8C,IAChB,MAAMspe,EAAcnqe,KAAKiqe,QAAQppe,IAAU,GAC3Cspe,EAAYlme,KAAKime,GACjBlqe,KAAKiqe,QAAQppe,GAASspe,CAAW,GAErC,CACA,GAAAruT,CAAIx+H,EAAQ4sb,GACV,IAAI7pd,EAAI7F,UAAUlJ,OACR,IAAN+O,EAIJ0pd,EAAUzsb,GAAQz8C,IAChB,GAAU,IAANwf,EAEF,mBADOrgB,KAAKiqe,QAAQppe,GAGtB,MAAMspe,EAAcnqe,KAAKiqe,QAAQppe,QACbgF,IAAhBske,IACJA,EAAY9xc,OAAO8xc,EAAYtrc,QAAQqrc,GAAM,GAC7Clqe,KAAKiqe,QAAQppe,GAASspe,EAAW,IAXjCnqe,KAAKiqe,QAAU,CAAC,CAapB,CACA,OAAAxzZ,CAAQn5B,KAAWrkC,GACjB,IAAIzU,EAAOxE,KACX+pe,EAAUzsb,GAAQz8C,IAChB,MAAMspe,EAAc3le,EAAKyle,QAAQppe,QACbgF,IAAhBske,GACJA,EAAY5ne,SAAQ2ne,IAClBA,EAAInqc,MAAMv7B,EAAMyU,EAAK,GACrB,GAEN,EAmBF,SAASmxd,EAAYC,GAEnB,OADAA,EAAUl/c,QAAU,CAAC,EACd,cAAck/c,EACnB,WAAAzqe,IAAeqZ,GACbiuD,SAASjuD,GACTjZ,KAAKmrB,QAAU,CACbuiB,MAAO,GACPuuI,SAAU,CAAC,EACXquT,UAAW,CAAC,EACZr1c,OAAQ,CAAC,EAEb,CAMA,aAAOs1c,CAAOnie,EAAMygB,GAClBwhd,EAAUl/c,QAAQ/iB,GAAQ,CACxB,KAAQA,EACR,GAAMygB,EAEV,CAiBA,iBAAA2hd,CAAkBr/c,GAChB,IAAInnB,EAAKoE,EACT,MAAM5D,EAAOxE,KACPwkX,EAAQ,GACd,GAAIhjX,MAAM4T,QAAQ+V,GAChBA,EAAQ5oB,SAAQkkF,IACQ,kBAAXA,EACT+9R,EAAMvgX,KAAKwiF,IAEXjiF,EAAK2mB,QAAQ8wJ,SAASx1F,EAAOr+E,MAAQq+E,EAAOr/E,QAC5Co9W,EAAMvgX,KAAKwiF,EAAOr+E,MACpB,SAEG,GAAI+iB,EACT,IAAKnnB,KAAOmnB,EACNA,EAAQllB,eAAejC,KACzBQ,EAAK2mB,QAAQ8wJ,SAASj4K,GAAOmnB,EAAQnnB,GACrCwgX,EAAMvgX,KAAKD,IAIjB,KAAOoE,EAAOo8W,EAAM97W,SAClBlE,EAAKime,QAAQrie,EAEjB,CACA,UAAAktd,CAAWltd,GACT,IAAI5D,EAAOxE,KACPmrB,EAAU3mB,EAAK2mB,QACfs7D,EAAS4jZ,EAAUl/c,QAAQ/iB,GAC/B,IAAKiie,EAAUl/c,QAAQllB,eAAemC,GACpC,MAAM,IAAIqB,MAAM,mBAAqBrB,EAAO,YAE9C+iB,EAAQm/c,UAAUlie,IAAQ,EAC1B+iB,EAAQ8J,OAAO7sB,GAAQq+E,EAAO59D,GAAGkX,MAAMv7B,EAAM,CAACA,EAAK2mB,QAAQ8wJ,SAAS7zK,IAAS,CAAC,IAC9E+iB,EAAQuiB,MAAMzpC,KAAKmE,EACrB,CAMA,OAAAqie,CAAQrie,GACN,IAAI5D,EAAOxE,KACPmrB,EAAU3mB,EAAK2mB,QACnB,IAAK3mB,EAAK2mB,QAAQ8J,OAAOhvB,eAAemC,GAAO,CAC7C,GAAI+iB,EAAQm/c,UAAUlie,GACpB,MAAM,IAAIqB,MAAM,oCAAsCrB,EAAO,MAE/D5D,EAAK8wd,WAAWltd,EAClB,CACA,OAAO+iB,EAAQ8J,OAAO7sB,EACxB,EAEJ,CAUA,MAAMsie,EAAiBpkS,IACrBA,EAAQA,EAAMx+L,OAAO2b,UAEXnS,OAAS,EACVg1L,EAAM,IAAM,GAGW,GAAzBqkS,EAAerkS,GAAc,IAAMA,EAAMpiM,KAAK,IAAM,IAAM,MAAQoiM,EAAMpiM,KAAK,KAAO,IAOvF0me,EAAkBtqd,IACtB,IAAKuqd,EAAcvqd,GACjB,OAAOA,EAAMpc,KAAK,IAGpB,IAAIgE,EAAU,GACV4ie,EAAkB,EAEtB,MAAMC,EAAe,KACfD,EAAkB,IACpB5ie,GAAW,IAAM4ie,EAAkB,IACrC,EAcF,OAXAxqd,EAAM/d,SAAQ,CAAC4C,EAAM4hB,KACf5hB,IAASmb,EAAMyG,EAAI,IAKvBgkd,IACA7ie,GAAW/C,EACX2le,EAAkB,GANhBA,GAMiB,IAErBC,IACO7ie,CAAO,EAUV8ie,EAAe1kS,IACnB,IAAIhmL,EAAQ4yG,EAAQozE,GACpB,OAAOokS,EAAepqd,EAAM,EAQxBuqd,EAAgBvqd,GACb,IAAIpgB,IAAIogB,GAAO/e,OAAS+e,EAAMhP,OAQjC25d,EAAerkd,IACXA,EAAM,IAAI3hB,QAAQ,qCAAsC,QAQ5D0le,EAAiBrqd,GACdA,EAAM3d,QAAO,CAACi/C,EAASx9C,IAAUmN,KAAKC,IAAIowC,EAASspb,EAAc9me,KAAS,GAM7E8me,EAAgBtkd,GACbssG,EAAQtsG,GAAKtV,OAOhB4hH,EAAUzjF,GAAKjuC,MAAMC,KAAKguC,GAS1B07b,EAAgB/he,IACpB,GAAqB,IAAjBA,EAAMkI,OAAc,MAAO,CAAC,CAAClI,IAGjC,IAAI0b,EAAS,GACb,MAAMziB,EAAQ+G,EAAM2oB,UAAU,GAU9B,OATao5c,EAAc9oe,GACtBE,SAAQ,SAAU6oe,GACrB,IAAI98b,EAAM88b,EAAU5le,MAAM,GAC1B8oC,EAAI,GAAKllC,EAAM7D,OAAO,GAAK+oC,EAAI,GAC/BxpB,EAAO7gB,KAAKqqC,GACZA,EAAM88b,EAAU5le,MAAM,GACtB8oC,EAAIouD,QAAQtzF,EAAM7D,OAAO,IACzBuf,EAAO7gB,KAAKqqC,EACd,IACOxpB,CAAM,EAcTumd,EAAc,CAAC,CAAC,EAAG,QACnBC,EAAa,kCAGnB,IAAIC,EAGAC,EACJ,MAAMC,EAAkB,EAGlBC,EAAgB,CAAC,EAGjBC,EAAkB,CACtB,IAAK,eACL,EAAK,SACL,EAAK,qBACL,GAAM,SACN,GAAM,mBACN,GAAM,SACN,GAAM,SACN,GAAM,eACN,GAAM,SACN,EAAK,qBACL,EAAK,2BACL,EAAK,mDACL,EAAK,2BACL,EAAK,eACL,EAAK,uCACL,EAAK,2BACL,EAAK,eACL,EAAK,eACL,EAAK,uCACL,EAAK,mDACL,EAAK,qBACL,EAAK,6CACL,EAAK,2CACL,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,EAAK,uCACL,EAAK,qBACL,EAAK,iCACL,EAAK,+BACL,EAAK,iCACL,GAAM,OACN,GAAM,SACN,EAAK,SACL,EAAK,qBACL,GAAM,SACN,EAAK,SACL,EAAK,qBACL,EAAK,iCACL,GAAM,UAGR,IAAK,IAAIC,MAASD,EAAiB,CACjC,IAAIE,EAAUF,EAAgBC,KAAU,GAExC,IAAK,IAAI7kd,EAAI,EAAGA,EAAI8kd,EAAQv6d,OAAQyV,IAAK,CACvC,IAAI5hB,EAAO0me,EAAQ95c,UAAUhL,EAAGA,EAAI,GACpC2kd,EAAcvme,GAAQyme,EACxB,CACF,CAEA,MAAME,EAAc,IAAI3je,OAAOnH,OAAO+C,KAAK2ne,GAAexne,KAAK,KAAO,IAAMone,EAAY,MAOlFxyd,EAAaizd,SACGlme,IAAhB0le,IACJA,EAAcS,EAAYD,GAAgBV,GAAY,EASlD13a,EAAY,CAAC/sC,EAAK1d,EAAO,SAAW0d,EAAI+sC,UAAUzqD,GASlD+ie,EAAYrld,GACTssG,EAAQtsG,GAAKjkB,QAKpB,CAACmiB,EAAQ3f,IACA2f,EAASond,EAAW/me,IAC1B,IAOC+me,EAAatld,IACjBA,EAAM+sC,EAAU/sC,GAAKlhB,cAAcT,QAAQ6me,GAE3C3me,GACSume,EAAcvme,IAAS,KAGzBwuD,EAAU/sC,EAAK,QAQxB,SAAU6jI,EAAU4gV,GAClB,IAAK,MAAOc,EAAgBC,KAAmBf,EAC7C,IAAK,IAAItkd,EAAIold,EAAgBpld,GAAKqld,EAAgBrld,IAAK,CACrD,IAAIuwJ,EAAW3zJ,OAAOgjL,aAAa5/K,GAC/Bsld,EAASJ,EAAU30T,GAEnB+0T,GAAU/0T,EAAS5xK,gBASnB2me,EAAO/6d,OAASm6d,GAIC,GAAjBY,EAAO/6d,cAIL,CACJ+6d,OAAQA,EACR/0T,SAAUA,EACVg1T,WAAYvld,IAEhB,CAEJ,CAOA,MAAMwld,EAAelB,IAEnB,MAAMmB,EAAe,CAAC,EAMhBC,EAAc,CAACJ,EAAQK,KAE3B,MAAMC,EAAaH,EAAaH,IAAW,IAAInse,IACzC0se,EAAO,IAAIzke,OAAO,IAAM6ie,EAAa2B,GAAc,IAAK,MAE1DD,EAAOzle,MAAM2le,KAIjBD,EAAWlse,IAAIwqe,EAAayB,IAC5BF,EAAaH,GAAUM,EAAU,EAGnC,IAAK,IAAIvoe,KAASqmJ,EAAU4gV,GAC1BoB,EAAYroe,EAAMioe,OAAQjoe,EAAMioe,QAChCI,EAAYroe,EAAMioe,OAAQjoe,EAAMkzK,UAGlC,OAAOk1T,CAAY,EAUfR,EAAcX,IAElB,MAAMmB,EAAeD,EAAalB,GAG5BE,EAAc,CAAC,EAGrB,IAAIsB,EAAa,GAEjB,IAAK,IAAIR,KAAUG,EAAc,CAC/B,IAAI3oe,EAAM2oe,EAAaH,GAEnBxoe,IACF0ne,EAAYc,GAAUrB,EAAanne,IAGjCwoe,EAAO/6d,OAAS,GAClBu7d,EAAW5oe,KAAKgne,EAAaoB,GAEjC,CAEAQ,EAAWnre,MAAK,CAACsH,EAAG2R,IAAMA,EAAErJ,OAAStI,EAAEsI,SACvC,MAAMw7d,EAAkBpC,EAAemC,GAEvC,OADArB,EAAiB,IAAIrje,OAAO,IAAM2ke,EAAiB,KAC5CvB,CAAW,EASdwB,EAAc,CAACC,EAASC,EAAkB,KAC9C,IAAIC,EAAiB,EASrB,OARAF,EAAUA,EAAQnqe,KAAI+jB,IAChB2kd,EAAY3kd,KACdsmd,GAAkBtmd,EAAItV,QAGjBi6d,EAAY3kd,IAAQA,KAGzBsmd,GAAkBD,EACbrC,EAAgBoC,GAGlB,EAAE,EAgBLG,EAAsB,CAACvmd,EAAKqmd,EAAkB,KAClDA,EAAkB17d,KAAKC,IAAIy7d,EAAiBrmd,EAAItV,OAAS,GAClDo5d,EAAeS,EAAcvkd,GAAK/jB,KAAIuqe,GACpCL,EAAYK,EAASH,OAW1BI,EAAqB,CAACC,EAAWxza,GAAM,KAC3C,IAAImza,EAAkBK,EAAUh8d,OAAS,EAAI,EAAI,EACjD,OAAOo5d,EAAe4C,EAAUzqe,KAAI0hN,IAClC,IAAIgpR,EAAM,GACV,MAAMz+b,EAAMgrB,EAAMyqJ,EAASjzM,SAAWizM,EAASjzM,SAAW,EAE1D,IAAK,IAAI2W,EAAI,EAAGA,EAAI6mB,EAAK7mB,IACvBsld,EAAItpe,KAAKkpe,EAAoB5oR,EAASipR,QAAQvld,IAAM,GAAIgld,IAG1D,OAAOrC,EAAgB2C,EAAI,IAC1B,EASCE,EAAc,CAACC,EAAYJ,KAC/B,IAAK,MAAMC,KAAOD,EAAW,CAC3B,GAAIC,EAAIlre,OAASqre,EAAWrre,OAASkre,EAAIvtd,KAAO0td,EAAW1td,IACzD,SAGF,GAAIutd,EAAIC,QAAQtpe,KAAK,MAAQwpe,EAAWF,QAAQtpe,KAAK,IACnD,SAGF,IAAIype,EAAeD,EAAW5pe,MAK9B,MAAMgE,EAAS+qC,IACb,IAAK,MAAM+6b,KAAeD,EAAc,CACtC,GAAIC,EAAYvre,QAAUwwC,EAAKxwC,OAASure,EAAYzpX,SAAWtxE,EAAKsxE,OAClE,OAAO,EAGT,GAAmB,GAAftxE,EAAKvhC,QAAqC,GAAtBs8d,EAAYt8d,OAApC,CASA,GAAIuhC,EAAKxwC,MAAQure,EAAYvre,OAASwwC,EAAK7yB,IAAM4td,EAAYvre,MAC3D,OAAO,EAGT,GAAIure,EAAYvre,MAAQwwC,EAAKxwC,OAASure,EAAY5td,IAAM6yB,EAAKxwC,MAC3D,OAAO,CAZT,CAcF,CAEA,OAAO,CAAK,EAKd,KAFekre,EAAIzpe,MAAMgE,OAAOA,GAEnBwJ,OAAS,GAItB,OAAO,CACT,CAEA,OAAO,CAAK,EAGd,MAAMu8d,EACJ,WAAAjue,GAEEI,KAAK8D,MAAQ,GAGb9D,KAAKwte,QAAU,GACfxte,KAAKqC,MAAQ,EACbrC,KAAKggB,IAAM,CACb,CAMA,GAAAvf,CAAIoyC,GACEA,IACF7yC,KAAK8D,MAAMG,KAAK4uC,GAChB7yC,KAAKwte,QAAQvpe,KAAK4uC,EAAKsxE,QACvBnkH,KAAKqC,MAAQkP,KAAKyW,IAAI6qB,EAAKxwC,MAAOrC,KAAKqC,OACvCrC,KAAKggB,IAAMzO,KAAKC,IAAIqhC,EAAK7yB,IAAKhgB,KAAKggB,KAEvC,CAEA,IAAA22B,GACE,OAAO32C,KAAK8D,MAAM9D,KAAK8D,MAAMwN,OAAS,EACxC,CAEA,MAAAA,GACE,OAAOtR,KAAK8D,MAAMwN,MACpB,CAOA,KAAAi9B,CAAMjiB,EAAUwhd,GACd,IAAIv/b,EAAQ,IAAIs/b,EACZ/pe,EAAQ4F,KAAKC,MAAMD,KAAKsa,UAAUhkB,KAAK8D,QACvCiqe,EAAYjqe,EAAMozD,MAEtB,IAAK,MAAMrkB,KAAQ/uC,EACjByqC,EAAM9tC,IAAIoyC,GAGZ,IAAIm7b,EAAcF,EAAW3pX,OAAOpyF,UAAU,EAAGzF,EAAWyhd,EAAU1re,OAClE4re,EAAiBD,EAAY18d,OAOjC,OANAi9B,EAAM9tC,IAAI,CACR4B,MAAO0re,EAAU1re,MACjB2d,IAAK+td,EAAU1re,MAAQ4re,EACvB38d,OAAQ28d,EACR9pX,OAAQ6pX,IAEHz/b,CACT,EAoBF,MAAM2/b,EAAatnd,IACjB9N,IACA8N,EAAMqld,EAAUrld,GAChB,IAAI1e,EAAU,GACVole,EAAY,CAAC,IAAIO,GAErB,IAAK,IAAI9md,EAAI,EAAGA,EAAIH,EAAItV,OAAQyV,IAAK,CACnC,IACI9f,EADS2f,EAAImL,UAAUhL,GACR9f,MAAMuke,GACzB,MAAMrme,EAAOyhB,EAAImL,UAAUhL,EAAGA,EAAI,GAC5Bond,EAAYlne,EAAQA,EAAM,GAAK,KAGrC,IAAImne,EAAc,GACdC,EAAc,IAAInue,IAEtB,IAAK,MAAMqkN,KAAY+oR,EAAW,CAChC,MAAMQ,EAAavpR,EAAS5tK,OAE5B,IAAKm3b,GAAmC,GAArBA,EAAWx8d,QAAew8d,EAAW9td,KAAO+G,EAE7D,GAAIond,EAAW,CACb,MAAMr/b,EAAMq/b,EAAU78d,OACtBizM,EAAS9jN,IAAI,CACX4B,MAAO0kB,EACP/G,IAAK+G,EAAI+nB,EACTx9B,OAAQw9B,EACRq1E,OAAQgqX,IAEVE,EAAY5te,IAAI,IAClB,MACE8jN,EAAS9jN,IAAI,CACX4B,MAAO0kB,EACP/G,IAAK+G,EAAI,EACTzV,OAAQ,EACR6yG,OAAQh/G,IAEVkpe,EAAY5te,IAAI,UAEb,GAAI0te,EAAW,CACpB,IAAI5/b,EAAQg2K,EAASh2K,MAAMxnB,EAAG+md,GAC9B,MAAMh/b,EAAMq/b,EAAU78d,OACtBi9B,EAAM9tC,IAAI,CACR4B,MAAO0kB,EACP/G,IAAK+G,EAAI+nB,EACTx9B,OAAQw9B,EACRq1E,OAAQgqX,IAEVC,EAAYnqe,KAAKsqC,EACnB,MAGE8/b,EAAY5te,IAAI,IAEpB,CAGA,GAAI2te,EAAY98d,OAAS,EAAzB,CAEE88d,EAAcA,EAAY1se,MAAK,CAACsH,EAAG2R,IAC1B3R,EAAEsI,SAAWqJ,EAAErJ,WAGxB,IAAK,IAAIi9B,KAAS6/b,EAEZX,EAAYl/b,EAAO++b,IAIvBA,EAAUrpe,KAAKsqC,EAInB,MAMA,GAAIxnB,EAAI,GAAyB,GAApBsnd,EAAY9se,OAAc8se,EAAYnie,IAAI,KAAM,CAC3DhE,GAAWmle,EAAmBC,GAAW,GACzC,IAAIgB,EAAU,IAAIT,EAClB,MAAMU,EAAUjB,EAAU,GAEtBiB,GACFD,EAAQ7te,IAAI8te,EAAQ53b,QAGtB22b,EAAY,CAACgB,EACf,CACF,CAGA,OADApme,GAAWmle,EAAmBC,GAAW,GAClCple,CAAO,EAWVsme,EAAU,CAACtod,EAAK9d,KACpB,GAAK8d,EACL,OAAOA,EAAI9d,EAAK,EASZqme,EAAiB,CAACvod,EAAK9d,KAC3B,GAAK8d,EAAL,CAIA,IAHA,IAAI2sB,EACAnF,EAAQtlC,EAAKjB,MAAM,MAEf0rC,EAAOnF,EAAMhlC,WAAawd,EAAMA,EAAI2sB,MAE5C,OAAO3sB,CANS,CAMN,EAQNwod,EAAa,CAACtqe,EAAOyC,EAAOwoC,KAChC,IAAIs/b,EAAOr/a,EACX,OAAKlrD,GACLA,GAAgB,GACG,MAAfyC,EAAM09G,QAEG,KADbj1D,EAAMlrD,EAAMw8H,OAAO/5H,EAAM09G,QADO,GAGhCoqX,EAAQ9ne,EAAMid,OAAOxS,OAASlN,EAAMkN,OACxB,IAARg+C,IAAWq/a,GAAS,IACjBA,EAAQt/b,IAPI,CAOE,EAOjBu/b,EAAc,CAAC1od,EAAKliB,KACxB,IAAII,EAAQ8hB,EAAIliB,GAChB,GAAoB,mBAATI,EAAqB,OAAOA,EAEnCA,IAAU5C,MAAM4T,QAAQhR,KAC1B8hB,EAAIliB,GAAO,CAACI,GACd,EAaIyqe,EAAY,CAACjpe,EAAQmG,KACzB,GAAIvK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQwJ,QAEf,IAAK,IAAI/H,KAAO4B,EACVA,EAAOK,eAAejC,IACxB+H,EAASnG,EAAO5B,GAAMA,EAG5B,EAEIsyC,EAAM,CAACttC,EAAG2R,IACG,kBAAN3R,GAA+B,kBAAN2R,EAC3B3R,EAAI2R,EAAI,EAAI3R,EAAI2R,GAAK,EAAI,GAGlC3R,EAAIije,EAAUjje,EAAI,IAAItD,gBACtBiV,EAAIsxd,EAAUtxd,EAAI,IAAIjV,eACJ,EACdiV,EAAI3R,GAAW,EACZ,EAqBT,MAAM8le,EASJ,WAAAlve,CAAYw3C,EAAO6kI,GACjBj8K,KAAKo3C,WAAQ,EACbp3C,KAAKi8K,cAAW,EAChBj8K,KAAKo3C,MAAQA,EACbp3C,KAAKi8K,SAAWA,GAAY,CAC1B8yT,YAAY,EAEhB,CAOA,QAAAC,CAASrqW,EAAOsqW,EAAyBC,GACvC,IAAKvqW,IAAUA,EAAMrzH,OAAQ,MAAO,GACpC,MAAMN,EAAS,GACT80U,EAAQnhN,EAAMx9H,MAAM,OAC1B,IAAIgoe,EAgCJ,OA9BID,IACFC,EAAc,IAAIhne,OAAO,KAAOnH,OAAO+C,KAAKmre,GAASrse,IAAIooe,GAAc/me,KAAK,KAAO,YAGrF4hV,EAAMvjV,SAAQ6se,IACZ,IAAIC,EACAvkZ,EAAQ,KACRy5B,EAAQ,KAER4qX,IAAgBE,EAAcD,EAAKnoe,MAAMkoe,MAC3CrkZ,EAAQukZ,EAAY,GACpBD,EAAOC,EAAY,IAGjBD,EAAK99d,OAAS,IAEdizG,EADEvkH,KAAKi8K,SAAS8yT,WACRb,EAAWkB,IAAS,KAEpBnE,EAAamE,GAGnB7qX,GAAS0qX,IAAyB1qX,EAAQ,MAAQA,IAGxDvzG,EAAO/M,KAAK,CACV6f,OAAQsrd,EACR7qX,MAAOA,EAAQ,IAAIp8G,OAAOo8G,EAAO,MAAQ,KACzCz5B,MAAOA,GACP,IAEG95E,CACT,CAUA,gBAAAs+d,CAAiB3qW,EAAOv9H,GACtB,IAAIw5H,EAAS5gI,KAAKuve,cAAc5qW,EAAOv9H,GACvC,OAAOpH,KAAKwve,kBAAkB5uW,EAChC,CAOA,iBAAA4uW,CAAkB5uW,GAChB,MAAM5vH,EAAS4vH,EAAO5vH,OAChBy+d,EAAcz+d,EAAOM,OAE3B,IAAKm+d,EACH,OAAO,WACL,OAAO,CACT,EAGF,MAAMx1T,EAASr5C,EAAOx5H,QAAQ6yK,OACxBi1T,EAAUtuW,EAAOsuW,QACjBQ,EAAcz1T,EAAO3oK,OACrBq+d,EAAY/uW,EAAO+uW,UAEzB,IAAKD,EACH,OAAO,WACL,OAAO,CACT,EASF,MAAME,EACgB,IAAhBF,EACK,SAAU7oe,EAAOiN,GACtB,MAAMg3E,EAAQmvF,EAAO,GAAGnvF,MACxB,OAAO4jZ,EAAWiB,EAAU77d,EAAMg3E,GAAQjkF,EAAOqoe,EAAQpkZ,IAAU,EACrE,EAGK,SAAUjkF,EAAOiN,GACtB,IAAIkqJ,EAAM,EAEV,GAAIn3J,EAAMikF,MAAO,CACf,MAAM1mF,EAAQure,EAAU77d,EAAMjN,EAAMikF,QAE/BjkF,EAAM09G,OAASngH,EAClB45J,GAAO,EAAI0xU,EAEX1xU,GAAO0wU,EAAWtqe,EAAOyC,EAAO,EAEpC,MACEgoe,EAAUK,GAAS,CAAC7/b,EAAQy7C,KAC1BkzE,GAAO0wU,EAAWiB,EAAU77d,EAAMg3E,GAAQjkF,EAAOwoC,EAAO,IAI5D,OAAO2uH,EAAM0xU,CACf,EAGF,OAAoB,IAAhBD,EACK,SAAU37d,GACf,OAAO87d,EAAY5+d,EAAO,GAAI8C,EAChC,EAGiC,QAA/B8sH,EAAOx5H,QAAQyoe,YACV,SAAU/7d,GACf,IAAI66d,EACA3wU,EAAM,EAEV,IAAK,IAAIn3J,KAASmK,EAAQ,CAExB,IADA29d,EAAQiB,EAAY/oe,EAAOiN,KACd,EAAG,OAAO,EACvBkqJ,GAAO2wU,CACT,CAEA,OAAO3wU,EAAMyxU,CACf,EAEO,SAAU37d,GACf,IAAIkqJ,EAAM,EAIV,OAHA6wU,EAAU79d,GAAQnK,IAChBm3J,GAAO4xU,EAAY/oe,EAAOiN,EAAK,IAE1BkqJ,EAAMyxU,CACf,CAEJ,CASA,eAAAK,CAAgBnrW,EAAOv9H,GACrB,IAAIw5H,EAAS5gI,KAAKuve,cAAc5qW,EAAOv9H,GACvC,OAAOpH,KAAK+ve,iBAAiBnvW,EAC/B,CAEA,gBAAAmvW,CAAiBnvW,GACf,IAAIovW,EACAC,EAAY,GAChB,MAAMzre,EAAOxE,KACPoH,EAAUw5H,EAAOx5H,QACjB1F,GAAQk/H,EAAO+D,OAASv9H,EAAQ8oe,WAAa9oe,EAAQ8oe,WAAa9oe,EAAQ1F,KAEhF,GAAmB,mBAARA,EACT,OAAOA,EAAKyoE,KAAKnqE,MASnB,MAAMmwe,EAAY,SAAmB/ne,EAAM0c,GACzC,MAAa,WAAT1c,EAA0B0c,EAAO6pd,MAC9B/tW,EAAO+uW,UAAUnre,EAAK4yC,MAAMtyB,EAAOiQ,IAAK3sB,EACjD,EAGA,GAAI1G,EACF,IAAK,IAAI6kB,KAAK7kB,GACRk/H,EAAO+D,OAAqB,WAAZp+G,EAAEukE,QACpBmlZ,EAAUhse,KAAKsiB,GAOrB,GAAIq6G,EAAO+D,MAAO,CAChBqrW,GAAiB,EAEjB,IAAK,IAAII,KAAOH,EACd,GAAkB,WAAdG,EAAItlZ,MAAoB,CAC1BklZ,GAAiB,EACjB,KACF,CAGEA,GACFC,EAAUvzY,QAAQ,CAChB5R,MAAO,SACP53B,UAAW,QAIjB,MACE+8a,EAAYA,EAAUnoe,QAAOsoe,GAAqB,WAAdA,EAAItlZ,QAM1C,OAFwBmlZ,EAAU3+d,OAM3B,SAAUtI,EAAG2R,GAClB,IAAImK,EAAQgmE,EAEZ,IAAK,IAAIulZ,KAAYJ,EAInB,GAHAnlZ,EAAQulZ,EAASvlZ,MAEjBhmE,GADwC,SAAvBurd,EAASn9a,WAAwB,EAAI,GAChC5c,EAAI65b,EAAUrlZ,EAAO9hF,GAAImne,EAAUrlZ,EAAOnwE,IACpD,OAAOmK,EAGrB,OAAO,CACT,EAdS,IAeX,CAQA,aAAAyqd,CAAc5qW,EAAO2rW,GACnB,MAAMpB,EAAU,CAAC,EACjB,IAAI9ne,EAAUpG,OAAOC,OAAO,CAAC,EAAGqve,GAIhC,GAHA1B,EAAYxne,EAAS,QACrBwne,EAAYxne,EAAS,cAEjBA,EAAQ6yK,OAAQ,CAClB20T,EAAYxne,EAAS,UACrB,MAAM6yK,EAAS,GACf7yK,EAAQ6yK,OAAO13K,SAAQuoF,IACD,iBAATA,IACTA,EAAQ,CACNA,MAAOA,EACPz7C,OAAQ,IAIZ4qI,EAAOh2K,KAAK6mF,GACZokZ,EAAQpkZ,EAAMA,OAAS,WAAYA,EAAQA,EAAMz7C,OAAS,CAAC,IAE7DjoC,EAAQ6yK,OAASA,CACnB,CAEA,MAAO,CACL7yK,QAASA,EACTu9H,MAAOA,EAAMj/H,cAAcsB,OAC3BgK,OAAQhR,KAAKgve,SAASrqW,EAAOv9H,EAAQ6ne,wBAAyBC,GAC9Dhma,MAAO,EACP9xB,MAAO,GACP83b,QAASA,EACTS,UAAWvoe,EAAQmpe,QAAU9B,EAAiBD,EAElD,CAMA,MAAA5tW,CAAO+D,EAAOv9H,GACZ,IACIune,EACA/tW,EAFAp8H,EAAOxE,KAGX4gI,EAAS5gI,KAAKuve,cAAc5qW,EAAOv9H,GACnCA,EAAUw5H,EAAOx5H,QACjBu9H,EAAQ/D,EAAO+D,MAEf,MAAM6rW,EAAWppe,EAAQune,OAASnqe,EAAKgre,kBAAkB5uW,GAGrD+D,EAAMrzH,OACRu9d,EAAUrqe,EAAK4yC,OAAO,CAACjE,EAAMpe,KAC3B45c,EAAQ6B,EAASr9b,KAEM,IAAnB/rC,EAAQU,QAAoB6me,EAAQ,IACtC/tW,EAAOxpF,MAAMnzC,KAAK,CAChB,MAAS0qe,EACT,GAAM55c,GAEV,IAGF85c,EAAUrqe,EAAK4yC,OAAO,CAAClyC,EAAG6vB,KACxB6rG,EAAOxpF,MAAMnzC,KAAK,CAChB,MAAS,EACT,GAAM8wB,GACN,IAIN,MAAM07c,EAAUjse,EAAKure,iBAAiBnvW,GAUtC,OARI6vW,GAAS7vW,EAAOxpF,MAAM11C,KAAK+ue,GAE/B7vW,EAAO13D,MAAQ03D,EAAOxpF,MAAM9lC,OAEC,kBAAlBlK,EAAQ06E,QACjB8+C,EAAOxpF,MAAQwpF,EAAOxpF,MAAM5xC,MAAM,EAAG4B,EAAQ06E,QAGxC8+C,CACT,EAcF,MAAM8vW,EAAU,CAAC9qe,EAAQmG,KACvB,GAAIvK,MAAM4T,QAAQxP,GAChBA,EAAOrD,QAAQwJ,QAEf,IAAK,IAAI/H,KAAO4B,EACVA,EAAOK,eAAejC,IACxB+H,EAASnG,EAAO5B,GAAMA,EAG5B,EASImyQ,EAASxxI,IACb,GAAIA,EAAMgsW,OACR,OAAOhsW,EAAM,GAEf,GAAIA,aAAiBhX,YACnB,OAAOgX,EAET,GAAIisW,EAAajsW,GAAQ,CACvB,IAAIksW,EAAM9re,SAAS+3B,cAAc,YAEjC,OADA+zc,EAAIn+c,UAAYiyG,EAAM39H,OACf6pe,EAAItpe,QAAQsyH,UACrB,CACA,OAAO90H,SAASqzH,cAAcuM,EAAM,EAEhCisW,EAAe/qZ,GACA,kBAARA,GAAoBA,EAAIhnD,QAAQ,MAAQ,EAK/Ciyc,EAAcnsW,GACXA,EAAM1/H,QAAQ,UAAW,QAO5Bq0M,EAAe,CAACy3R,EAAQC,KAC5B,IAAInwe,EAAQkE,SAAS4nH,YAAY,cACjC9rH,EAAM08W,UAAUyzH,GAAY,GAAM,GAClCD,EAAOtsd,cAAc5jB,EAAM,EAOvBowe,EAAW,CAACF,EAAQnzW,KACxB58H,OAAOC,OAAO8ve,EAAOh+c,MAAO6qG,EAAI,EAO5BszW,EAAa,CAACC,KAAUtzd,KAC5B,IAAIuzd,EAAeC,EAAaxzd,IAChCszd,EAAQG,EAAYH,IACdtue,KAAImvD,IACRo/a,EAAavue,KAAIgqL,IACf76H,EAAGgkH,UAAUv1K,IAAIosL,EAAI,GACrB,GACF,EAOE0kT,EAAgB,CAACJ,KAAUtzd,KAC/B,IAAIuzd,EAAeC,EAAaxzd,IAChCszd,EAAQG,EAAYH,IACdtue,KAAImvD,IACRo/a,EAAavue,KAAIgqL,IACf76H,EAAGgkH,UAAUr+G,OAAOk1H,EAAI,GACxB,GACF,EAOEwkT,EAAep4d,IACnB,IAAI4E,EAAU,GASd,OARA6yd,EAAQz3d,GAAMu4d,IACY,kBAAbA,IACTA,EAAWA,EAASxqe,OAAOG,MAAM,sBAE/B3F,MAAM4T,QAAQo8d,KAChB3zd,EAAUA,EAAQ/a,OAAO0ue,GAC3B,IAEK3zd,EAAQ/V,OAAO2b,QAAQ,EAO1B6td,EAAczrZ,IACbrkF,MAAM4T,QAAQywE,KACjBA,EAAM,CAACA,IAEFA,GAQH4rZ,EAAc,CAAC/se,EAAQqJ,EAAU+rH,KACrC,IAAIA,GAAYA,EAAQ/uH,SAASrG,GAGjC,KAAOA,GAAUA,EAAOqC,SAAS,CAC/B,GAAIrC,EAAOqC,QAAQgH,GACjB,OAAOrJ,EAETA,EAASA,EAAOi5B,UAClB,GAUI+zc,EAAU,CAAClqW,EAAMt0E,EAAY,IAC7BA,EAAY,EACPs0E,EAAKA,EAAKl2H,OAAS,GAErBk2H,EAAK,GAORmqW,EAAgBzrd,GACe,IAA5BllB,OAAO+C,KAAKmiB,GAAK5U,OAOpBmvL,EAAY,CAACzuI,EAAI4/a,KACrB,IAAK5/a,EAAI,OAAQ,EACjB4/a,EAAUA,GAAW5/a,EAAG6jE,SAExB,IADA,IAAI9uG,EAAI,EACDirC,EAAKA,EAAG6/a,wBACT7/a,EAAGjrD,QAAQ6qe,IACb7qd,IAGJ,OAAOA,CAAC,EAOJ+qd,GAAU,CAAC9/a,EAAIykE,KACnBi6W,EAAQj6W,GAAO,CAACxmF,EAAK6mF,KACR,MAAP7mF,EACF+hB,EAAGr2C,gBAAgBm7G,GAEnB9kE,EAAGt2C,aAAao7G,EAAM,GAAK7mF,EAC7B,GACA,EAME8hc,GAAc,CAACC,EAAUv/W,KACzBu/W,EAASr0c,YAAYq0c,EAASr0c,WAAWqkV,aAAavvP,EAAau/W,EAAS,EAW5E/+P,GAAY,CAACxuO,EAAS8/G,KAC1B,GAAc,OAAVA,EAAgB,OAGpB,GAAqB,kBAAVA,EAAoB,CAC7B,IAAKA,EAAMjzG,OAAQ,OACnBizG,EAAQ,IAAIp8G,OAAOo8G,EAAO,IAC5B,CAIA,MAAM0tX,EAAgBhle,IACpB,IAAIhG,EAAQgG,EAAK6G,KAAK7M,MAAMs9G,GAC5B,GAAIt9G,GAASgG,EAAK6G,KAAKxC,OAAS,EAAG,CACjC,IAAI4ge,EAAWnte,SAAS+3B,cAAc,QACtCo1c,EAAS3tT,UAAY,YACrB,IAAI4tT,EAAYlle,EAAKmvX,UAAUn1X,EAAMnF,OACrCqwe,EAAU/1G,UAAUn1X,EAAM,GAAGqK,QAC7B,IAAI8ge,EAAcD,EAAU53W,WAAU,GAGtC,OAFA23W,EAAS90c,YAAYg1c,GACrBL,GAAYI,EAAWD,GAChB,CACT,CACA,OAAO,CAAC,EAKJG,EAAoBple,IACF,IAAlBA,EAAKM,WAAkBN,EAAKoqH,YAAe,kBAAkBhwH,KAAK4F,EAAK3G,UAAgC,cAAnB2G,EAAKs3K,WAA8C,SAAjBt3K,EAAK3G,SAC7H9E,MAAMC,KAAKwL,EAAKoqH,YAAY90H,SAAQkC,IAClC6te,EAAmB7te,EAAQ,GAE/B,EAEI6te,EAAqBrle,GACH,IAAlBA,EAAKM,SACA0ke,EAAchle,IAEvBole,EAAkBple,GACX,GAETqle,EAAmB7te,EAAQ,EAOvB8te,GAAkBvgb,IACtB,IAAIzmD,EAAWymD,EAAG/jD,iBAAiB,kBACnCzM,MAAMwE,UAAUzD,QAAQpB,KAAKoK,GAAU,SAAUymD,GAC/C,IAAI7G,EAAS6G,EAAGr0B,WAChBwtB,EAAO62T,aAAahwT,EAAG6nE,WAAY7nE,GACnC7G,EAAOwI,WACT,GAAE,EAGE6+a,GAAQ,GACRC,GAAa,GACbC,GAAU,GACVC,GAAW,GACXC,GAAS,GACTC,GAAY,GACZC,GAAW,GACXC,GAAgB,EAChBC,GAAa,GACbC,GAAU,EAEVC,GAD8B,qBAAdpmX,WAAoC,MAAMzlH,KAAKylH,UAAUC,WACjD,UAAY,UAE1C,IAAIjuE,GAAW,CACb13C,QAAS,GACT+re,UAAW,GACXhod,QAAS,GACT69F,UAAW,IACXoqX,QAAS,KAETC,SAAS,EACTtE,YAAY,EACZt0d,OAAQ,KACR64d,cAAc,EACdC,aAAc,KACdtgQ,WAAW,EACXugQ,aAAa,EACbC,WAAY,KACZC,WAAY,GACZC,SAAU,KACVC,aAAc,KACdC,YAAY,EACZC,eAAe,EACfC,aAAa,EACbC,QAAS,KACTC,kBAAkB,EAElBC,gBAAiB,IACjBC,aAAc,IACdC,aAAc,UACdC,SAAU,KAEVC,cAAe,WACfC,WAAY,QACZC,WAAY,OACZC,cAAe,WACfC,mBAAoB,QACpBC,mBAAoB,QACpBC,mBAAmB,EACnBC,UAAW,SACX9lO,YAAa,CAAC,QACd+lO,kBAAmB,MACnB7id,KAAM,KACN8id,aAAc,aACdC,aAAc,aACdC,cAAe,cACfC,qBAAsB,sBACtB5hQ,UAAW,OACX6hQ,YAAa,SACbC,eAAgB,KAChBC,aAAc,oDACdC,uBAAuB,EACvBjpQ,YAAa,KACbkpQ,gBAAiB,KACjBl0d,WAAY,SAAUsjH,GACpB,OAAOA,EAAMrzH,OAAS,CACxB,EAqBAq7E,OAAQ,CAQR,GAiBF,MAAM6oZ,GAAWpxe,GACM,qBAAVA,GAAmC,OAAVA,EAAuB,KACpDqxe,GAASrxe,GAEZqxe,GAAWrxe,GACM,mBAAVA,EAA4BA,EAAQ,IAAM,IAC9CA,EAAQ,GAOXsxe,GAAc9ud,IACVA,EAAM,IAAI3hB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,UAM/F+mF,GAAU,CAACnjE,EAAImjE,IACfA,EAAU,EACLxrD,WAAW3X,EAAImjE,IAExBnjE,EAAG1nB,KAAK,MACD,MAOHw0e,GAAe,CAAC9sd,EAAIs2B,KACxB,IAAI6sC,EACJ,OAAO,SAAU5nF,EAAO2H,GACtB,IAAIvH,EAAOxE,KACPgsF,IACFxnF,EAAK83B,QAAU/qB,KAAKC,IAAIhN,EAAK83B,QAAU,EAAG,GAC1C2vD,aAAaD,IAEfA,EAAUxrD,YAAW,WACnBwrD,EAAU,KACVxnF,EAAKoxe,eAAexxe,IAAS,EAC7BykB,EAAG1nB,KAAKqD,EAAMJ,EAAO2H,EACvB,GAAGozC,EACL,CAAC,EAQG02b,GAAkB,CAACrxe,EAAM4iT,EAAOv+R,KACpC,IAAItc,EACAkqE,EAAUjyE,EAAKiyE,QACfq/Z,EAAa,CAAC,EAiBlB,IAAKvpe,KAdL/H,EAAKiyE,QAAU,WACb,IAAIlqE,EAAOiO,UAAU,GACrB,IAA6B,IAAzB4sS,EAAMvoR,QAAQtyB,GAGhB,OAAOkqE,EAAQ12C,MAAMv7B,EAAMgW,WAF3Bs7d,EAAWvpe,GAAQiO,SAIvB,EAGAqO,EAAGkX,MAAMv7B,EAAM,IACfA,EAAKiyE,QAAUA,EAGF2wO,GACP76S,KAAQupe,GACVr/Z,EAAQ12C,MAAMv7B,EAAMsxe,EAAWvpe,GAEnC,EAYIgiK,GAAenlK,IACZ,CACL/G,MAAO+G,EAAMqwL,gBAAkB,EAC/BnoL,QAASlI,EAAMyjQ,cAAgB,IAAMzjQ,EAAMqwL,gBAAkB,KAQ3Dl1L,GAAiB,CAACuuL,EAAKrwL,GAAO,KAC9BqwL,IACFA,EAAIvuL,iBACA9B,GACFqwL,EAAIzuL,kBAER,EAOIi6W,GAAW,CAAC55W,EAAQ6H,EAAMR,EAAU3E,KACxC1C,EAAOtE,iBAAiBmM,EAAMR,EAAU3E,EAAQ,EAS5C2ue,GAAY,CAACC,EAAUljT,MACtBA,KAGAA,EAAIkjT,IAIK,KADDljT,EAAIhqL,OAAS,EAAI,IAAMgqL,EAAIjqL,QAAU,EAAI,IAAMiqL,EAAI/pL,SAAW,EAAI,IAAM+pL,EAAIlqL,QAAU,EAAI,GAYnGw0V,GAAQ,CAACprS,EAAIj9B,KACjB,MAAMkhd,EAAcjkb,EAAG1oD,aAAa,MACpC,OAAI2se,IAGJjkb,EAAGt2C,aAAa,KAAMqZ,GACfA,EAAE,EAMLmhd,GAAatvd,GACVA,EAAI3hB,QAAQ,UAAW,QAM1B+0H,GAAS,CAAC7uE,EAAQl+C,KAClBA,GAAMk+C,EAAO6uE,OAAO/sH,EAAK,EAG/B,SAASkpe,GAAY/se,EAAOgte,GAC1B,IAAIn6T,EAAWj7K,OAAOC,OAAO,CAAC,EAAG69C,GAAUs3b,GACvCC,EAAYp6T,EAASo4T,SACrBiC,EAAcr6T,EAASu4T,WACvB+B,EAAct6T,EAASs4T,WACvBiC,EAAiBv6T,EAASw4T,cAC1BgC,EAAiBx6T,EAASq4T,cAC1BoC,EAAuBz6T,EAASy4T,mBAChCiC,EAAuB16T,EAAS04T,mBAChCiC,EAAWxte,EAAM9C,QAAQZ,cACzB2mO,EAAcjjO,EAAME,aAAa,gBAAkBF,EAAME,aAAa,oBAC1E,IAAK+iO,IAAgBpwD,EAASg4T,iBAAkB,CAC9C,IAAIlpd,EAAS3hB,EAAMgvH,cAAc,oBAC7BrtG,IACFshN,EAActhN,EAAO8Q,YAEzB,CACA,IAAIg7c,EAAmB,CACrBxqQ,YAAaA,EACbjlO,QAAS,GACT+re,UAAW,GACX/7b,MAAO,GACPu8b,SAAU,MAoFRmD,EAAe,KACjB,MAAMC,EAAW3te,EAAME,aAAa+se,GACpC,GAAKU,EAYHF,EAAiBzve,QAAUsC,KAAKC,MAAMote,GACtCrG,EAAQmG,EAAiBzve,SAAS2lI,IAChC8pW,EAAiBz/b,MAAMnzC,KAAK8oI,EAAIwpW,GAAa,QAdlC,CACb,IAAInye,EAAQgF,EAAMhF,MAAM4C,QAAU,GAClC,IAAKi1K,EAASg4T,mBAAqB7ve,EAAMkN,OAAQ,OACjD,MAAM5O,EAAS0B,EAAM+C,MAAM80K,EAASjzD,WACpC0nX,EAAQhue,GAAQ0B,IACd,MAAM2mB,EAAS,CAAC,EAChBA,EAAOurd,GAAelye,EACtB2mB,EAAOwrd,GAAenye,EACtByye,EAAiBzve,QAAQnD,KAAK8mB,EAAO,IAEvC8rd,EAAiBz/b,MAAQ10C,CAC3B,CAKA,EAOF,MALiB,WAAbk0e,EAjGc,MAChB,IAAItwe,EACAc,EAAUyve,EAAiBzve,QAC3B4ve,EAAa,CAAC,EACdC,EAAc,EAClB,IAAIC,EAAS,EACb,IAAIC,EAAWnlb,IACb,IAAIl+C,EAAO9S,OAAOC,OAAO,CAAC,EAAG+wD,EAAGlkC,SAC5BqyZ,EAAOk2D,GAAavie,EAAKuie,GAI7B,MAHoB,kBAATl2D,GAAqBA,EAAK7ua,SACnCwC,EAAO9S,OAAOC,OAAO6S,EAAMpK,KAAKC,MAAMw2a,KAEjCrsa,CAAI,EAETsje,EAAY,CAACrsd,EAAQ20G,KACvB,IAAIt7H,EAAQoxe,GAASzqd,EAAO3mB,OAC5B,GAAa,MAATA,IACCA,GAAU63K,EAASg4T,kBAAxB,CAMA,GAAI+C,EAAW/we,eAAe7B,IAC5B,GAAIs7H,EAAO,CACT,IAAI54G,EAAMkwd,EAAW5ye,GAAOqye,GACvB3vd,EAEOtlB,MAAM4T,QAAQ0R,GAGxBA,EAAI7iB,KAAKy7H,GAFTs3W,EAAW5ye,GAAOqye,GAAkB,CAAC3vd,EAAK44G,GAF1Cs3W,EAAW5ye,GAAOqye,GAAkB/2W,CAMxC,MACK,CACL,IAAI23W,EAAcF,EAASpsd,GAC3Bssd,EAAYf,GAAee,EAAYf,IAAgBvrd,EAAO8Q,YAC9Dw7c,EAAYd,GAAec,EAAYd,IAAgBnye,EACvDize,EAAYb,GAAkBa,EAAYb,IAAmBzrd,EAAOy2C,SACpE61a,EAAYZ,GAAkBY,EAAYZ,IAAmB/2W,EAC7D23W,EAAYC,QAAUvsd,EACtBssd,EAAYH,OAASG,EAAYH,UAAYA,EAC7CF,EAAW5ye,GAASize,EACpBjwe,EAAQnD,KAAKoze,EACf,CACItsd,EAAO40H,UACTk3V,EAAiBz/b,MAAMnzC,KAAKG,EA7BkB,CA8BhD,EAEEmze,EAAWC,IACb,IAAIzid,EAAI0id,GACRA,EAAgBN,EAASK,IACXd,GAAwBe,EAAcf,IAAyBc,EAASlue,aAAa,UAAY,GAC/Gmue,EAAcd,GAAwBc,EAAcd,IAAyBM,IAC7EQ,EAAcjB,GAAkBiB,EAAcjB,IAAmBgB,EAASh2a,SAC1Ei2a,EAAcP,OAASO,EAAcP,UAAYA,EACjDL,EAAiB1D,UAAUlve,KAAKwze,GAChC1id,EAAK0id,EAAcd,GACnBjG,EAAQ8G,EAASp9W,UAAUrvG,IACzBqsd,EAAUrsd,EAAQgK,EAAG,GACrB,EAEJ8hd,EAAiBlD,SAAWvqe,EAAM4E,aAAa,YAAc,KAAO,EACpE0ie,EAAQtne,EAAMgxH,UAAUwC,IAEN,cADhBt2H,EAAUs2H,EAAMt2H,QAAQZ,eAEtB6xe,EAAS36W,GACY,WAAZt2H,GACT8we,EAAUx6W,EACZ,GACA,EA4BF86W,GAEAZ,IAEK91e,OAAOC,OAAO,CAAC,EAAG69C,GAAU+3b,EAAkBT,EACvD,CAEA,IAAIuB,GAAa,EACjB,MAAMC,WAAkBxN,EAAYJ,IAClC,WAAApqe,CAAYi4e,EAAWC,GA4CrB,IAAI1ib,EA3CJ8R,QACAlnE,KAAK+3e,mBAAgB,EACrB/3e,KAAK85H,aAAU,EACf95H,KAAKwmR,cAAW,EAChBxmR,KAAKg4e,aAAU,EACfh4e,KAAKi4e,sBAAmB,EACxBj4e,KAAKk4e,gBAAa,EAClBl4e,KAAK2tF,MAAQ,EACb3tF,KAAKi8K,cAAW,EAChBj8K,KAAKoJ,WAAQ,EACbpJ,KAAK8xT,cAAW,EAChB9xT,KAAKm4e,mBAAgB,EACrBn4e,KAAKyyD,SAAM,EACXzyD,KAAKo4e,aAAU,EACfp4e,KAAK2+D,cAAW,EAChB3+D,KAAKq4e,YAAS,EACdr4e,KAAK2mO,QAAS,EACd3mO,KAAKmyO,YAAa,EAClBnyO,KAAKgjL,YAAa,EAClBhjL,KAAKs4e,gBAAa,EAClBt4e,KAAK0xR,WAAY,EAEjB1xR,KAAK6mH,SAAU,EACf7mH,KAAKo7H,UAAW,EAChBp7H,KAAK6jP,WAAY,EACjB7jP,KAAKu4e,eAAgB,EACrBv4e,KAAKw4e,SAAU,EACfx4e,KAAK0mP,aAAc,EACnB1mP,KAAKy4e,aAAc,EACnBz4e,KAAK04e,YAAa,EAClB14e,KAAK24e,oBAAiB,EACtB34e,KAAK68F,UAAY,GACjB78F,KAAK20Y,SAAW,EAChB30Y,KAAKs8B,QAAU,EACft8B,KAAK41e,eAAiB,CAAC,EACvB51e,KAAK44e,aAAe,KACpB54e,KAAK64e,YAAc,GACnB74e,KAAKmze,UAAY,CAAC,EAClBnze,KAAKoH,QAAU,CAAC,EAChBpH,KAAK84e,YAAc,CAAC,EACpB94e,KAAKo3C,MAAQ,GACbp3C,KAAK+4e,eAAiB,KACtBpB,KAEA,IAAIvue,EAAQ+sQ,EAAO0hO,GACnB,GAAIzue,EAAM4ve,UACR,MAAM,IAAIvve,MAAM,kDAElBL,EAAM4ve,UAAYh5e,KAIlBo1D,GADoBtwD,OAAOkqD,kBAAoBlqD,OAAOkqD,iBAAiB5lD,EAAO,OAC1D6oD,iBAAiB,aAGrC,MAAMgqH,EAAWk6T,GAAY/se,EAAO0ue,GACpC93e,KAAKi8K,SAAWA,EAChBj8K,KAAKoJ,MAAQA,EACbpJ,KAAK8xT,SAAW1oT,EAAM0oT,UAAY,EAClC9xT,KAAKm4e,cAAgD,WAAhC/ue,EAAM9C,QAAQZ,cACnC1F,KAAKyyD,IAAM,OAAOprD,KAAK+tD,GACvBp1D,KAAKo4e,QAAUh7I,GAAMh0V,EAAO,aAAeuue,IAC3C33e,KAAKs4e,WAAalve,EAAMkxK,SAGxBt6K,KAAKq4e,OAAS,IAAIvJ,EAAO9ue,KAAKoH,QAAS,CACrC2ne,WAAY9yT,EAAS8yT,aAIvB9yT,EAAShqJ,KAAOgqJ,EAAShqJ,OAA+B,IAAtBgqJ,EAAS03T,SAAiB,SAAW,SAClC,mBAA1B13T,EAAS23T,eAClB33T,EAAS23T,aAAiC,UAAlB33T,EAAShqJ,MAEK,mBAA7BgqJ,EAASs5T,kBAClBt5T,EAASs5T,gBAAoC,UAAlBt5T,EAAShqJ,MAItC,IAAInqB,EAASm0K,EAASs3T,aACA,oBAAXzre,IACa,kBAAXA,IACTA,EAAS,IAAIK,OAAOL,IAElBA,aAAkBK,OACpB8zK,EAASs3T,aAAenqe,GAAStB,EAAOT,KAAK+B,GAE7C6yK,EAASs3T,aAAenve,GACfpE,KAAKi8K,SAAS43T,aAAe7ze,KAAKoH,QAAQhD,IAIvDpE,KAAKwqe,kBAAkBvuT,EAAS9wJ,SAChCnrB,KAAKi5e,iBACLj5e,KAAKk5e,iBAGL,MAAMp/W,EAAUq8I,EAAO,SACjB6hO,EAAU7hO,EAAO,SACjBqQ,EAAWxmR,KAAKm5e,QAAQ,YACxBlB,EAAmB9hO,EAAO,sCAC1Bt4P,EAAU7d,KAAKoJ,MAAME,aAAa,UAAY,GAC9Cw9L,EAAY7qB,EAAShqJ,KAC3B,IAAI8ld,EACJ7G,EAAWp3W,EAASmiD,EAAS84T,aAAcl3d,EAASipL,GACpDoqS,EAAW8G,EAAS/7T,EAAS+4T,cAC7Bh7W,GAAOF,EAASk+W,GAChB9G,EAAW1qN,EAAUvqG,EAASg5T,cAAenuS,GACzC7qB,EAASq5T,uBACXpE,EAAW1qN,EAAU3oQ,GAEvBqzd,EAAW+G,EAAkBh8T,EAASi5T,sBACtCl7W,GAAOwsJ,EAAUyxN,GACjB9hO,EAAOl6F,EAASm5T,gBAAkBt7W,GAAS18F,YAAYopP,GAGnDoqN,EAAa30T,EAASo5T,eACxB0C,EAAgB5hO,EAAOl6F,EAASo5T,cAIhCxG,EADY,CAAC,cAAe,iBAAkB,eAAgB,eAC7C/3W,IACX1tH,EAAME,aAAawtH,IACrBg7W,GAAQiG,EAAe,CACrB,CAACjhX,GAAO1tH,EAAME,aAAawtH,IAE/B,IAEFihX,EAAcjmL,UAAY,EAC1BkmL,EAAQ56c,YAAY26c,GACpB/3e,KAAKk4e,WAAaH,GAGT97T,EAASo5T,cAClB0C,EAAgB5hO,EAAOl6F,EAASo5T,cAChCr1e,KAAKk4e,WAAaH,IAElBA,EAAgB5hO,EAAO,YACvBn2Q,KAAKk4e,WAAaF,GAEpBh4e,KAAK85H,QAAUA,EACf95H,KAAKwmR,SAAWA,EAChBxmR,KAAKi4e,iBAAmBA,EACxBj4e,KAAKg4e,QAAUA,EACfh4e,KAAK+3e,cAAgBA,EACrB/3e,KAAKg8K,OACP,CAMA,KAAAA,GACE,MAAMx3K,EAAOxE,KACPi8K,EAAWz3K,EAAKy3K,SAChB87T,EAAgBvze,EAAKuze,cACrBvxN,EAAWhiR,EAAKgiR,SAChByxN,EAAmBzze,EAAKyze,iBACxBn+W,EAAUt1H,EAAKs1H,QACfk+W,EAAUxze,EAAKwze,QACf5ue,EAAQ5E,EAAK4E,MACb8ue,EAAa1ze,EAAK0ze,WAClBkB,EAAgB,CACpBtnb,SAAS,GAELunb,EAAY70e,EAAK4ze,QAAU,eACjCtG,GAAQmG,EAAkB,CACxBljd,GAAIskd,IAENvH,GAAQoG,EAAY,CAClBjyP,KAAM,WACN,gBAAiB,UACjB,gBAAiB,QACjB,gBAAiBozP,IAEnB,MAAMC,EAAal8I,GAAM86I,EAAY1ze,EAAK4ze,QAAU,eAC9CzzW,EAAQ,cAAgBmsW,EAAYtse,EAAK4ze,SAAW,KACpDvqd,EAAQ9oB,SAASqzH,cAAcuM,GAC/B40W,EAAc/0e,EAAKm9I,MAAMx3E,KAAK3lE,GACpC,GAAIqpB,EAAO,CACTywV,GAASzwV,EAAO,QAAS0rd,GACzBzH,GAAQjkd,EAAO,CACb8oF,IAAK2iY,IAEP,MAAME,EAAWp8I,GAAMvvU,EAAOrpB,EAAK4ze,QAAU,aAC7CtG,GAAQoG,EAAY,CAClB,kBAAmBsB,IAErB1H,GAAQmG,EAAkB,CACxB,kBAAmBuB,GAEvB,CAEA,GADA1/W,EAAQ/mG,MAAMjC,MAAQ1nB,EAAM2pB,MAAMjC,MAC9BtsB,EAAK2mB,QAAQuiB,MAAMp8B,OAAQ,CAC7B,MAAMmoe,EAAkB,UAAYj1e,EAAK2mB,QAAQuiB,MAAMxpC,KAAK,YAC5Dgte,EAAW,CAACp3W,EAAS0sJ,GAAWizN,EAClC,EAC2B,OAAtBx9T,EAAS03T,UAAqB13T,EAAS03T,SAAW,IAAMnve,EAAK2ze,eAChErG,GAAQ1oe,EAAO,CACbotK,SAAU,aAGVyF,EAASowD,aACXylQ,GAAQiG,EAAe,CACrB1rQ,YAAapwD,EAASowD,eAKrBpwD,EAASm3T,SAAWn3T,EAASjzD,YAChCizD,EAASm3T,QAAU,IAAIjre,OAAO,OAAS8ie,EAAahvT,EAASjzD,WAAa,UAKxEizD,EAASh7J,MAAQg7J,EAASk4T,eAC5Bl4T,EAASh7J,KAAO00d,GAAa15T,EAASh7J,KAAMg7J,EAASk4T,eAEvD71H,GAAS93F,EAAU,aAAa,KAC9BhiR,EAAKi0e,aAAc,CAAK,IAE1Bn6H,GAAS93F,EAAU,cAAcn9Q,IAC/B,IAAIqwe,EAAejI,EAAYpoe,EAAE3E,OAAQ,oBAAqB8hR,GAC1DkzN,GAAcl1e,EAAKm1e,cAActwe,EAAGqwe,EAAa,GACpD,CACD7/Q,SAAS,IAIXykJ,GAAS93F,EAAU,SAAS1zF,IAC1B,MAAM/nK,EAAS0md,EAAY3+S,EAAIpuL,OAAQ,qBACnCqmB,IACFvmB,EAAKo1e,eAAe9mT,EAAK/nK,GACzBxmB,GAAeuuL,GAAK,GACtB,IAEFwrL,GAAS05H,EAAS,SAASllT,IACzB,IAAI4mT,EAAejI,EAAY3+S,EAAIpuL,OAAQ,iBAAkBsze,GACzD0B,GAAgBl1e,EAAKq1e,aAAa/mT,EAAK4mT,GACzCn1e,GAAeuuL,GAAK,GAKK,IAAvBilT,EAAc3ze,QAGlBI,EAAKu5C,UACLx5C,GAAeuuL,GAAK,GAAK,IAI3BwrL,GAAS45H,EAAY,WAAW7ue,GAAK7E,EAAKs1e,UAAUzwe,KAGpDi1W,GAASy5H,EAAe,YAAY1ue,GAAK7E,EAAKu1e,WAAW1we,KACzDi1W,GAASy5H,EAAe,SAAS1ue,GAAK7E,EAAKw1e,QAAQ3we,KACnDi1W,GAAS45H,EAAY,QAAQ7ue,GAAK7E,EAAKy1e,OAAO5we,KAC9Ci1W,GAAS45H,EAAY,SAAS7ue,GAAK7E,EAAKm/O,QAAQt6O,KAChDi1W,GAASy5H,EAAe,SAAS1ue,GAAK7E,EAAK4mR,QAAQ/hR,KACnD,MAAM6we,EAAgBpnT,IAGpB,MAAMpuL,EAASouL,EAAIvb,eAAe,GAClC,IAAKz9C,EAAQ/uH,SAASrG,KAAY8hR,EAASz7Q,SAASrG,GAKlD,OAJIF,EAAKq/O,WACPr/O,EAAKgxN,YAEPhxN,EAAK21e,aAQHz1e,GAAUqze,GAAiBvze,EAAKmiO,OAClC7zC,EAAIzuL,kBAIJE,GAAeuuL,GAAK,EACtB,EAEIsnT,EAAa,KACb51e,EAAKmiO,QACPniO,EAAK61e,kBACP,EAEF/7H,GAASv5W,SAAU,YAAam1e,GAChC57H,GAASx5W,OAAQ,SAAUs1e,EAAYhB,GACvC96H,GAASx5W,OAAQ,SAAUs1e,EAAYhB,GACvCp5e,KAAK2+D,SAAW,KACd55D,SAASzE,oBAAoB,YAAa45e,GAC1Cp1e,OAAOxE,oBAAoB,SAAU85e,GACrCt1e,OAAOxE,oBAAoB,SAAU85e,GACjCvsd,GAAOA,EAAMvtB,oBAAoB,QAASi5e,EAAY,EAK5Dv5e,KAAKs6e,eAAiB,CACpB5nd,UAAWtpB,EAAMspB,UACjBo/R,SAAU1oT,EAAM0oT,UAElB1oT,EAAM0oT,UAAY,EAClB1oT,EAAMmxe,sBAAsB,WAAY/1e,EAAKs1H,SAC7Ct1H,EAAKsxK,MAAK,GACVmG,EAAS7kI,MAAQ,UACV6kI,EAASk3T,iBACTl3T,EAAS70K,QAChBk3W,GAASl1W,EAAO,WAAW,KACrB5E,EAAKqiH,UACPriH,EAAKqiH,SAAU,EACfriH,EAAKktR,WAAY,EACjBltR,EAAKg2e,eACP,IAEFh2e,EAAKi2e,sBACLj2e,EAAKk2e,eACLl2e,EAAKstL,OAAM,GACXttL,EAAK21e,aACL31e,EAAKg0e,SAAU,EACXpve,EAAMo4D,SACRh9D,EAAK+sO,UACInoO,EAAMuxe,SACfn2e,EAAKo2e,aAAY,GAEjBp2e,EAAKgtO,SAGPhtO,EAAKu8I,GAAG,SAAU/gJ,KAAKwvL,UACvB0hT,EAAW9ne,EAAO,cAAe,wBACjC5E,EAAKiyE,QAAQ,eAGY,IAArBwlG,EAAS+3T,SACXxve,EAAKwve,SAET,CAMA,YAAA6G,CAAazze,EAAU,GAAI+re,EAAY,IAErCnze,KAAK86e,WAAW1ze,GAGhByne,EAAUsE,GAAWqE,IACnBx3e,KAAK+6e,oBAAoBvD,EAAS,GAEtC,CAKA,cAAA0B,GACE,IAAI10e,EAAOxE,KACPs2e,EAAc9xe,EAAKy3K,SAASu4T,WAC5BiC,EAAiBjye,EAAKy3K,SAASy4T,mBAC/BsG,EAAY,CACd,SAAYlne,IACV,IAAI0je,EAAWzye,SAAS+3B,cAAc,OAGtC,OAFA06c,EAASjzT,UAAY,WACrBizT,EAASp6c,YAAYtpB,EAAK1M,SACnBowe,CAAQ,EAEjB,gBAAmB,CAAC1je,EAAM0jQ,IACjB,gCAAkCA,EAAO1jQ,EAAK2ie,IAAmB,SAE1E,OAAU,CAAC3ie,EAAM0jQ,IACR,QAAUA,EAAO1jQ,EAAKwie,IAAgB,SAE/C,KAAQ,CAACxie,EAAM0jQ,IACN,QAAUA,EAAO1jQ,EAAKwie,IAAgB,SAE/C,cAAiB,CAACxie,EAAM0jQ,IACf,mCAAqCA,EAAO1jQ,EAAK1K,OAAS,0BAEnE,WAAc,IACL,iDAET,QAAW,IACF,8BAET,YAAe,OACf,SAAY,IACH,eAGX5E,EAAKy3K,SAAStvF,OAAS3rF,OAAOC,OAAO,CAAC,EAAG+5e,EAAWx2e,EAAKy3K,SAAStvF,OACpE,CAMA,cAAAssZ,GACE,IAAIj1e,EAAK6kB,EACLyC,EAAY,CACd,WAAc,eACd,OAAU,WACV,SAAY,YACZ,YAAe,eACf,YAAe,eACf,MAAS,UACT,WAAc,cACd,cAAiB,iBACjB,aAAgB,gBAChB,aAAgB,mBAChB,gBAAmB,sBACnB,eAAkB,qBAClB,cAAiB,iBACjB,eAAkB,kBAClB,KAAQ,SACR,KAAQ,SACR,MAAS,UACT,KAAQ,UAEV,IAAKtnB,KAAOsnB,GACVzC,EAAK7oB,KAAKi8K,SAAS3wJ,EAAUtnB,MACrBhE,KAAK+gJ,GAAG/8I,EAAK6kB,EAEzB,CAMA,IAAAitJ,CAAKmlU,GAAe,GAClB,MAAMz2e,EAAOxE,KACPi8K,EAAWg/T,EAAe9E,GAAY3xe,EAAK4E,MAAO,CACtD4/G,UAAWxkH,EAAKy3K,SAASjzD,YACtBxkH,EAAKy3K,SACVz3K,EAAKq2e,aAAa5+T,EAAS70K,QAAS60K,EAASk3T,WAC7C3ue,EAAK84G,SAAS2+D,EAAS7kI,OAAS,IAAI,GAEpC5yC,EAAK02e,UAAY,IACnB,CAOA,OAAAn9b,GACE,IAAIv5C,EAAOxE,KACX,GAAIwE,EAAKq0e,YAAYvne,OAAS,EAG5B,OAFA9M,EAAK22e,wBACL32e,EAAKm9I,QAGHn9I,EAAKq/O,WAAar/O,EAAKmiO,OACzBniO,EAAKgxN,OAELhxN,EAAKm9I,OAET,CAMA,WAAAy5V,GAAe,CAOf,QAAA5rT,GACE8pB,EAAat5M,KAAKoJ,MAAO,SACzBkwM,EAAat5M,KAAKoJ,MAAO,SAC3B,CAMA,OAAAgiR,CAAQ/hR,GACN,IAAI7E,EAAOxE,KACPwE,EAAK+ze,eAAiB/ze,EAAK42H,SAC7B72H,GAAe8E,GAMZ7E,EAAKy3K,SAASm3T,SAKnB5yc,YAAW,KACT,IAAI66c,EAAa72e,EAAK+tR,aACtB,GAAK8oN,EAAWp0e,MAAMzC,EAAKy3K,SAASm3T,SAApC,CAGA,IAAIkI,EAAaD,EAAWr0e,OAAOG,MAAM3C,EAAKy3K,SAASm3T,SACvDvE,EAAUyM,GAAYC,IACP/F,GAAS+F,KAEhBv7e,KAAKoH,QAAQm0e,GACf/2e,EAAKg3e,QAAQD,GAEb/2e,EAAK63L,WAAWk/S,GAEpB,GAVF,CAWE,GACD,EACL,CAMA,UAAAxB,CAAW1we,GACT,IAAI7E,EAAOxE,KACX,IAAIwE,EAAK42H,SAAT,CAIA,IAAIqgX,EAAY93d,OAAOgjL,aAAat9L,EAAE4rL,SAAW5rL,EAAEmsK,OACnD,OAAIhxK,EAAKy3K,SAASxhK,QAAiC,UAAvBjW,EAAKy3K,SAAShqJ,MAAoBwpd,IAAcj3e,EAAKy3K,SAASjzD,WACxFxkH,EAAK63L,kBACL93L,GAAe8E,SAFjB,CAFA,CAFE9E,GAAe8E,EASnB,CAMA,SAAAywe,CAAUzwe,GACR,IAAI7E,EAAOxE,KAEX,GADAwE,EAAKi0e,aAAc,EACfj0e,EAAK42H,SACH/xH,EAAE4rL,UAAYg+S,IAChB1ue,GAAe8E,OAFnB,CAMA,OAAQA,EAAE4rL,SAER,KAAKu9S,GACH,GAAIuD,GAAU7C,GAAc7pe,IACM,IAA5B7E,EAAKuze,cAAc3ze,MAGrB,OAFAG,GAAe8E,QACf7E,EAAK+nd,YAIT,MAGF,KAAKmmB,GAMH,OALIlue,EAAKmiO,SACPpiO,GAAe8E,GAAG,GAClB7E,EAAKstL,cAEPttL,EAAK22e,mBAIP,KAAKrI,GACH,IAAKtue,EAAKmiO,QAAUniO,EAAKk0e,WACvBl0e,EAAK62B,YACA,GAAI72B,EAAKo0e,aAAc,CAC5B,IAAIvsb,EAAO7nD,EAAKk3e,YAAYl3e,EAAKo0e,aAAc,GAC3Cvsb,GAAM7nD,EAAKm3e,gBAAgBtvb,EACjC,CAEA,YADA9nD,GAAe8E,GAIjB,KAAKupe,GACH,GAAIpue,EAAKo0e,aAAc,CACrB,IAAIzqb,EAAO3pD,EAAKk3e,YAAYl3e,EAAKo0e,cAAe,GAC5Czqb,GAAM3pD,EAAKm3e,gBAAgBxtb,EACjC,CAEA,YADA5pD,GAAe8E,GAIjB,KAAKope,GAaH,YAZIjue,EAAKo3e,UAAUp3e,EAAKo0e,eACtBp0e,EAAKo1e,eAAevwe,EAAG7E,EAAKo0e,cAC5Br0e,GAAe8E,KAGN7E,EAAKy3K,SAASxhK,QAAUjW,EAAK63L,cAI7Bt3L,SAAS0wN,eAAiBjxN,EAAKuze,eAAiBvze,EAAKmiO,SAH9DpiO,GAAe8E,IASnB,KAAKspe,GAEH,YADAnue,EAAKq3e,kBAAkB,EAAGxye,GAI5B,KAAKwpe,GAEH,YADArue,EAAKq3e,iBAAiB,EAAGxye,GAI3B,KAAK4pe,GAaH,YAZIzue,EAAKy3K,SAAS83T,cACZvve,EAAKo3e,UAAUp3e,EAAKo0e,gBACtBp0e,EAAKo1e,eAAevwe,EAAG7E,EAAKo0e,cAI5Br0e,GAAe8E,IAEb7E,EAAKy3K,SAASxhK,QAAUjW,EAAK63L,cAC/B93L,GAAe8E,KAMrB,KAAK0pe,GACL,KAAKC,GAEH,YADAxue,EAAKs3e,gBAAgBzye,GAKrB7E,EAAK+ze,gBAAkBxC,GAAU7C,GAAc7pe,IACjD9E,GAAe8E,EA7FjB,CA+FF,CAMA,OAAA2we,CAAQ3we,GACN,GAAIrJ,KAAKo7H,SACP,OAEF,MAAMh3H,EAAQpE,KAAKuyR,aACfvyR,KAAK68F,YAAcz4F,IACvBpE,KAAK68F,UAAYz4F,EACJ,IAATA,GAIApE,KAAK+4e,gBACP9sZ,aAAajsF,KAAK+4e,gBAEpB/4e,KAAK+4e,eAAiB/sZ,IAAQ,KAC5BhsF,KAAK+4e,eAAiB,KACtB/4e,KAAK+7e,UAAU,GACd/7e,KAAKi8K,SAASi4T,kBATfl0e,KAAK+7e,WAUT,CACA,QAAAA,GACE,MAAM33e,EAAQpE,KAAK68F,UACf78F,KAAKi8K,SAAS56J,WAAWlgB,KAAKnB,KAAMoE,IACtCpE,KAAKihB,KAAK7c,GAEZpE,KAAKg8e,iBACLh8e,KAAKy2E,QAAQ,OAAQryE,EACvB,CAOA,aAAAu1e,CAAc7mT,EAAK/nK,GACb/qB,KAAKy4e,aACTz4e,KAAK27e,gBAAgB5wd,GAAQ,EAC/B,CAMA,OAAA44N,CAAQt6O,GACN,IAAI7E,EAAOxE,KACPi8e,EAAaz3e,EAAKq/O,UACtB,GAAIr/O,EAAK2tO,YAAc3tO,EAAKw+K,WAG1B,OAFAx+K,EAAKgxN,YACLjxN,GAAe8E,GAGb7E,EAAKkiP,cACTliP,EAAKq/O,WAAY,EACa,UAA1Br/O,EAAKy3K,SAAS+3T,SAAqBxve,EAAKwve,UACvCiI,GAAYz3e,EAAKiyE,QAAQ,SACzBjyE,EAAKq0e,YAAYvne,SACpB9M,EAAK21e,aACL31e,EAAKw3e,iBAAiBx3e,EAAKy3K,SAASu3T,cAEtChve,EAAKg2e,eACP,CAMA,MAAAP,CAAO5we,GACL,IAA4B,IAAxBtE,SAAS2jL,WAAb,CACA,IAAIlkL,EAAOxE,KACX,GAAKwE,EAAKq/O,UAAV,CACAr/O,EAAKq/O,WAAY,EACjBr/O,EAAKkiP,aAAc,EACnB,IAAI26O,EAAa,KACf78d,EAAKstL,QACLttL,EAAK03e,gBACL13e,EAAK23e,SAAS33e,EAAK4yC,MAAM9lC,QACzB9M,EAAKiyE,QAAQ,OAAO,EAElBjyE,EAAKy3K,SAASxhK,QAAUjW,EAAKy3K,SAASq3T,aACxC9ue,EAAK63L,WAAW,KAAMglS,GAEtBA,GAZyB,CAFc,CAgB3C,CAOA,cAAAuY,CAAe9mT,EAAK/nK,GAClB,IAAI3mB,EACFI,EAAOxE,KAGL+qB,EAAOhS,eAAiBgS,EAAOhS,cAAchS,QAAQ,qBAGrDgkB,EAAOirJ,UAAUjrK,SAAS,UAC5BvG,EAAK63L,WAAW,MAAM,KAChB73L,EAAKy3K,SAASmgU,kBAChB53e,EAAKstL,OACP,IAImB,qBADrB1tL,EAAQ2mB,EAAO+C,QAAQ1pB,SAErBI,EAAK02e,UAAY,KACjB12e,EAAKg3e,QAAQp3e,GACTI,EAAKy3K,SAASmgU,kBAChB53e,EAAKstL,SAEFttL,EAAKy3K,SAAS23T,cAAgB9gT,EAAIvmL,MAAQ,QAAQlF,KAAKyrL,EAAIvmL,OAC9D/H,EAAKm3e,gBAAgB5wd,IAI7B,CAMA,SAAA6wd,CAAU7wd,GACR,SAAI/qB,KAAK2mO,QAAU57M,GAAU/qB,KAAKi4e,iBAAiBlte,SAASggB,GAI9D,CAOA,YAAA8ud,CAAa/mT,EAAK3/I,GAChB,IAAI3uC,EAAOxE,KACX,OAAKwE,EAAK42H,UAAmC,UAAvB52H,EAAKy3K,SAAShqJ,OAClC1tB,GAAeuuL,GACftuL,EAAK03e,cAAc/oc,EAAM2/I,IAClB,EAGX,CAkBA,OAAAupT,CAAQj4e,GACN,QAAKpE,KAAKi8K,SAASh7J,OACfjhB,KAAK41e,eAAe3ve,eAAe7B,EAEzC,CAMA,IAAA6c,CAAK7c,GACH,MAAMI,EAAOxE,KACb,IAAKwE,EAAK63e,QAAQj4e,GAAQ,OAC1B8se,EAAW1se,EAAKs1H,QAASt1H,EAAKy3K,SAASm4T,cACvC5ve,EAAK83B,UACL,MAAMvwB,EAAWvH,EAAK83e,aAAanya,KAAK3lE,GACxCA,EAAKy3K,SAASh7J,KAAK9f,KAAKqD,EAAMJ,EAAO2H,EACvC,CAMA,YAAAuwe,CAAal1e,EAAS+re,GACpB,MAAM3ue,EAAOxE,KACbwE,EAAK83B,QAAU/qB,KAAKC,IAAIhN,EAAK83B,QAAU,EAAG,GAC1C93B,EAAK02e,UAAY,KACjB12e,EAAK+3e,oBACL/3e,EAAKq2e,aAAazze,EAAS+re,GAC3B3ue,EAAKw3e,eAAex3e,EAAKq/O,YAAcr/O,EAAK+ze,eACvC/ze,EAAK83B,SACRi1c,EAAc/se,EAAKs1H,QAASt1H,EAAKy3K,SAASm4T,cAE5C5ve,EAAKiyE,QAAQ,OAAQrvE,EAAS+re,EAChC,CACA,OAAAa,GACE,IAAIh+T,EAAYh2K,KAAK85H,QAAQk8C,UACzBA,EAAUjrK,SAAS,eACvBirK,EAAUv1K,IAAI,aACdT,KAAKihB,KAAK,IACZ,CAMA,eAAAu7d,CAAgBp4e,EAAQ,IACtB,IAAIgF,EAAQpJ,KAAK+3e,cACH3ue,EAAMhF,QAAUA,IAE5BgF,EAAMhF,MAAQA,EACdk1M,EAAalwM,EAAO,UACpBpJ,KAAK68F,UAAYz4F,EAErB,CASA,QAAAmmD,GACE,OAAIvqD,KAAKm4e,eAAiBn4e,KAAKoJ,MAAM4E,aAAa,YACzChO,KAAKo3C,MAEPp3C,KAAKo3C,MAAMlzC,KAAKlE,KAAKi8K,SAASjzD,UACvC,CAMA,QAAA1L,CAASl5G,EAAOq4e,GAEd5G,GAAgB71e,KADHy8e,EAAS,GAAK,CAAC,WACE,KAC5Bz8e,KAAKmT,MAAMspe,GACXz8e,KAAK08e,SAASt4e,EAAOq4e,EAAO,GAEhC,CAMA,WAAAE,CAAYv4e,GACI,IAAVA,IAAaA,EAAQ,MACzBpE,KAAKi8K,SAAS03T,SAAWvve,EACzBpE,KAAKw6e,cACP,CAMA,aAAA0B,CAAc/oc,EAAM9pC,GAClB,IACIvJ,EACAinB,EAAG61d,EAAO58d,EAAK68d,EACflmc,EAHAnyC,EAAOxE,KAIX,GAA2B,WAAvBwE,EAAKy3K,SAAShqJ,KAAlB,CAGA,IAAKkhB,EAKH,OAJA3uC,EAAK22e,wBACD32e,EAAKq/O,WACPr/O,EAAK21e,cAOT,GAAkB,WADlBr6e,EAAYuJ,GAAKA,EAAEkD,KAAK7G,gBACKqwe,GAAU,WAAY1se,IAAM7E,EAAKq0e,YAAYvne,OAAQ,CAShF,IARAqlC,EAAOnyC,EAAKs4e,iBACZF,EAAQp7e,MAAMwE,UAAU64B,QAAQ19B,KAAKqD,EAAKwze,QAAQ59W,SAAUzjF,KAC5D32B,EAAMxe,MAAMwE,UAAU64B,QAAQ19B,KAAKqD,EAAKwze,QAAQ59W,SAAUjnF,MAExD0pc,EAAOD,EACPA,EAAQ58d,EACRA,EAAM68d,GAEH91d,EAAI61d,EAAO71d,GAAK/G,EAAK+G,IACxBosB,EAAO3uC,EAAKwze,QAAQ59W,SAASrzG,IACW,IAApCviB,EAAKq0e,YAAYh6c,QAAQsU,IAC3B3uC,EAAKu4e,mBAAmB5pc,GAG5B5uC,GAAe8E,EACjB,KAAyB,UAAdvJ,GAAyBi2e,GAAU7C,GAAc7pe,IAAoB,YAAdvJ,GAA2Bi2e,GAAU,WAAY1se,GAC7G8pC,EAAK6iI,UAAUjrK,SAAS,UAC1BvG,EAAKw4e,iBAAiB7pc,GAEtB3uC,EAAKu4e,mBAAmB5pc,IAG1B3uC,EAAK22e,mBACL32e,EAAKu4e,mBAAmB5pc,IAI1B3uC,EAAK21e,aACA31e,EAAKq/O,WACRr/O,EAAKm9I,OA3CoC,CA6C7C,CAMA,kBAAAo7V,CAAmB5pc,GACjB,MAAM3uC,EAAOxE,KACPi9e,EAAcz4e,EAAKwze,QAAQ5/W,cAAc,gBAC3C6kX,GAAa1L,EAAc0L,EAAa,eAC5C/L,EAAW/9b,EAAM,sBACjB3uC,EAAKiyE,QAAQ,cAAetjC,IACW,GAAnC3uC,EAAKq0e,YAAYh6c,QAAQsU,IAC3B3uC,EAAKq0e,YAAY50e,KAAKkvC,EAE1B,CAMA,gBAAA6pc,CAAiB7pc,GACf,IAAIotC,EAAMvgF,KAAK64e,YAAYh6c,QAAQsU,GACnCnzC,KAAK64e,YAAYxgd,OAAOkoD,EAAK,GAC7BgxZ,EAAcp+b,EAAM,SACtB,CAMA,gBAAAgoc,GACE5J,EAAcvxe,KAAK64e,YAAa,UAChC74e,KAAK64e,YAAc,EACrB,CAOA,eAAA8C,CAAgB5wd,EAAQ+gL,GAAS,GAC3B/gL,IAAW/qB,KAAK44e,eAGpB54e,KAAKu8e,oBACAxxd,IACL/qB,KAAK44e,aAAe7td,EACpB+md,GAAQ9xe,KAAKk4e,WAAY,CACvB,wBAAyBntd,EAAOzhB,aAAa,QAE/Cwoe,GAAQ/md,EAAQ,CACd,gBAAiB,SAEnBmmd,EAAWnmd,EAAQ,UACf+gL,GAAQ9rM,KAAKk9e,eAAenyd,IAClC,CAMA,cAAAmyd,CAAenyd,EAAQ22b,GACrB,IAAK32b,EAAQ,OACb,MAAMxjB,EAAUvH,KAAKi4e,iBACfkF,EAAc51e,EAAQ4pD,aACtB85E,EAAY1jI,EAAQ0jI,WAAa,EACjCmyW,EAAcryd,EAAOy/G,aACrB5+G,EAAIb,EAAOmlC,wBAAwB55B,IAAM/uB,EAAQ2oD,wBAAwB55B,IAAM20G,EACjFr/G,EAAIwxd,EAAcD,EAAclyW,EAClCjrI,KAAK8rM,OAAOlgL,EAAIuxd,EAAcC,EAAa17B,GAClC91b,EAAIq/G,GACbjrI,KAAK8rM,OAAOlgL,EAAG81b,EAEnB,CAMA,MAAA51Q,CAAO7gE,EAAWy2U,GAChB,MAAMn6c,EAAUvH,KAAKi4e,iBACjBv2B,IACFn6c,EAAQwrB,MAAMsqd,eAAiB37B,GAEjCn6c,EAAQ0jI,UAAYA,EACpB1jI,EAAQwrB,MAAMsqd,eAAiB,EACjC,CAMA,iBAAAd,GACMv8e,KAAK44e,eACPrH,EAAcvxe,KAAK44e,aAAc,UACjC9G,GAAQ9xe,KAAK44e,aAAc,CACzB,gBAAiB,QAGrB54e,KAAK44e,aAAe,KACpB9G,GAAQ9xe,KAAKk4e,WAAY,CACvB,wBAAyB,MAE7B,CAKA,SAAA3rB,GACE,MAAM/nd,EAAOxE,KACb,GAA2B,WAAvBwE,EAAKy3K,SAAShqJ,KAAmB,OACrC,MAAM4md,EAAcr0e,EAAK84e,kBACpBzE,EAAYvne,SACjB9M,EAAK21e,aACL31e,EAAKstL,QACLttL,EAAKq0e,YAAcA,EACnBhK,EAAUgK,GAAa1lc,IACrB3uC,EAAKu4e,mBAAmB5pc,EAAK,IAEjC,CAMA,UAAAgnc,GACE,IAAI31e,EAAOxE,KACNwE,EAAKwze,QAAQjte,SAASvG,EAAKuze,iBAChCjG,GAAQtte,EAAKuze,cAAe,CAC1B1rQ,YAAa7nO,EAAKy3K,SAASowD,cAEzB7nO,EAAKq0e,YAAYvne,OAAS,IAAM9M,EAAKq/O,WAAar/O,EAAKy3K,SAASs5T,iBAAmB/we,EAAK4yC,MAAM9lC,OAAS,GACzG9M,EAAKg4e,kBACLh4e,EAAK+ze,eAAgB,IAEjB/ze,EAAKy3K,SAASs5T,iBAAmB/we,EAAK4yC,MAAM9lC,OAAS,GACvDwge,GAAQtte,EAAKuze,cAAe,CAC1B1rQ,YAAa,KAGjB7nO,EAAK+ze,eAAgB,GAEvB/ze,EAAKs1H,QAAQk8C,UAAU/Q,OAAO,eAAgBzgK,EAAK+ze,eACrD,CAKA,UAAAhmN,GACE,OAAOvyR,KAAK+3e,cAAc3ze,MAAM4C,MAClC,CAKA,KAAA26I,GACE,IAAIn9I,EAAOxE,KACPwE,EAAK2tO,YAAc3tO,EAAKw+K,aAC5Bx+K,EAAKkiP,aAAc,EACfliP,EAAKuze,cAAchnd,YACrBvsB,EAAKuze,cAAcp2V,QAEnBn9I,EAAK0ze,WAAWv2V,QAElBnhH,YAAW,KACTh8B,EAAKkiP,aAAc,EACnBliP,EAAKm/O,SAAS,GACb,GACL,CAMA,IAAAnuB,GACEx1N,KAAKk4e,WAAW1iR,OAChBx1N,KAAKi6e,QACP,CASA,gBAAA3K,CAAiB3qW,GACf,OAAO3kI,KAAKq4e,OAAO/I,iBAAiB3qW,EAAO3kI,KAAKu9e,mBAClD,CASA,gBAAAA,GACE,IAAIthU,EAAWj8K,KAAKi8K,SAChBv6K,EAAOu6K,EAAS44T,UAMpB,MALkC,kBAAvB54T,EAAS44T,YAClBnze,EAAO,CAAC,CACNopF,MAAOmxF,EAAS44T,aAGb,CACL56T,OAAQgC,EAAS8yF,YACjB8gO,YAAa5zT,EAAS64T,kBACtBpze,KAAMA,EACN6ue,QAASt0T,EAASs0T,QAEtB,CAOA,MAAA3vW,CAAO+D,GACL,IAAI7/G,EAAQ04d,EACRh5e,EAAOxE,KACPoH,EAAUpH,KAAKu9e,mBAGnB,GAAI/4e,EAAKy3K,SAAS0yT,OAEc,oBAD9B6O,EAAiBh5e,EAAKy3K,SAAS0yT,MAAMxte,KAAKqD,EAAMmgI,IAE9C,MAAM,IAAIl7H,MAAM,yEAsBpB,OAjBIk7H,IAAUngI,EAAK02e,WACjB12e,EAAK02e,UAAYv2W,EACjB7/G,EAAStgB,EAAK6ze,OAAOz3W,OAAO+D,EAAO3jI,OAAOC,OAAOmG,EAAS,CACxDune,MAAO6O,KAETh5e,EAAKm0e,eAAiB7zd,GAEtBA,EAAS9jB,OAAOC,OAAO,CAAC,EAAGuD,EAAKm0e,gBAI9Bn0e,EAAKy3K,SAAS23T,eAChB9ud,EAAOsyB,MAAQtyB,EAAOsyB,MAAMtvC,QAAOqrC,IACjC,IAAIsqc,EAASjI,GAASric,EAAKpe,IAC3B,QAAS0od,IAA0C,IAAhCj5e,EAAK4yC,MAAMvY,QAAQ4+c,GAAe,KAGlD34d,CACT,CAOA,cAAAk3d,CAAe0B,GAAkB,GAC/B,IAAI32d,EAAGkB,EAAGzH,EAAGH,EAAGm3d,EAAUrE,EAAWj8W,EAAMymX,EAAmBC,EAC1Dnje,EACJ,MAAMg3I,EAAS,CAAC,EACVosV,EAAe,GACrB,IAAIr5e,EAAOxE,KACP2kI,EAAQngI,EAAK+tR,aACjB,MAAMurN,EAAan5W,IAAUngI,EAAK02e,WAAsB,IAATv2W,GAAiC,MAAlBngI,EAAK02e,UACnE,IAAI54V,EAAU99I,EAAKo8H,OAAO+D,GACtBo5W,EAAgB,KAChBC,EAAgBx5e,EAAKy3K,SAASw3T,aAAc,EAC5CwE,EAAmBzze,EAAKyze,iBACxB6F,IACFC,EAAgBv5e,EAAKo0e,gBAEnBgF,EAAeG,EAAcjge,QAAQ,iBAKzCuC,EAAIiiI,EAAQlrG,MAAM9lC,OACsB,kBAA7B9M,EAAKy3K,SAASy3T,aACvBrzd,EAAI9O,KAAKyW,IAAI3H,EAAG7b,EAAKy3K,SAASy3T,aAE5Brzd,EAAI,IACN29d,GAAgB,GAIlB,MAAMC,EAAmB,CAACzG,EAAU7pZ,KAClC,IAAIuwZ,EAAgBzsV,EAAO+lV,GAC3B,QAAsB3xe,IAAlBq4e,EAA6B,CAC/B,IAAIC,EAAcN,EAAaK,GAC/B,QAAoBr4e,IAAhBs4e,EACF,MAAO,CAACD,EAAeC,EAAYvmT,SAEvC,CACA,IAAIwmT,EAAiBr5e,SAASw2L,yBAO9B,OANA2iT,EAAgBL,EAAavse,OAC7Buse,EAAa55e,KAAK,CAChB2zL,SAAUwmT,EACVzwZ,QACA6pZ,aAEK,CAAC0G,EAAeE,EAAe,EAIxC,IAAKr3d,EAAI,EAAGA,EAAI1G,EAAG0G,IAAK,CAEtB,IAAIosB,EAAOmvG,EAAQlrG,MAAMrwB,GACzB,IAAKosB,EAAM,SACX,IAAIkrc,EAAYlrc,EAAKpe,GACjBhK,EAASvmB,EAAK4C,QAAQi3e,GAC1B,QAAex4e,IAAXklB,EAAsB,SAC1B,IAAIuzd,EAAW7I,GAAS4I,GACpBE,EAAY/5e,EAAKgvI,UAAU8qW,GAAU,GAQzC,IALK95e,EAAKy3K,SAAS23T,cACjB2K,EAAUvoU,UAAU/Q,OAAO,WAAYzgK,EAAK4yC,MAAMlwC,SAASo3e,IAE7D9G,EAAWzsd,EAAOvmB,EAAKy3K,SAASq4T,gBAAkB,GAE7Crsd,EAAI,EAAGzH,GADZ2yd,EAAY3xe,MAAM4T,QAAQoie,GAAYA,EAAW,CAACA,KACrBrE,EAAU7he,OAAQ2W,EAAIzH,EAAGyH,IAAK,CACzDuvd,EAAWrE,EAAUlrd,GACrB,IAAI0lE,EAAQ5iE,EAAOmsd,OACfsH,EAAgBh6e,EAAK2ue,UAAUqE,QACb3xe,IAAlB24e,EACFhH,EAAW,GAEX7pZ,EAAQ6wZ,EAActH,OAExB,MAAOgH,EAAeE,GAAkBH,EAAiBzG,EAAU7pZ,GAG/D1lE,EAAI,IACNs2d,EAAYA,EAAUhkX,WAAU,GAChCu3W,GAAQyM,EAAW,CACjBxpd,GAAIhK,EAAO0zd,IAAM,UAAYx2d,EAC7B,gBAAiB,OAEnBs2d,EAAUvoU,UAAUv1K,IAAI,aACxB8we,EAAcgN,EAAW,UAGrB/5e,EAAKo0e,cAAgBp0e,EAAKo0e,aAAa9qd,QAAQ1pB,OAASi6e,GACtDT,GAAgBA,EAAa9vd,QAAQ4xG,QAAU83W,EAAShwe,aAC1Du2e,EAAgBQ,IAItBH,EAAehhd,YAAYmhd,GACX,IAAZ/G,IACF/lV,EAAO+lV,GAAY0G,EAEvB,CACF,CAGI15e,EAAKy3K,SAAS24T,mBAChBiJ,EAAan8e,MAAK,CAACsH,EAAG2R,IACb3R,EAAE2kF,MAAQhzE,EAAEgzE,QAKvBupC,EAAOnyH,SAASw2L,yBAChBszS,EAAUgP,GAAca,IACtB,IAAIN,EAAiBM,EAAY9mT,SAC7B4/S,EAAWkH,EAAYlH,SAC3B,IAAK4G,IAAmBA,EAAehkX,SAAS9oH,OAAQ,OACxD,IAAIqte,EAAgBn6e,EAAK2ue,UAAUqE,GACnC,QAAsB3xe,IAAlB84e,EAA6B,CAC/B,IAAIC,EAAgB75e,SAASw2L,yBACzBouE,EAASnlQ,EAAKmoF,OAAO,kBAAmBgyZ,GAC5C3kX,GAAO4kX,EAAej1O,GACtB3vI,GAAO4kX,EAAeR,GACtB,IAAIS,EAAar6e,EAAKmoF,OAAO,WAAY,CACvC+yC,MAAOi/W,EACPv3e,QAASw3e,IAEX5kX,GAAO9C,EAAM2nX,EACf,MACE7kX,GAAO9C,EAAMknX,EACf,IAEFnG,EAAiBvld,UAAY,GAC7BsnG,GAAOi+W,EAAkB/gX,GAGrB1yH,EAAKy3K,SAASg3D,YAChBs/P,GAAgB0F,GACZ31V,EAAQ3d,MAAMrzH,QAAUgxI,EAAQtxI,OAAOM,QACzCu9d,EAAUvsV,EAAQtxI,QAAQ8te,IACxB7rQ,GAAUglQ,EAAkB6G,EAAIv6X,MAAM,KAM5C,IAAIw6X,EAAexhP,IACjB,IAAIh2P,EAAU/C,EAAKmoF,OAAO4wK,EAAU,CAClCn0P,MAAOu7H,IAMT,OAJIp9H,IACFy2e,GAAgB,EAChB/F,EAAiBz+W,aAAajyH,EAAS0we,EAAiBp+W,aAEnDtyH,CAAO,EAwBhB,GApBI/C,EAAK83B,QACPyid,EAAa,WAGHv6e,EAAKy3K,SAAS56J,WAAWlgB,KAAKqD,EAAMmgI,GAIZ,IAAzB2d,EAAQlrG,MAAM9lC,QACvByte,EAAa,cAJbA,EAAa,gBAQfpB,EAAoBn5e,EAAKw6e,UAAUr6W,MAEjClqH,EAASske,EAAa,kBAIxBv6e,EAAKk0e,WAAap2V,EAAQlrG,MAAM9lC,OAAS,GAAKqse,EAC1CK,EAAe,CACjB,GAAI17V,EAAQlrG,MAAM9lC,OAAS,GAIzB,GAHKyse,GAAwC,WAAvBv5e,EAAKy3K,SAAShqJ,WAAsCpsB,GAAjBrB,EAAK4yC,MAAM,KAClE2mc,EAAgBv5e,EAAKgvI,UAAUhvI,EAAK4yC,MAAM,MAEvC6gc,EAAiBlte,SAASgze,GAAgB,CAC7C,IAAIkB,EAAe,EACfxke,IAAWjW,EAAKy3K,SAAS63T,gBAC3BmL,EAAe,GAEjBlB,EAAgBv5e,EAAK06e,aAAaD,EACpC,OACSxke,IACTsje,EAAgBtje,GAEdije,IAAoBl5e,EAAKmiO,SAC3BniO,EAAK62B,OACL72B,EAAK04e,eAAea,EAAe,SAErCv5e,EAAKm3e,gBAAgBoC,EACvB,MACEv5e,EAAK+3e,oBACDmB,GAAmBl5e,EAAKmiO,QAC1BniO,EAAKstL,OAAM,EAGjB,CAMA,UAAAotT,GACE,OAAOl/e,KAAKi4e,iBAAiBhqe,iBAAiB,oBAChD,CAaA,SAAAmpe,CAAUtje,EAAMqre,GAAe,GAC7B,MAAM36e,EAAOxE,KAIb,GAAIwB,MAAM4T,QAAQtB,GAEhB,OADAtP,EAAKs2e,WAAWhne,EAAMqre,IACf,EAET,MAAMn7e,EAAMwxe,GAAS1he,EAAKtP,EAAKy3K,SAASs4T,aACxC,OAAY,OAARvwe,IAAgBQ,EAAK4C,QAAQnB,eAAejC,KAGhD8P,EAAKoje,OAASpje,EAAKoje,UAAY1ye,EAAKmpF,MACpC75E,EAAK2qe,IAAMj6e,EAAK4ze,QAAU,QAAUtke,EAAKoje,OACzC1ye,EAAK4C,QAAQpD,GAAO8P,EACpBtP,EAAK02e,UAAY,KACbiE,IACF36e,EAAKs0e,YAAY90e,GAAOm7e,EACxB36e,EAAKiyE,QAAQ,aAAczyE,EAAK8P,IAE3B9P,EACT,CAMA,UAAA82e,CAAWhne,EAAMqre,GAAe,GAC9BtQ,EAAU/6d,GAAMsre,IACdp/e,KAAKo3e,UAAUgI,EAAKD,EAAa,GAErC,CAKA,cAAA37T,CAAe1vK,GACb,OAAO9T,KAAKo3e,UAAUtje,EACxB,CAOA,mBAAAine,CAAoBjne,GAClB,IAAI9P,EAAMwxe,GAAS1he,EAAK9T,KAAKi8K,SAAS04T,qBACtC,OAAY,OAAR3we,IACJ8P,EAAKoje,OAASpje,EAAKoje,UAAYl3e,KAAK2tF,MACpC3tF,KAAKmze,UAAUnve,GAAO8P,EACf9P,EACT,CAOA,cAAAq7e,CAAetqd,EAAIjhB,GACjB,IAAIwre,EACJxre,EAAK9T,KAAKi8K,SAAS04T,oBAAsB5/c,GACrCuqd,EAAYt/e,KAAK+6e,oBAAoBjne,KACvC9T,KAAKy2E,QAAQ,eAAgB6oa,EAAWxre,EAE5C,CAMA,iBAAAyre,CAAkBxqd,GACZ/0B,KAAKmze,UAAUlte,eAAe8uB,YACzB/0B,KAAKmze,UAAUp+c,GACtB/0B,KAAKkpF,aACLlpF,KAAKy2E,QAAQ,kBAAmB1hD,GAEpC,CAKA,iBAAAyqd,GACEx/e,KAAKmze,UAAY,CAAC,EAClBnze,KAAKkpF,aACLlpF,KAAKy2E,QAAQ,iBACf,CAQA,YAAAgpa,CAAar7e,EAAO0P,GAClB,MAAMtP,EAAOxE,KACb,IAAI0/e,EACAC,EACJ,MAAMC,EAAYpK,GAASpxe,GACrBy7e,EAAYrK,GAAS1he,EAAKtP,EAAKy3K,SAASs4T,aAG9C,GAAkB,OAAdqL,EAAoB,OACxB,MAAME,EAAWt7e,EAAK4C,QAAQw4e,GAC9B,QAAgB/5e,GAAZi6e,EAAuB,OAC3B,GAAyB,kBAAdD,EAAwB,MAAM,IAAIp2e,MAAM,oCACnD,MAAMshB,EAASvmB,EAAKgvI,UAAUosW,GACxBzsc,EAAO3uC,EAAK2lQ,QAAQy1O,GAU1B,GATA9re,EAAKoje,OAASpje,EAAKoje,QAAU4I,EAAS5I,cAC/B1ye,EAAK4C,QAAQw4e,GAIpBp7e,EAAKu7e,aAAaF,GAClBr7e,EAAK4C,QAAQy4e,GAAa/re,EAGtBiX,EAAQ,CACV,GAAIvmB,EAAKyze,iBAAiBlte,SAASggB,GAAS,CAC1C,MAAMi1d,EAAax7e,EAAK20e,QAAQ,SAAUrle,GAC1Ci+d,GAAYhnd,EAAQi1d,GAChBx7e,EAAKo0e,eAAiB7td,GACxBvmB,EAAKm3e,gBAAgBqE,EAEzB,CACAj1d,EAAO4sC,QACT,CAGIxkB,KAEkB,KADpBwsc,EAAan7e,EAAK4yC,MAAMvY,QAAQ+gd,KAE9Bp7e,EAAK4yC,MAAM/e,OAAOsnd,EAAY,EAAGE,GAEnCH,EAAWl7e,EAAK20e,QAAQ,OAAQrle,GAC5Bq/B,EAAK6iI,UAAUjrK,SAAS,WAAWmme,EAAWwO,EAAU,UAC5D3N,GAAY5+b,EAAMusc,IAIpBl7e,EAAK02e,UAAY,IACnB,CAMA,YAAA+E,CAAa77e,EAAOq4e,GAClB,MAAMj4e,EAAOxE,KACboE,EAAQqxe,GAASrxe,GACjBI,EAAKu7e,aAAa37e,UACXI,EAAKs0e,YAAY10e,UACjBI,EAAK4C,QAAQhD,GACpBI,EAAK02e,UAAY,KACjB12e,EAAKiyE,QAAQ,gBAAiBryE,GAC9BI,EAAK0ke,WAAW9ke,EAAOq4e,EACzB,CAKA,YAAAyD,CAAap4e,GACX,MAAMq4e,GAAer4e,GAAU9H,KAAKogf,aAAaj2a,KAAKnqE,MACtDA,KAAK41e,eAAiB,CAAC,EACvB51e,KAAK84e,YAAc,CAAC,EACpB94e,KAAKkpF,aACL,MAAMy2D,EAAW,CAAC,EAClBkvV,EAAU7ue,KAAKoH,SAAS,CAAC2jB,EAAQ/mB,KAC3Bm8e,EAAYp1d,EAAQ/mB,KACtB27I,EAAS37I,GAAO+mB,EAClB,IAEF/qB,KAAKoH,QAAUpH,KAAKq4e,OAAOjhc,MAAQuoG,EACnC3/I,KAAKk7e,UAAY,KACjBl7e,KAAKy2E,QAAQ,eACf,CAOA,WAAA2pa,CAAYr1d,EAAQ3mB,GAClB,OAAIpE,KAAKo3C,MAAMvY,QAAQz6B,IAAU,CAInC,CAOA,SAAAovI,CAAUpvI,EAAOqW,GAAS,GACxB,MAAMgje,EAASjI,GAASpxe,GACxB,GAAe,OAAXq5e,EAAiB,OAAO,KAC5B,MAAM1yd,EAAS/qB,KAAKoH,QAAQq2e,GAC5B,QAAc53e,GAAVklB,EAAqB,CACvB,GAAIA,EAAOs1d,KACT,OAAOt1d,EAAOs1d,KAEhB,GAAI5le,EACF,OAAOza,KAAKm5e,QAAQ,SAAUpud,EAElC,CACA,OAAO,IACT,CAOA,WAAA2wd,CAAY3wd,EAAQmoC,EAAW3mD,EAAO,UACpC,IACEutD,EADEt1D,EAAOxE,KAEX,IAAK+qB,EACH,OAAO,KAGP+uC,EADU,QAARvtD,EACI/H,EAAK84e,kBAEL94e,EAAKyze,iBAAiBhqe,iBAAiB,qBAE/C,IAAK,IAAI8Y,EAAI,EAAGA,EAAI+yC,EAAIxoD,OAAQyV,IAC9B,GAAI+yC,EAAI/yC,IAAMgE,EAGd,OAAImoC,EAAY,EACP4G,EAAI/yC,EAAI,GAEV+yC,EAAI/yC,EAAI,GAEjB,OAAO,IACT,CAOA,OAAAojP,CAAQh3N,GACN,GAAmB,iBAARA,EACT,OAAOA,EAET,IAAI/uC,EAAQoxe,GAASric,GACrB,OAAiB,OAAV/uC,EAAiBpE,KAAKg4e,QAAQ5/W,cAAc,gBAAgB89W,GAAW9xe,QAAc,IAC9F,CAOA,QAAAs4e,CAASh6e,EAAQ+5e,GACf,IAAIj4e,EAAOxE,KACPo3C,EAAQ51C,MAAM4T,QAAQ1S,GAAUA,EAAS,CAACA,GAE9C,MAAM49e,GADNlpc,EAAQA,EAAMtvC,QAAOkkB,IAAgC,IAA3BxnB,EAAK4yC,MAAMvY,QAAQ7S,MACrBorB,EAAM9lC,OAAS,GACvC8lC,EAAM70C,SAAQ4wC,IACZ3uC,EAAK66a,UAAYlsY,IAASmtc,EAC1B97e,EAAKg3e,QAAQroc,EAAMspc,EAAO,GAE9B,CAOA,OAAAjB,CAAQp3e,EAAOq4e,GAEb5G,GAAgB71e,KADHy8e,EAAS,GAAK,CAAC,SAAU,mBACR,KAC5B,IAAItpc,EAAMotc,EACV,MAAM/7e,EAAOxE,KACP8mM,EAAYtiM,EAAKy3K,SAAShqJ,KAC1Bwrd,EAASjI,GAASpxe,GACxB,KAAIq5e,IAA0C,IAAhCj5e,EAAK4yC,MAAMvY,QAAQ4+c,KACb,WAAd32S,GACFtiM,EAAKstL,QAEW,WAAdgV,GAA2BtiM,EAAKy3K,SAAS43T,cAIhC,OAAX4J,GAAoBj5e,EAAK4C,QAAQnB,eAAew3e,KAClC,WAAd32S,GAAwBtiM,EAAK2O,MAAMspe,GACrB,UAAd31S,IAAyBtiM,EAAKg8e,UAAlC,CASA,GARArtc,EAAO3uC,EAAK20e,QAAQ,OAAQ30e,EAAK4C,QAAQq2e,IACrCj5e,EAAKwze,QAAQjte,SAASooC,KAExBA,EAAOA,EAAKonF,WAAU,IAExBgmX,EAAU/7e,EAAKg8e,SACfh8e,EAAK4yC,MAAM/e,OAAO7zB,EAAKmwY,SAAU,EAAG8oG,GACpCj5e,EAAKq0d,cAAc1lb,GACf3uC,EAAKg0e,QAAS,CAEhB,IAAKh0e,EAAK66a,WAAa76a,EAAKy3K,SAAS23T,aAAc,CACjD,IAAI7od,EAASvmB,EAAKgvI,UAAUiqW,GACxBpxb,EAAO7nD,EAAKk3e,YAAY3wd,EAAQ,GAChCshC,GACF7nD,EAAKm3e,gBAAgBtvb,EAEzB,CAIK7nD,EAAK66a,WAAc76a,EAAKy3K,SAASmgU,kBACpC53e,EAAKw3e,eAAex3e,EAAKq/O,WAA2B,WAAd/8C,GAIF,GAAlCtiM,EAAKy3K,SAASmgU,kBAA6B53e,EAAKg8e,SAClDh8e,EAAKstL,QACKttL,EAAK66a,WACf76a,EAAK61e,mBAEP71e,EAAKiyE,QAAQ,WAAYgna,EAAQtqc,GAC5B3uC,EAAK66a,WACR76a,EAAKi2e,oBAAoB,CACvBgC,OAAQA,GAGd,GACKj4e,EAAK66a,YAAckhE,GAAW/7e,EAAKg8e,YACtCh8e,EAAK21e,aACL31e,EAAKg2e,eAxC2C,CAyClD,GAEJ,CAOA,UAAAtR,CAAW/1b,EAAO,KAAMspc,GACtB,MAAMj4e,EAAOxE,KAEb,KADAmzC,EAAO3uC,EAAK2lQ,QAAQh3N,IACT,OACX,IAAIpsB,EAAGw5D,EACP,MAAMn8E,EAAQ+uC,EAAKrlB,QAAQ1pB,MAC3B2iB,EAAI05K,EAAUttJ,GACdA,EAAKwkB,SACDxkB,EAAK6iI,UAAUjrK,SAAS,YAC1Bw1E,EAAM/7E,EAAKq0e,YAAYh6c,QAAQsU,GAC/B3uC,EAAKq0e,YAAYxgd,OAAOkoD,EAAK,GAC7BgxZ,EAAcp+b,EAAM,WAEtB3uC,EAAK4yC,MAAM/e,OAAOtR,EAAG,GACrBviB,EAAK02e,UAAY,MACZ12e,EAAKy3K,SAASo3T,SAAW7ue,EAAKs0e,YAAY7ye,eAAe7B,IAC5DI,EAAKy7e,aAAa77e,EAAOq4e,GAEvB11d,EAAIviB,EAAKmwY,UACXnwY,EAAK23e,SAAS33e,EAAKmwY,SAAW,GAEhCnwY,EAAKi2e,oBAAoB,CACvBgC,OAAQA,IAEVj4e,EAAKg2e,eACLh2e,EAAK61e,mBACL71e,EAAKiyE,QAAQ,cAAeryE,EAAO+uC,EACrC,CAWA,UAAAkpJ,CAAWjzL,EAAQ,KAAM2C,EAAW,QAET,IAArByO,UAAUlJ,SACZvF,EAAWyO,UAAU,IAEA,mBAAZzO,IACTA,EAAW,QAEb,IAEIs9I,EAFA7kJ,EAAOxE,KACP4lG,EAAQphG,EAAKmwY,SAGjB,GADAvrY,EAAQA,GAAS5E,EAAK+tR,cACjB/tR,EAAKw6e,UAAU51e,GAElB,OADA2C,KACO,EAETvH,EAAKwnS,OACL,IAAIy0M,GAAU,EACVhme,EAAS3G,IAEX,GADAtP,EAAKk8e,UACA5se,GAAwB,kBAATA,EAAmB,OAAO/H,IAC9C,IAAI3H,EAAQoxe,GAAS1he,EAAKtP,EAAKy3K,SAASs4T,aACxC,GAAqB,kBAAVnwe,EACT,OAAO2H,IAETvH,EAAKg4e,kBACLh4e,EAAK4ye,UAAUtje,GAAM,GACrBtP,EAAK23e,SAASv2Y,GACdphG,EAAKg3e,QAAQp3e,GACb2H,EAAS+H,GACT2se,GAAU,CAAI,EAahB,OAVEp3V,EADkC,oBAAzB7kJ,EAAKy3K,SAASxhK,OACdjW,EAAKy3K,SAASxhK,OAAOtZ,KAAKnB,KAAMoJ,EAAOqR,GAEvC,CACP,CAACjW,EAAKy3K,SAASu4T,YAAapre,EAC5B,CAAC5E,EAAKy3K,SAASs4T,YAAanre,GAG3Bq3e,GACHhme,EAAO4uI,IAEF,CACT,CAKA,YAAAqxV,GACE,IAAIl2e,EAAOxE,KACXwE,EAAK02e,UAAY,KACb12e,EAAKg0e,SACPh0e,EAAKk4e,SAASl4e,EAAK4yC,OAErB5yC,EAAKi2e,sBACLj2e,EAAKg2e,cACP,CAMA,YAAAA,GACE,MAAMh2e,EAAOxE,KACbwE,EAAKm8e,uBACL,MAAMH,EAASh8e,EAAKg8e,SACdplX,EAAW52H,EAAK42H,SACtB52H,EAAKs1H,QAAQk8C,UAAU/Q,OAAO,MAAOzgK,EAAKiuD,KAC1C,MAAMmub,EAAiBp8e,EAAKs1H,QAAQk8C,UACpC4qU,EAAe37U,OAAO,QAASzgK,EAAKq/O,WACpC+8P,EAAe37U,OAAO,WAAYzgK,EAAK2tO,YACvCyuQ,EAAe37U,OAAO,WAAYzgK,EAAKw+K,YACvC49T,EAAe37U,OAAO,WAAYzgK,EAAK8ze,YACvCsI,EAAe37U,OAAO,WAAYzgK,EAAKqiH,SACvC+5X,EAAe37U,OAAO,SAAU7pC,GAChCwlX,EAAe37U,OAAO,OAAQu7U,GAC9BI,EAAe37U,OAAO,eAAgBzgK,EAAKq/O,YAAcr/O,EAAK+ze,eAC9DqI,EAAe37U,OAAO,kBAAmBzgK,EAAKmiO,QAC9Ci6Q,EAAe37U,OAAO,cAAe0sU,EAAcnte,EAAK4C,UACxDw5e,EAAe37U,OAAO,YAAazgK,EAAK4yC,MAAM9lC,OAAS,EACzD,CAUA,oBAAAqve,GACE,IAAIn8e,EAAOxE,KACNwE,EAAK4E,MAAMy3e,WAGhBr8e,EAAKqiH,QAAUriH,EAAK4E,MAAMy3e,SAAS5xc,MACnCzqC,EAAKktR,WAAaltR,EAAKqiH,QACzB,CAQA,MAAA25X,GACE,OAAkC,OAA3Bxgf,KAAKi8K,SAAS03T,UAAqB3ze,KAAKo3C,MAAM9lC,QAAUtR,KAAKi8K,SAAS03T,QAC/E,CAOA,mBAAA8G,CAAoB/yd,EAAO,CAAC,GAC1B,MAAMljB,EAAOxE,KACb,IAAI+qB,EAAQ8C,EACZ,MAAMizd,EAAet8e,EAAK4E,MAAMgvH,cAAc,oBAC9C,GAAI5zH,EAAK2ze,cAAe,CACtB,MAAMx4V,EAAW,GACXohW,EAAev8e,EAAK4E,MAAM6E,iBAAiB,kBAAkBqD,OACnE,SAAS0ve,EAAYzC,EAAWn6e,EAAOypB,GAiBrC,OAhBK0wd,IACHA,EAAYpoO,EAAO,kBAAoBu/N,GAAYtxe,GAAS,KAAOsxe,GAAY7nd,GAAS,cAKtF0wd,GAAauC,GACft8e,EAAK4E,MAAM4wH,OAAOukX,GAEpB5+V,EAAS17I,KAAKs6e,IAIVA,GAAauC,GAAgBC,EAAe,KAC9CxC,EAAU5+V,UAAW,GAEhB4+V,CACT,CAGA/5e,EAAK4E,MAAM6E,iBAAiB,kBAAkB1L,SAAQg8e,IACpDA,EAAU5+V,UAAW,CAAK,IAIH,GAArBn7I,EAAK4yC,MAAM9lC,QAAqC,UAAtB9M,EAAKy3K,SAAShqJ,KAC1C+ud,EAAYF,EAAc,GAAI,IAI9Bt8e,EAAK4yC,MAAM70C,SAAQ6B,IACjB2mB,EAASvmB,EAAK4C,QAAQhD,GACtBypB,EAAQ9C,EAAOvmB,EAAKy3K,SAASu4T,aAAe,GACxC70V,EAASz4I,SAAS6jB,EAAOusd,SAE3B0J,EADkBx8e,EAAK4E,MAAMgvH,cAAc,iBAAiB89W,GAAW9xe,sBAChDA,EAAOypB,GAE9B9C,EAAOusd,QAAU0J,EAAYj2d,EAAOusd,QAASlze,EAAOypB,EACtD,GAGN,MACErpB,EAAK4E,MAAMhF,MAAQI,EAAK+lD,WAEtB/lD,EAAKg0e,UACF9wd,EAAK+0d,QACRj4e,EAAKiyE,QAAQ,SAAUjyE,EAAK+lD,YAGlC,CAMA,IAAAlvB,GACE,IAAI72B,EAAOxE,KACPwE,EAAK42H,UAAY52H,EAAKmiO,QAAiC,UAAvBniO,EAAKy3K,SAAShqJ,MAAoBztB,EAAKg8e,WAC3Eh8e,EAAKmiO,QAAS,EACdmrQ,GAAQtte,EAAK0ze,WAAY,CACvB,gBAAiB,SAEnB1ze,EAAKg2e,eACLvJ,EAASzse,EAAKgiR,SAAU,CACtBwkC,WAAY,SACZ3+R,QAAS,UAEX7nB,EAAK61e,mBACLpJ,EAASzse,EAAKgiR,SAAU,CACtBwkC,WAAY,UACZ3+R,QAAS,UAEX7nB,EAAKm9I,QACLn9I,EAAKiyE,QAAQ,gBAAiBjyE,EAAKgiR,UACrC,CAKA,KAAA10F,CAAM0qT,GAAkB,GACtB,IAAIh4e,EAAOxE,KACPy2E,EAAUjyE,EAAKmiO,OACf61Q,IAEFh4e,EAAKg4e,kBACsB,WAAvBh4e,EAAKy3K,SAAShqJ,MAAqBztB,EAAK4yC,MAAM9lC,QAChD9M,EAAK21e,cAGT31e,EAAKmiO,QAAS,EACdmrQ,GAAQtte,EAAK0ze,WAAY,CACvB,gBAAiB,UAEnBjH,EAASzse,EAAKgiR,SAAU,CACtBn6P,QAAS,SAEP7nB,EAAKy3K,SAAS23T,cAChBpve,EAAK+3e,oBAEP/3e,EAAKg2e,eACD/ja,GAASjyE,EAAKiyE,QAAQ,iBAAkBjyE,EAAKgiR,SACnD,CAOA,gBAAA6zN,GACE,GAAqC,SAAjCr6e,KAAKi8K,SAASm5T,eAAlB,CAGA,IAAItre,EAAU9J,KAAKg4e,QACf7zb,EAAOr6C,EAAQomD,wBACf55B,EAAMxsB,EAAQ0gI,aAAermF,EAAK7tB,IAAMxxB,OAAO22X,QAC/C95X,EAAOwiD,EAAKxiD,KAAOmD,OAAO02X,QAC9By1G,EAASjxe,KAAKwmR,SAAU,CACtB11P,MAAOqzB,EAAKrzB,MAAQ,KACpBwF,IAAKA,EAAM,KACX30B,KAAMA,EAAO,MARf,CAUF,CAOA,KAAAwR,CAAMspe,GACJ,IAAIj4e,EAAOxE,KACX,GAAKwE,EAAK4yC,MAAM9lC,OAAhB,CACA,IAAI8lC,EAAQ5yC,EAAK84e,kBACjBzO,EAAUz3b,GAAOjE,IACf3uC,EAAK0ke,WAAW/1b,GAAM,EAAK,IAE7B3uC,EAAK21e,aACAsC,GAAQj4e,EAAKi2e,sBAClBj2e,EAAKiyE,QAAQ,QAPiB,CAQhC,CAOA,aAAAoiZ,CAAc7ma,GACZ,MAAMxtD,EAAOxE,KACP4lG,EAAQphG,EAAKmwY,SACbjwY,EAASF,EAAKwze,QACpBtze,EAAO80H,aAAaxnE,EAAIttD,EAAO01H,SAASx0B,IAAU,MAClDphG,EAAK23e,SAASv2Y,EAAQ,EACxB,CAMA,eAAAk2Y,CAAgBzye,GACd,IAAI6pD,EAAWmjF,EAAWzwC,EAAOy2C,EAC7B73I,EAAOxE,KACXkzD,EAAY7pD,GAAKA,EAAE4rL,UAAY89S,IAAiB,EAAI,EACpD18V,EAAYk4B,GAAa/pK,EAAKuze,eAG9B,MAAMkJ,EAAW,GACjB,GAAIz8e,EAAKq0e,YAAYvne,OACnB+qI,EAAOq1V,EAAQlte,EAAKq0e,YAAa3lb,GACjC0yC,EAAQ66F,EAAUpkD,GACdnpF,EAAY,GACd0yC,IAEFipY,EAAUrqe,EAAKq0e,aAAa1lc,GAAQ8tc,EAASh9e,KAAKkvC,UAC7C,IAAK3uC,EAAKq/O,WAAoC,WAAvBr/O,EAAKy3K,SAAShqJ,OAAsBztB,EAAK4yC,MAAM9lC,OAAQ,CACnF,MAAM8lC,EAAQ5yC,EAAK84e,kBACnB,IAAI4D,EACAhub,EAAY,GAAyB,IAApBmjF,EAAUh0I,OAAoC,IAArBg0I,EAAU/kI,OACtD4ve,EAAU9pc,EAAM5yC,EAAKmwY,SAAW,GACvBzhV,EAAY,GAAKmjF,EAAUh0I,QAAUmC,EAAK+tR,aAAajhR,SAChE4ve,EAAU9pc,EAAM5yC,EAAKmwY,gBAEP9uY,IAAZq7e,GACFD,EAASh9e,KAAKi9e,EAElB,CACA,IAAK18e,EAAK28e,aAAaF,EAAU53e,GAC/B,OAAO,EAQT,IANA9E,GAAe8E,GAAG,GAGG,qBAAVu8F,GACTphG,EAAK23e,SAASv2Y,GAETq7Y,EAAS3ve,QACd9M,EAAK0ke,WAAW+X,EAAS/pb,OAK3B,OAHA1yD,EAAK21e,aACL31e,EAAK61e,mBACL71e,EAAKw3e,gBAAe,IACb,CACT,CAKA,YAAAmF,CAAa/pc,EAAO07I,GAClB,MAAMpwL,EAAS00C,EAAMv0C,KAAIswC,GAAQA,EAAKrlB,QAAQ1pB,QAG9C,SAAK1B,EAAO4O,QAA4C,oBAA3BtR,KAAKi8K,SAASmlU,WAAmE,IAAxCphf,KAAKi8K,SAASmlU,SAAS1+e,EAAQowL,GAIvG,CASA,gBAAA+oT,CAAiB3ob,EAAW7pD,GAC1B,IAAI4ze,EACFpxU,EACArnK,EAAOxE,KACLwE,EAAKiuD,MAAKS,IAAc,GACxB1uD,EAAK+tR,aAAajhR,SAGlByke,GAAU7C,GAAc7pe,IAAM0se,GAAU,WAAY1se,IAMlDwiK,GALJoxU,EAAcz4e,EAAKs4e,cAAc5pb,IAE1B+pb,EAAYjnU,UAAUjrK,SAAS,UAGvBvG,EAAKk3e,YAAYuB,EAAa/pb,EAAW,QAFzC+pb,EAMJ/pb,EAAY,EACV1uD,EAAKuze,cAAcsJ,mBAEnB78e,EAAKuze,cAAclG,0BAG1BhmU,EAASmK,UAAUjrK,SAAS,WAC9BvG,EAAKw4e,iBAAiBC,GAExBz4e,EAAKu4e,mBAAmBlxU,IAK1BrnK,EAAK67Y,UAAUntV,GAEnB,CACA,SAAAmtV,CAAUntV,GAAY,CAMtB,aAAA4pb,CAAc5pb,GACZ,IAAI+pb,EAAcj9e,KAAKg4e,QAAQ5/W,cAAc,gBAC7C,GAAI6kX,EACF,OAAOA,EAET,IAAIn4d,EAAS9kB,KAAKg4e,QAAQ/pe,iBAAiB,WAC3C,OAAI6W,EACK4sd,EAAQ5sd,EAAQouC,QADzB,CAGF,CAUA,QAAAipb,CAASmF,GACPthf,KAAK20Y,SAAW30Y,KAAKo3C,MAAM9lC,MAC7B,CAMA,eAAAgse,GACE,OAAO97e,MAAMC,KAAKzB,KAAKg4e,QAAQ/pe,iBAAiB,kBAClD,CAMA,IAAA+9R,GACEhsS,KAAKuhf,WAAU,EACjB,CAKA,MAAAb,GACE1gf,KAAKuhf,WAAU,EACjB,CAKA,SAAAA,CAAUv1M,EAAOhsS,KAAKgjL,YAAchjL,KAAKmyO,YACvCnyO,KAAKo7H,SAAW4wK,EAChBhsS,KAAKw6e,cACP,CAMA,OAAAjpQ,GACEvxO,KAAKwhf,aAAY,GACjBxhf,KAAK8xL,OACP,CAMA,MAAA0/C,GACExxO,KAAKwhf,aAAY,EACnB,CACA,WAAAA,CAAYhgb,GACVxhE,KAAKk4e,WAAWpmL,SAAWtwP,GAAY,EAAIxhE,KAAK8xT,SAChD9xT,KAAKmyO,WAAa3wK,EAClBxhE,KAAKoJ,MAAMo4D,SAAWA,EACtBxhE,KAAK+3e,cAAcv2a,SAAWA,EAC9BxhE,KAAKuhf,WACP,CACA,WAAA3G,CAAY53T,GACVhjL,KAAKgjL,WAAaA,EAClBhjL,KAAKoJ,MAAMuxe,SAAW33T,EACtBhjL,KAAK+3e,cAAc4C,SAAW33T,EAC9BhjL,KAAKuhf,WACP,CAOA,OAAAhvd,GACE,IAAI/tB,EAAOxE,KACPs6e,EAAiB91e,EAAK81e,eAC1B91e,EAAKiyE,QAAQ,WACbjyE,EAAKs3K,MACLt3K,EAAKs1H,QAAQniE,SACbnzD,EAAKgiR,SAAS7uN,SACdnzD,EAAK4E,MAAMspB,UAAY4nd,EAAe5nd,UACtCluB,EAAK4E,MAAM0oT,SAAWwoL,EAAexoL,SACrCy/K,EAAc/se,EAAK4E,MAAO,cAAe,wBACzC5E,EAAKm6D,kBACEn6D,EAAK4E,MAAM4ve,SACpB,CAOA,MAAArsZ,CAAO80Z,EAAc3te,GACnB,IAAIihB,EAAImiG,EACR,MAAM1yH,EAAOxE,KACb,GAAkD,oBAAvCA,KAAKi8K,SAAStvF,OAAO80Z,GAC9B,OAAO,KAKT,KADAvqX,EAAO1yH,EAAKy3K,SAAStvF,OAAO80Z,GAActgf,KAAKnB,KAAM8T,EAAM4he,KAEzD,OAAO,KA0BT,GAxBAx+W,EAAOi/I,EAAOj/I,GAGO,WAAjBuqX,GAA8C,kBAAjBA,EAC3B3te,EAAKtP,EAAKy3K,SAASw4T,eACrB3C,GAAQ56W,EAAM,CACZ,gBAAiB,SAGnB46W,GAAQ56W,EAAM,CACZ,kBAAmB,KAGG,aAAjBuqX,IACT1sd,EAAKjhB,EAAK4rH,MAAMl7H,EAAKy3K,SAAS04T,oBAC9B7C,GAAQ56W,EAAM,CACZ,aAAcniG,IAEZjhB,EAAK4rH,MAAMl7H,EAAKy3K,SAASw4T,gBAC3B3C,GAAQ56W,EAAM,CACZ,gBAAiB,MAIF,WAAjBuqX,GAA8C,SAAjBA,EAAyB,CACxD,MAAMr9e,EAAQqxe,GAAS3he,EAAKtP,EAAKy3K,SAASs4T,aAC1CzC,GAAQ56W,EAAM,CACZ,aAAc9yH,IAIK,SAAjBq9e,GACFvQ,EAAWh6W,EAAM1yH,EAAKy3K,SAASq3D,WAC/Bw+P,GAAQ56W,EAAM,CACZ,eAAgB,OAGlBg6W,EAAWh6W,EAAM1yH,EAAKy3K,SAASk5T,aAC/BrD,GAAQ56W,EAAM,CACZ+uH,KAAM,SACNlxN,GAAIjhB,EAAK2qe,MAIX3qe,EAAKuse,KAAOnpX,EACZ1yH,EAAK4C,QAAQhD,GAAS0P,EAE1B,CACA,OAAOojH,CACT,CAMA,OAAAiiX,CAAQsI,EAAc3te,GACpB,MAAMojH,EAAOl3H,KAAK2sF,OAAO80Z,EAAc3te,GACvC,GAAY,MAARojH,EACF,KAAM,uBAER,OAAOA,CACT,CAQA,UAAAhuC,GACE2lZ,EAAU7ue,KAAKoH,SAAS2jB,IAClBA,EAAOs1d,OACTt1d,EAAOs1d,KAAK1ob,gBACL5sC,EAAOs1d,KAChB,GAEJ,CAMA,YAAAN,CAAa37e,GACX,MAAMm6e,EAAYv+e,KAAKwzI,UAAUpvI,GAC7Bm6e,GAAWA,EAAU5mb,QAC3B,CAOA,SAAAqnb,CAAU51e,GACR,OAAOpJ,KAAKi8K,SAASxhK,QAAUrR,EAAMkI,OAAS,GAAKtR,KAAKi8K,SAASs3T,aAAapye,KAAKnB,KAAMoJ,EAC3F,CASA,IAAAm9E,CAAKm7Z,EAAMr3e,EAAQs3e,GACjB,IAAIn9e,EAAOxE,KACP4hf,EAAcp9e,EAAK6F,GACvB7F,EAAK6F,GAAU,WACb,IAAIya,EAAQ+8d,EAKZ,MAJa,UAATH,IACF58d,EAAS88d,EAAY7hd,MAAMv7B,EAAMgW,YAEnCqne,EAAaF,EAAO5hd,MAAMv7B,EAAMgW,WACnB,YAATkne,EACKG,GAEI,WAATH,IACF58d,EAAS88d,EAAY7hd,MAAMv7B,EAAMgW,YAE5BsK,EACT,CACF,EAkBF,SAASg9d,KACPxjI,GAASt+W,KAAKoJ,MAAO,UAAU,KAC7BpJ,KAAK81K,MAAM,GAEf,CAiBA,SAASisU,GAAkBjJ,GACzB,IAAIt0e,EAAOxE,KACPgif,EAAsBx9e,EAAKo1e,eAC/Bp1e,EAAKy3K,SAAS23T,cAAe,EAC7B,MAAMqO,EAAYjhf,OAAOC,OAAO,CAE9BsjL,UAAW,qBAEX29T,uBAAmBr8e,EACnBs8e,yBAAqBt8e,GACpBize,GACH,IAAIsJ,EAAgB,SAAuBvmM,EAAUwmM,GAC/CA,GACFxmM,EAASz2D,SAAU,EACf68P,EAAUE,qBACZtmM,EAAS7lI,UAAUr+G,UAAUsqb,EAAUE,qBAErCF,EAAUC,mBACZrmM,EAAS7lI,UAAUv1K,OAAOwhf,EAAUC,qBAGtCrmM,EAASz2D,SAAU,EACf68P,EAAUC,mBACZrmM,EAAS7lI,UAAUr+G,UAAUsqb,EAAUC,mBAErCD,EAAUE,qBACZtmM,EAAS7lI,UAAUv1K,OAAOwhf,EAAUE,qBAG1C,EAGIG,EAAiB,SAAwBv3d,GAC3CyV,YAAW,KACT,IAAIq7Q,EAAW9wR,EAAOqtG,cAAc,SAAW6pX,EAAU19T,WACrDs3H,aAAoB0mM,kBACtBH,EAAcvmM,EAAU9wR,EAAOirJ,UAAUjrK,SAAS,YACpD,GACC,EACL,EAGAvG,EAAK+hF,KAAK,QAAS,kBAAkB,KACnC,IAAIi8Z,EAAqBh+e,EAAKy3K,SAAStvF,OAAO5hE,OAC9CvmB,EAAKy3K,SAAStvF,OAAO5hE,OAAS,CAACjX,EAAM4he,KACnC,IAAI+M,EAAWtsO,EAAOqsO,EAAmBrhf,KAAKqD,EAAMsP,EAAM4he,IACtD75L,EAAW92S,SAAS+3B,cAAc,SAClCmld,EAAU19T,WACZs3H,EAAS7lI,UAAUv1K,IAAIwhf,EAAU19T,WAEnCs3H,EAASz7S,iBAAiB,SAAS,SAAU0yL,GAC3CvuL,GAAeuuL,EACjB,IACA+oH,EAAStvS,KAAO,WAChB,MAAMkxe,EAASjI,GAAS1he,EAAKtP,EAAKy3K,SAASs4T,aAG3C,OAFA6N,EAAcvmM,KAAa4hM,GAAUj5e,EAAK4yC,MAAMvY,QAAQ4+c,IAAW,IACnEgF,EAAS9oX,QAAQkiL,GACV4mM,CAAQ,CAChB,IAIHj+e,EAAKu8I,GAAG,eAAe38I,IACrB,IAAI2mB,EAASvmB,EAAKgvI,UAAUpvI,GACxB2mB,IAEFA,EAAOirJ,UAAUr+G,OAAO,YACxB2qb,EAAev3d,GACjB,IAIFvmB,EAAKu8I,GAAG,YAAY38I,IAClB,IAAI2mB,EAASvmB,EAAKgvI,UAAUpvI,GACxB2mB,GAEFu3d,EAAev3d,EACjB,IAIFvmB,EAAK+hF,KAAK,UAAW,kBAAkB,CAACusG,EAAK/nK,KAC3C,GAAIA,EAAOirJ,UAAUjrK,SAAS,YAK5B,OAJAggB,EAAOirJ,UAAUr+G,OAAO,YACxBnzD,EAAK0ke,WAAWn+c,EAAO+C,QAAQ1pB,OAC/BI,EAAKw3e,sBACLz3e,GAAeuuL,GAAK,GAGtBkvT,EAAoB7gf,KAAKqD,EAAMsuL,EAAK/nK,GACpCu3d,EAAev3d,EAAO,GAE1B,CAiBA,SAAS23d,GAAc5J,GACrB,MAAMt0e,EAAOxE,KACPoH,EAAUpG,OAAOC,OAAO,CAC5BsjL,UAAW,eACXx8J,MAAO,YACPmvG,KAAMpjH,GACG,eAAeA,EAAKywK,qBAAqBzwK,EAAKiU,yBAEtD+wd,GACHt0e,EAAKu8I,GAAG,cAAc,KACpB,IAAI93I,EAASktQ,EAAO/uQ,EAAQ8vH,KAAK9vH,IACjC6B,EAAO7I,iBAAiB,SAAS0yL,IAC3BtuL,EAAK42H,WACT52H,EAAK2O,QACsB,WAAvB3O,EAAKy3K,SAAShqJ,MAAqBztB,EAAKy3K,SAASg4T,kBACnDzve,EAAKg3e,QAAQ,IAEf1oT,EAAIvuL,iBACJuuL,EAAIzuL,kBAAiB,IAEvBG,EAAKwze,QAAQ56c,YAAYn0B,EAAO,GAEpC,CAiBA,MAAMyvL,GAAc,CAAC+qL,EAAe07B,KAClC,IAAIwjG,EACkD,OAArDA,EAAwBl/H,EAAc9lV,aAAuBgld,EAAsBnpX,aAAa2lR,EAAS17B,EAActqP,YAAY,EAEhIK,GAAe,CAACiqP,EAAe07B,KACnC,IAAIyjG,EACmD,OAAtDA,EAAyBn/H,EAAc9lV,aAAuBild,EAAuBppX,aAAa2lR,EAAS17B,EAAc,EAEtH2xE,GAAW,CAAC3xE,EAAe07B,KAC/B,EAAG,CACD,IAAI0jG,EAEJ,GAAIp/H,IADJ07B,EAAkC,OAAvB0jG,EAAW1jG,QAAmB,EAAS0jG,EAAShR,wBAEzD,OAAO,CAEX,OAAS1yF,GAAWA,EAAQ0yF,wBAC5B,OAAO,CAAK,EAEd,SAASiR,KACP,IAAIt+e,EAAOxE,KACX,GAA2B,UAAvBwE,EAAKy3K,SAAShqJ,KAAkB,OACpC,IAAI8wd,EAAYv+e,EAAKwnS,KACjBg3M,EAAcx+e,EAAKk8e,OACvB,IACIuC,EADAC,GAAW,EAMf1+e,EAAK+hF,KAAK,QAAS,kBAAkB,KACnC,IAAI48Z,EAAmB3+e,EAAKy3K,SAAStvF,OAAOx5C,KAC5C3uC,EAAKy3K,SAAStvF,OAAOx5C,KAAO,CAACr/B,EAAM0jQ,KACjC,MAAMrkO,EAAOgjO,EAAOgtO,EAAiBhif,KAAKqD,EAAMsP,EAAM0jQ,IACtDs6N,GAAQ3+b,EAAM,CACZ,UAAa,SAIf,MAIMiwc,EAAYtwT,IAChBmwT,EAAY9vc,EACZ3S,YAAW,KACT2S,EAAK6iI,UAAUv1K,IAAI,cAAc,GAChC,EAAE,EAED4if,EAAWvwT,IACfA,EAAIvuL,iBACJ4uC,EAAK6iI,UAAUv1K,IAAI,gBACnB6if,EAASnwc,EAAM8vc,EAAU,EAErBM,EAAY,KAChBpwc,EAAK6iI,UAAUr+G,OAAO,eAAe,EAEjC2rb,EAAW,CAACE,EAAYC,UACX59e,IAAb49e,IACAruD,GAASquD,EAAUtwc,GACrBulJ,GAAY8qT,EAAYC,GAExBjqX,GAAagqX,EAAYC,GAC3B,EAEIC,EAAU,KACd,IAAIC,EACJ5+e,SAASkJ,iBAAiB,iBAAiB1L,SAAQyvD,GAAMA,EAAGgkH,UAAUr+G,OAAO,kBACjD,OAA3Bgsb,EAAaV,IAAsBU,EAAW3tU,UAAUr+G,OAAO,eAChEsrb,OAAYp9e,EACZ,IAAInD,EAAS,GACb8B,EAAKwze,QAAQ/pe,iBAAiB,gBAAgB1L,SAAQyvD,IACpD,GAAIA,EAAGlkC,QAAQ1pB,MAAO,CACpB,IAAIA,EAAQ4tD,EAAGlkC,QAAQ1pB,MACnBA,GACF1B,EAAOuB,KAAKG,EAEhB,KAEFI,EAAK84G,SAAS56G,EAAO,EAQvB,OANA47W,GAASnrU,EAAM,aA1CG2/I,IACXowT,GAAU3+e,GAAeuuL,GAC9BA,EAAIzuL,iBAAiB,IAyCvBi6W,GAASnrU,EAAM,YAAaiwc,GAC5B9kI,GAASnrU,EAAM,YAAakwc,GAC5B/kI,GAASnrU,EAAM,WAAYkwc,GAC3B/kI,GAASnrU,EAAM,YAAaowc,GAC5BjlI,GAASnrU,EAAM,UAAWuwc,GACnBvwc,CAAI,CACZ,IAEH3uC,EAAK+hF,KAAK,UAAW,QAAQ,KAC3B28Z,GAAW,EACJH,EAAU5hf,KAAKqD,MAExBA,EAAK+hF,KAAK,UAAW,UAAU,KAC7B28Z,GAAW,EACJF,EAAY7hf,KAAKqD,KAE5B,CAiBA,SAASo/e,GAAiB9K,GACxB,MAAMt0e,EAAOxE,KACPoH,EAAUpG,OAAOC,OAAO,CAC5B8mB,MAAO,WACP87d,YAAa,kBACbC,cAAe,wBACfC,WAAY,wBACZC,WAAY,wBACZ9sX,KAAMpjH,GACG,eAAiBA,EAAK+ve,YAAtB,iBAA4D/ve,EAAKgwe,cAAjE,kBAA0Ghwe,EAAKiwe,WAAa,KAAOjwe,EAAKiU,MAAxI,oBAA2KjU,EAAKkwe,WAAhL,6BAERlL,GACHt0e,EAAKu8I,GAAG,cAAc,KACpB,IAAI4oH,EAASwM,EAAO/uQ,EAAQ8vH,KAAK9vH,IAC7B68e,EAAat6O,EAAOvxI,cAAc,IAAMhxH,EAAQ48e,YAChDC,GACFA,EAAW7jf,iBAAiB,SAAS0yL,IACnCvuL,GAAeuuL,GAAK,GACpBtuL,EAAKstL,OAAO,IAGhBttL,EAAKgiR,SAAShtJ,aAAamwI,EAAQnlQ,EAAKgiR,SAAS3sJ,WAAW,GAEhE,CAiBA,SAASqqX,KACP,IAAI1/e,EAAOxE,KAUXwE,EAAK+hF,KAAK,UAAW,YAAY+6Z,IACJ,WAAvB98e,EAAKy3K,SAAShqJ,MAAsBztB,EAAKwze,QAAQjte,SAASvG,EAAKuze,gBAGjEuJ,EAAU/ve,KAAKC,IAAI,EAAGD,KAAKyW,IAAIxjB,EAAK4yC,MAAM9lC,OAAQgwe,MACnC98e,EAAKmwY,UAAanwY,EAAK66a,WACpC76a,EAAK84e,kBAAkB/6e,SAAQ,CAACq6H,EAAO30G,KACjCA,EAAIq5d,EACN98e,EAAKuze,cAAcwC,sBAAsB,cAAe39W,GAExDp4H,EAAKwze,QAAQ56c,YAAYw/F,EAC3B,IATJ0kX,EAAU98e,EAAK4yC,MAAM9lC,OAavB9M,EAAKmwY,SAAW2sG,CAAO,IAEzB98e,EAAK+hF,KAAK,UAAW,aAAarzB,IAChC,IAAK1uD,EAAKq/O,UAAW,OAGrB,MAAMo5P,EAAcz4e,EAAKs4e,cAAc5pb,GACvC,GAAI+pb,EAAa,CACf,MAAM18Z,EAAMkgH,EAAUw8S,GACtBz4e,EAAK23e,SAASjpb,EAAY,EAAIqtB,EAAM,EAAIA,GACxC/7E,EAAK03e,gBACL3K,EAAc0L,EAAa,cAG7B,MACEz4e,EAAK23e,SAAS33e,EAAKmwY,SAAWzhV,EAChC,GAEJ,CAiBA,SAASixb,KACP,MAAM3/e,EAAOxE,KACbwE,EAAKy3K,SAASw3T,YAAa,EAE3Bjve,EAAK+hF,KAAK,SAAU,SAAS,KAC3B/hF,EAAK0ze,WAAa1ze,EAAKwze,QACvB9G,EAAW1se,EAAKuze,cAAe,kBAC/B,MAAM5gX,EAAMg/I,EAAO,qCACnBh/I,EAAI6C,OAAOx1H,EAAKuze,eAChBvze,EAAKgiR,SAAShtJ,aAAarC,EAAK3yH,EAAKgiR,SAAS3sJ,YAG9C,MAAMwyG,EAAc8pC,EAAO,qDAC3B9pC,EAAYA,YAAc7nO,EAAKy3K,SAASowD,aAAe,GACvD7nO,EAAKwze,QAAQh+W,OAAOqyG,EAAY,IAElC7nO,EAAKu8I,GAAG,cAAc,KAEpBv8I,EAAKuze,cAAc33e,iBAAiB,WAAW0yL,IAE7C,OAAQA,EAAImC,SACV,KAAKy9S,GAMH,OALIlue,EAAKmiO,SACPpiO,GAAeuuL,GAAK,GACpBtuL,EAAKstL,cAEPttL,EAAK22e,mBAEP,KAAKlI,GACHzue,EAAK0ze,WAAWpmL,UAAY,EAGhC,OAAOttT,EAAKs1e,UAAU34e,KAAKqD,EAAMsuL,EAAI,IAEvCtuL,EAAKu8I,GAAG,QAAQ,KACdv8I,EAAK0ze,WAAWpmL,SAAWttT,EAAK2tO,YAAc,EAAI3tO,EAAKstT,QAAQ,IAIjEttT,EAAKu8I,GAAG,iBAAiB,KACvBv8I,EAAKuze,cAAcp2V,OAAO,IAI5B,MAAMyiW,EAAc5/e,EAAKy1e,OACzBz1e,EAAK+hF,KAAK,UAAW,UAAUusG,IAC7B,IAAIA,GAAOA,EAAIv1J,eAAiB/4B,EAAKuze,cACrC,OAAOqM,EAAYjjf,KAAKqD,EAAK,IAE/B85W,GAAS95W,EAAKuze,cAAe,QAAQ,IAAMvze,EAAKy1e,WAGhDz1e,EAAK+hF,KAAK,SAAU,SAAS,KACtB/hF,EAAKmiO,QACVniO,EAAK0ze,WAAWv2V,MAAM,CACpB2zE,eAAe,GACf,GACF,GAEN,CAgBA,SAAS+uR,KACP,IAAI7/e,EAAOxE,KACXwE,EAAKu8I,GAAG,cAAc,KACpB,IAAIujW,EAAav/e,SAAS+3B,cAAc,QACpCk7c,EAAUxze,EAAKuze,cACnBuM,EAAWvxd,MAAMoiH,QAAU,2FAC3B3wI,EAAKs1H,QAAQ18F,YAAYknd,GACzB,IAAIC,EAAkB,CAAC,gBAAiB,WAAY,aAAc,aAAc,iBAChF,IAAK,MAAMC,KAAcD,EAEvBD,EAAWvxd,MAAMyxd,GAAcxM,EAAQjld,MAAMyxd,GAO/C,IAAIltd,EAAS,KACXgtd,EAAWzod,YAAcm8c,EAAQ5ze,MACjC4ze,EAAQjld,MAAMjC,MAAQwzd,EAAWpzb,YAAc,IAAI,EAErD55B,IACA9yB,EAAKu8I,GAAG,8BAA+BzpH,GACvCgnV,GAAS05H,EAAS,QAAS1gd,GAC3BgnV,GAAS05H,EAAS,QAAS1gd,GAC3BgnV,GAAS05H,EAAS,OAAQ1gd,GAC1BgnV,GAAS05H,EAAS,SAAU1gd,EAAO,GAEvC,CAgBA,SAASmtd,KACP,IAAIjgf,EAAOxE,KACP0kf,EAAuBlgf,EAAKs3e,gBAChC97e,KAAKumF,KAAK,UAAW,mBAAmBusG,KAClCtuL,EAAKq0e,YAAYvne,QACZoze,EAAqBvjf,KAAKqD,EAAMsuL,IAI7C,CAgBA,SAAS6xT,KACP3kf,KAAKumF,KAAK,UAAW,iBAAiB,SACtCvmF,KAAKumF,KAAK,UAAW,aAAa,QACpC,CAiBA,SAASq+Z,KACP,IAAIpgf,EAAOxE,KACP6kf,EAAergf,EAAKs1e,UACxBt1e,EAAK+hF,KAAK,UAAW,aAAausG,IAChC,IAAIhxL,EAAOipB,EAAQ3jB,EAASowe,EAC5B,IAAKhze,EAAKmiO,QAAY7zC,EAAImC,UAAY09S,IAAY7/S,EAAImC,UAAY49S,GAChE,OAAOgS,EAAa1jf,KAAKqD,EAAMsuL,GAEjCtuL,EAAKi0e,aAAc,EACnBjB,EAAW/F,EAAYjte,EAAKo0e,aAAc,gBAC1C92e,EAAQ2+L,EAAUj8L,EAAKo0e,aAAc,qBAChCpB,IAIHA,EADE1kT,EAAImC,UAAY09S,GACP6E,EAASt+W,gBAETs+W,EAASr+W,eAMtBpuG,GADA3jB,EAAUowe,EAASvpe,iBAAiB,sBACnBsD,KAAKyW,IAAI5gB,EAAQkK,OAAS,EAAGxP,MAE5C0C,EAAKm3e,gBAAgB5wd,EACvB,GAEJ,CAiBA,SAAS+5d,GAAehM,GACtB,MAAM1xe,EAAUpG,OAAOC,OAAO,CAC5B4sB,MAAO,UACP9F,MAAO,SACPw8J,UAAW,SACXvqD,QAAQ,GACP8+W,GAGH,IAAIt0e,EAAOxE,KAGX,GAAKoH,EAAQ4yH,OAAb,CAGA,IAAI9C,EAAO,uCAAyC9vH,EAAQm9K,UAAY,0BAA4BmxT,GAAYtue,EAAQ2gB,OAAS,KAAO3gB,EAAQymB,MAAQ,OACxJrpB,EAAK+hF,KAAK,QAAS,kBAAkB,KACnC,IAAI48Z,EAAmB3+e,EAAKy3K,SAAStvF,OAAOx5C,KAC5C3uC,EAAKy3K,SAAStvF,OAAOx5C,KAAO,CAACr/B,EAAM0jQ,KACjC,IAAIrkO,EAAOgjO,EAAOgtO,EAAiBhif,KAAKqD,EAAMsP,EAAM0jQ,IAChDutO,EAAe5uO,EAAOj/I,GAgB1B,OAfA/jF,EAAK/V,YAAY2nd,GACjBzmI,GAASymI,EAAc,aAAajyT,IAClCvuL,GAAeuuL,GAAK,EAAK,IAE3BwrL,GAASymI,EAAc,SAASjyT,IAC1BtuL,EAAK42H,WAGT72H,GAAeuuL,GAAK,GAChBtuL,EAAK42H,UACJ52H,EAAK28e,aAAa,CAAChuc,GAAO2/I,KAC/BtuL,EAAK0ke,WAAW/1b,GAChB3uC,EAAKw3e,gBAAe,GACpBx3e,EAAK21e,cAAY,IAEZhnc,CAAI,CACZ,GAvBH,CAyBF,CAiBA,SAAS6xc,GAAsBlM,GAC7B,MAAMt0e,EAAOxE,KACPoH,EAAUpG,OAAOC,OAAO,CAC5BurB,KAAMzB,GACGA,EAAOvmB,EAAKy3K,SAASu4T,aAE7BsE,GACHt0e,EAAKu8I,GAAG,eAAe,SAAU38I,GAC/B,GAAKI,EAAKq/O,WAG8B,KAApCr/O,EAAKuze,cAAc3ze,MAAM4C,OAAe,CAC1C,IAAI+jB,EAASvmB,EAAK4C,QAAQhD,GACtB2mB,GACFvmB,EAAKg4e,gBAAgBp1e,EAAQolB,KAAKrrB,KAAKqD,EAAMumB,GAEjD,CACF,GACF,CAiBA,SAASk6d,KACP,MAAMzgf,EAAOxE,KACPklf,EAAe1gf,EAAK63e,QACpB8I,EAAyB3gf,EAAK+3e,kBAC9B6I,EAAoB5gf,EAAK83e,aAC/B,IACIrE,EAEAoN,EAHAC,EAAa,CAAC,EAEdC,GAAe,EAEfC,EAAiB,GAkBrB,GAjBKhhf,EAAKy3K,SAASwpU,iBAEjBjhf,EAAKy3K,SAASwpU,eAAiB,KAE7B,GADuBxN,EAAiB9mb,cAAgB8mb,EAAiBlzM,aAAekzM,EAAiBhtW,WACpF,GACnB,OAAO,EAET,GAAIzmI,EAAKo0e,aAAc,CACrB,IAAIsG,EAAa16e,EAAK06e,aAEtB,GADY19e,MAAMC,KAAKy9e,GAAYrgd,QAAQr6B,EAAKo0e,eACnCsG,EAAW5te,OAAS,EAC/B,OAAO,CAEX,CACA,OAAO,CAAK,IAGX9M,EAAKy3K,SAASypU,SACjB,KAAM,qDAKRlhf,EAAKy3K,SAAS44T,UAAY,CAAC,CACzB/pZ,MAAO,UACN,CACDA,MAAO,WAIT,MAAM66Z,EAAchhX,KACsB,kBAA7BngI,EAAKy3K,SAASy3T,YAA2BuE,EAAiB79W,SAAS9oH,QAAU9M,EAAKy3K,SAASy3T,iBAGlG/uW,KAAS2gX,KAAcA,EAAW3gX,IAKlCy7W,EAAc,CAACr1d,EAAQ3mB,IACvBI,EAAK4yC,MAAMvY,QAAQz6B,IAAU,GAAKohf,EAAe3md,QAAQz6B,IAAU,EAOzEI,EAAKohf,WAAa,CAACxhf,EAAOyhf,KACxBP,EAAWlhf,GAASyhf,CAAQ,EAI9Brhf,EAAKshf,OAASnhX,IACZ,GAAIA,KAAS2gX,EAAY,CACvB,MAAMO,EAAWP,EAAW3gX,GAE5B,OADA2gX,EAAW3gX,IAAS,EACbkhX,CACT,CAKA,OADArhf,EAAKuhf,kBACEvhf,EAAKy3K,SAASypU,SAASvkf,KAAKqD,EAAMmgI,EAAM,EAIjDngI,EAAKuhf,gBAAkB,KACrBT,EAAa,CAAC,CAAC,EAKjB9gf,EAAK+hF,KAAK,UAAW,qBAAqB,KACxC,IAAIg/Z,EAGJ,OAAOJ,EAAuBhkf,KAAKqD,EAAK,IAI1CA,EAAK+hF,KAAK,UAAW,WAAWo+C,GAExBA,KAAS2gX,EAGRK,EAAYhhX,GAFVugX,EAAa/jf,KAAKqD,EAAMmgI,KAMnCngI,EAAK+hF,KAAK,UAAW,gBAAgB,CAACn/E,EAAS+re,KAC7C,GAAKoS,GAEE,GAAIF,EAAe,CACxB,MAAMW,EAAe5+e,EAAQ,QACRvB,IAAjBmgf,IACFX,EAAcv3d,QAAQ1pB,MAAQ4hf,EAAaxhf,EAAKy3K,SAASs4T,YAE7D,OANE/ve,EAAK07e,aAAaE,GAOpBgF,EAAkBjkf,KAAKqD,EAAM4C,EAAS+re,GACtCoS,GAAe,CAAK,IAMtB/gf,EAAK+hF,KAAK,QAAS,kBAAkB,KACnC,MAAMo+C,EAAQngI,EAAKq4F,UACnB,IAAI9xE,EACA46d,EAAYhhX,IACd55G,EAASvmB,EAAKmoF,OAAO,eAAgB,CACnCg4C,MAAOA,OAGP55G,EAAOrP,aAAa,kBAAmB,IACvC2pe,EAAgBt6d,GAET45G,KAAS2gX,IAAerN,EAAiB7/W,cAAc,iBAChErtG,EAASvmB,EAAKmoF,OAAO,kBAAmB,CACtCg4C,MAAOA,KAGP55G,IACFmmd,EAAWnmd,EAAQvmB,EAAKy3K,SAASk5T,aACjC8C,EAAiBj+W,OAAOjvG,GAC1B,IAIFvmB,EAAKu8I,GAAG,cAAc,KACpBykW,EAAiBxkf,OAAO+C,KAAKS,EAAK4C,SAClC6we,EAAmBzze,EAAKyze,iBAGxBzze,EAAKy3K,SAAStvF,OAAS3rF,OAAOC,OAAO,CAAC,EAAG,CACvCskf,aAAc,IACL,oEAETU,gBAAiB,IACR,sDAERzhf,EAAKy3K,SAAStvF,QAGjBsrZ,EAAiB73e,iBAAiB,UAAU,KACrCoE,EAAKy3K,SAASwpU,eAAetkf,KAAKqD,IAKlCmhf,EAAYnhf,EAAKq4F,aAKlB0oZ,IACJA,GAAe,EACf/gf,EAAKyc,KAAK9f,KAAKqD,EAAMA,EAAKq4F,YAAU,GACpC,GAEN,CAiBA,OAfA+6Y,GAAUrN,OAAO,kBAAmBuX,IACpClK,GAAUrN,OAAO,mBAAoBwX,IACrCnK,GAAUrN,OAAO,eAAgBmY,IACjC9K,GAAUrN,OAAO,YAAauY,IAC9BlL,GAAUrN,OAAO,kBAAmBqZ,IACpChM,GAAUrN,OAAO,iBAAkB2Z,IACnCtM,GAAUrN,OAAO,iBAAkB4Z,IACnCvM,GAAUrN,OAAO,iBAAkB8Z,IACnCzM,GAAUrN,OAAO,sBAAuBka,IACxC7M,GAAUrN,OAAO,kBAAmBoa,IACpC/M,GAAUrN,OAAO,mBAAoBqa,IACrChN,GAAUrN,OAAO,gBAAiBua,IAClClN,GAAUrN,OAAO,uBAAwBya,IACzCpN,GAAUrN,OAAO,iBAAkB0a,IAE5BrN,EAEP,CAzqKgFvpQ","sources":["webpack://app/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/./node_modules/chartkick/dist/chartkick.esm.js","webpack://app/./node_modules/@kurkle/color/dist/color.esm.js","webpack://app/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://app/./node_modules/chart.js/dist/chart.js","webpack://app/./node_modules/chart.js/auto/auto.js","webpack://app/./node_modules/date-fns/constants.js","webpack://app/./node_modules/date-fns/constructFrom.js","webpack://app/./node_modules/date-fns/toDate.js","webpack://app/./node_modules/date-fns/locale/en-US/_lib/formatDistance.js","webpack://app/./node_modules/date-fns/locale/_lib/buildFormatLongFn.js","webpack://app/./node_modules/date-fns/locale/en-US/_lib/formatLong.js","webpack://app/./node_modules/date-fns/locale/en-US/_lib/formatRelative.js","webpack://app/./node_modules/date-fns/locale/_lib/buildLocalizeFn.js","webpack://app/./node_modules/date-fns/locale/en-US/_lib/localize.js","webpack://app/./node_modules/date-fns/locale/_lib/buildMatchFn.js","webpack://app/./node_modules/date-fns/locale/en-US/_lib/match.js","webpack://app/./node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","webpack://app/./node_modules/date-fns/locale/en-US.js","webpack://app/./node_modules/date-fns/_lib/format/longFormatters.js","webpack://app/./node_modules/date-fns/_lib/protectedTokens.js","webpack://app/./node_modules/date-fns/_lib/defaultOptions.js","webpack://app/./node_modules/date-fns/getDefaultOptions.js","webpack://app/./node_modules/date-fns/transpose.js","webpack://app/./node_modules/date-fns/parse/_lib/Setter.js","webpack://app/./node_modules/date-fns/parse/_lib/Parser.js","webpack://app/./node_modules/date-fns/parse/_lib/constants.js","webpack://app/./node_modules/date-fns/parse/_lib/utils.js","webpack://app/./node_modules/date-fns/startOfWeek.js","webpack://app/./node_modules/date-fns/getWeekYear.js","webpack://app/./node_modules/date-fns/startOfISOWeek.js","webpack://app/./node_modules/date-fns/startOfWeekYear.js","webpack://app/./node_modules/date-fns/getWeek.js","webpack://app/./node_modules/date-fns/setWeek.js","webpack://app/./node_modules/date-fns/getISOWeekYear.js","webpack://app/./node_modules/date-fns/startOfISOWeekYear.js","webpack://app/./node_modules/date-fns/getISOWeek.js","webpack://app/./node_modules/date-fns/setISOWeek.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/DateParser.js","webpack://app/./node_modules/date-fns/addDays.js","webpack://app/./node_modules/date-fns/setDay.js","webpack://app/./node_modules/date-fns/getISODay.js","webpack://app/./node_modules/date-fns/setISODay.js","webpack://app/./node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/EraParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/YearParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/MonthParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/DayParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/SecondParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","webpack://app/./node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","webpack://app/./node_modules/date-fns/parse.js","webpack://app/./node_modules/date-fns/parseISO.js","webpack://app/./node_modules/date-fns/isDate.js","webpack://app/./node_modules/date-fns/isValid.js","webpack://app/./node_modules/date-fns/_lib/normalizeDates.js","webpack://app/./node_modules/date-fns/startOfDay.js","webpack://app/./node_modules/date-fns/differenceInCalendarDays.js","webpack://app/./node_modules/date-fns/startOfYear.js","webpack://app/./node_modules/date-fns/getDayOfYear.js","webpack://app/./node_modules/date-fns/_lib/addLeadingZeros.js","webpack://app/./node_modules/date-fns/_lib/format/lightFormatters.js","webpack://app/./node_modules/date-fns/_lib/format/formatters.js","webpack://app/./node_modules/date-fns/format.js","webpack://app/./node_modules/date-fns/addMilliseconds.js","webpack://app/./node_modules/date-fns/addSeconds.js","webpack://app/./node_modules/date-fns/addMinutes.js","webpack://app/./node_modules/date-fns/addHours.js","webpack://app/./node_modules/date-fns/addWeeks.js","webpack://app/./node_modules/date-fns/addMonths.js","webpack://app/./node_modules/date-fns/addQuarters.js","webpack://app/./node_modules/date-fns/addYears.js","webpack://app/./node_modules/date-fns/differenceInMilliseconds.js","webpack://app/./node_modules/date-fns/_lib/getRoundingMethod.js","webpack://app/./node_modules/date-fns/differenceInSeconds.js","webpack://app/./node_modules/date-fns/differenceInMinutes.js","webpack://app/./node_modules/date-fns/differenceInHours.js","webpack://app/./node_modules/date-fns/differenceInDays.js","webpack://app/./node_modules/date-fns/differenceInWeeks.js","webpack://app/./node_modules/date-fns/compareAsc.js","webpack://app/./node_modules/date-fns/differenceInCalendarMonths.js","webpack://app/./node_modules/date-fns/endOfDay.js","webpack://app/./node_modules/date-fns/endOfMonth.js","webpack://app/./node_modules/date-fns/isLastDayOfMonth.js","webpack://app/./node_modules/date-fns/differenceInMonths.js","webpack://app/./node_modules/date-fns/differenceInQuarters.js","webpack://app/./node_modules/date-fns/differenceInCalendarYears.js","webpack://app/./node_modules/date-fns/differenceInYears.js","webpack://app/./node_modules/date-fns/startOfSecond.js","webpack://app/./node_modules/date-fns/startOfMinute.js","webpack://app/./node_modules/date-fns/startOfHour.js","webpack://app/./node_modules/date-fns/startOfMonth.js","webpack://app/./node_modules/date-fns/startOfQuarter.js","webpack://app/./node_modules/date-fns/endOfSecond.js","webpack://app/./node_modules/date-fns/endOfMinute.js","webpack://app/./node_modules/date-fns/endOfHour.js","webpack://app/./node_modules/date-fns/endOfWeek.js","webpack://app/./node_modules/date-fns/endOfQuarter.js","webpack://app/./node_modules/date-fns/endOfYear.js","webpack://app/./node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js","webpack://app/./node_modules/chartkick/chart.js/chart.esm.js","webpack://app/./node_modules/file-saver/dist/FileSaver.min.js","webpack://app/./node_modules/lodash.debounce/index.js","webpack://app/./node_modules/tinymce/icons/default/icons.js","webpack://app/./node_modules/tinymce/icons/default/index.js","webpack://app/./node_modules/tinymce/models/dom/index.js","webpack://app/./node_modules/tinymce/models/dom/model.js","webpack://app/./node_modules/tinymce/plugins/advlist/index.js","webpack://app/./node_modules/tinymce/plugins/advlist/plugin.js","webpack://app/./node_modules/tinymce/plugins/autoresize/index.js","webpack://app/./node_modules/tinymce/plugins/autoresize/plugin.js","webpack://app/./node_modules/tinymce/plugins/link/index.js","webpack://app/./node_modules/tinymce/plugins/link/plugin.js","webpack://app/./node_modules/tinymce/plugins/lists/index.js","webpack://app/./node_modules/tinymce/plugins/lists/plugin.js","webpack://app/./node_modules/tinymce/themes/silver/index.js","webpack://app/./node_modules/tinymce/themes/silver/theme.js","webpack://app/./node_modules/tinymce/tinymce.js","webpack://app/./node_modules/tom-select/dist/js/tom-select.complete.js"],"sourcesContent":["/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","/*!\n * Chartkick.js v5.0.1\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * MIT License\n */\n\nfunction isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n}\n\nfunction isFunction(variable) {\n return variable instanceof Function;\n}\n\nfunction isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n}\n\n// https://github.com/madrobby/zepto/blob/master/src/zepto.js\nfunction extend(target, source) {\n for (var key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") { continue; }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n}\n\nfunction merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n}\n\nvar DATE_PATTERN = /^(\\d\\d\\d\\d)(?:-)?(\\d\\d)(?:-)?(\\d\\d)$/i;\n\nfunction negativeValues(series) {\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction toStr(obj) {\n return \"\" + obj;\n}\n\nfunction toFloat(obj) {\n return parseFloat(obj);\n}\n\nfunction toDate(obj) {\n if (obj instanceof Date) {\n return obj;\n } else if (typeof obj === \"number\") {\n return new Date(obj * 1000); // ms\n } else {\n var s = toStr(obj);\n var matches = s.match(DATE_PATTERN);\n if (matches) {\n var year = parseInt(matches[1], 10);\n var month = parseInt(matches[2], 10) - 1;\n var day = parseInt(matches[3], 10);\n return new Date(year, month, day);\n } else {\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = s.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n // Date.parse returns milliseconds if valid and NaN if invalid\n return new Date(Date.parse(str) || s);\n }\n }\n}\n\nfunction toArr(obj) {\n if (isArray(obj)) {\n return obj;\n } else {\n var arr = [];\n for (var i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n arr.push([i, obj[i]]);\n }\n }\n return arr;\n }\n}\n\nfunction jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.singleSeriesFormat || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.singleSeriesFormat);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n }\n\n // min\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n }\n\n // max\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n }\n\n // merge library last\n options = merge(options, opts.library || {});\n\n return options;\n };\n}\n\nfunction sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n}\n\nfunction sortByNumberSeries(a, b) {\n return a[0] - b[0];\n}\n\n// needed since sort() without arguments does string comparison\nfunction sortByNumber(a, b) {\n return a - b;\n}\n\nfunction every(values, fn) {\n for (var i = 0; i < values.length; i++) {\n if (!fn(values[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isDay(timeUnit) {\n return timeUnit === \"day\" || timeUnit === \"week\" || timeUnit === \"month\" || timeUnit === \"year\";\n}\n\nfunction calculateTimeUnit(values, maxDay) {\n if ( maxDay === void 0 ) maxDay = false;\n\n if (values.length === 0) {\n return null;\n }\n\n var minute = every(values, function (d) { return d.getMilliseconds() === 0 && d.getSeconds() === 0; });\n if (!minute) {\n return null;\n }\n\n var hour = every(values, function (d) { return d.getMinutes() === 0; });\n if (!hour) {\n return \"minute\";\n }\n\n var day = every(values, function (d) { return d.getHours() === 0; });\n if (!day) {\n return \"hour\";\n }\n\n if (maxDay) {\n return \"day\";\n }\n\n var month = every(values, function (d) { return d.getDate() === 1; });\n if (!month) {\n var dayOfWeek = values[0].getDay();\n var week = every(values, function (d) { return d.getDay() === dayOfWeek; });\n return (week ? \"week\" : \"day\");\n }\n\n var year = every(values, function (d) { return d.getMonth() === 0; });\n if (!year) {\n return \"month\";\n }\n\n return \"year\";\n}\n\nfunction isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n}\n\nfunction isNumber(obj) {\n return typeof obj === \"number\";\n}\n\nvar byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\nfunction formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var positive = value >= 0;\n if (!positive) {\n value *= -1;\n }\n\n var baseValue = axis ? options.byteScale : value;\n\n var suffixIdx;\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n }\n\n // TODO handle manual precision case\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n precision = value >= 1000 ? 4 : 3;\n }\n suffix = \" \" + byteSuffixes[suffixIdx];\n\n // flip value back\n if (!positive) {\n value *= -1;\n }\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n}\n\nfunction seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n return null;\n}\n\nvar baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n plugins: {\n legend: {},\n tooltip: {\n displayColors: false,\n callbacks: {}\n },\n title: {\n font: {\n size: 20\n },\n color: \"#333\"\n }\n },\n interaction: {}\n};\n\nvar defaultOptions$2 = {\n scales: {\n y: {\n ticks: {\n maxTicksLimit: 4\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n grid: {}\n },\n x: {\n grid: {\n drawOnChartArea: false\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n time: {},\n ticks: {}\n }\n }\n};\n\n// http://there4.io/2012/05/02/google-chart-color-list/\nvar defaultColors = [\n \"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\",\n \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\",\n \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"\n];\n\nfunction hideLegend$2(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.plugins.legend.display = !!legend;\n if (legend && legend !== true) {\n options.plugins.legend.position = legend;\n }\n } else if (hideLegend) {\n options.plugins.legend.display = false;\n }\n}\n\nfunction setTitle$2(options, title) {\n options.plugins.title.display = true;\n options.plugins.title.text = title;\n}\n\nfunction setMin$2(options, min) {\n if (min !== null) {\n options.scales.y.min = toFloat(min);\n }\n}\n\nfunction setMax$2(options, max) {\n options.scales.y.max = toFloat(max);\n}\n\nfunction setBarMin$1(options, min) {\n if (min !== null) {\n options.scales.x.min = toFloat(min);\n }\n}\n\nfunction setBarMax$1(options, max) {\n options.scales.x.max = toFloat(max);\n}\n\nfunction setStacked$2(options, stacked) {\n options.scales.x.stacked = !!stacked;\n options.scales.y.stacked = !!stacked;\n}\n\nfunction setXtitle$2(options, title) {\n options.scales.x.title.display = true;\n options.scales.x.title.text = title;\n}\n\nfunction setYtitle$2(options, title) {\n options.scales.y.title.display = true;\n options.scales.y.title.text = title;\n}\n\n// https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\nfunction addOpacity(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n}\n\nfunction notnull(x) {\n return x !== null && x !== undefined;\n}\n\nfunction setLabelSize(chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n value = toStr(this.getLabelForValue(value));\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n}\n\nfunction calculateScale(series) {\n var scale = 1;\n var max = maxAbsY(series);\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n }\n return scale;\n}\n\nfunction setFormatOptions$1(chart, options, chartType) {\n // options to apply to x and r values for scatter and bubble\n var numericOptions = {\n thousands: chart.options.thousands,\n decimal: chart.options.decimal\n };\n\n // options to apply to y value\n var formatOptions = merge({\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n }, numericOptions);\n\n if (chart.options.bytes) {\n var series = chart.data;\n if (chartType === \"pie\") {\n series = [{data: series}];\n }\n\n // set step size\n formatOptions.byteScale = calculateScale(series);\n }\n\n if (chartType !== \"pie\") {\n var axis = options.scales.y;\n if (chartType === \"bar\") {\n axis = options.scales.x;\n }\n\n if (formatOptions.byteScale) {\n if (!axis.ticks.stepSize) {\n axis.ticks.stepSize = formatOptions.byteScale / 2;\n }\n if (!axis.ticks.maxTicksLimit) {\n axis.ticks.maxTicksLimit = 4;\n }\n }\n\n if (!axis.ticks.callback) {\n axis.ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n\n if ((chartType === \"scatter\" || chartType === \"bubble\") && !options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n return formatValue(\"\", value, numericOptions, true);\n };\n }\n }\n\n if (!options.plugins.tooltip.callbacks.label) {\n if (chartType === \"scatter\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n\n var dataPoint = context.parsed;\n return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ')';\n };\n } else if (chartType === \"bubble\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n var dataPoint = context.raw;\n return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ', ' + formatValue('', dataPoint.v, numericOptions) + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.plugins.tooltip.callbacks.label = function (context) {\n return formatValue('', context.parsed, formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n options.plugins.tooltip.callbacks.label = function (context) {\n // don't show null values for stacked charts\n if (context.parsed[valueLabel] === null) {\n return;\n }\n\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n return formatValue(label, context.parsed[valueLabel], formatOptions);\n };\n }\n }\n\n // avoid formatting x-axis labels\n // by default, Chart.js applies locale\n if ((chartType === \"line\" || chartType === \"area\") && chart.xtype === \"number\") {\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n return toStr(value);\n };\n }\n\n if (!options.plugins.tooltip.callbacks.title) {\n options.plugins.tooltip.callbacks.title = function (context) {\n return toStr(context[0].parsed.x);\n };\n }\n }\n}\n\nfunction maxAbsY(series) {\n var max = 0;\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n var v = Math.abs(data[j][1]);\n if (v > max) {\n max = v;\n }\n }\n }\n return max;\n}\n\nfunction maxR(series) {\n // start at zero since radius must be positive\n var max = 0;\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n var v = data[j][2];\n if (v > max) {\n max = v;\n }\n }\n }\n return max;\n}\n\nvar jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\nfunction prepareDefaultData(chart) {\n var series = chart.data;\n var rows = {};\n var keys = [];\n var labels = [];\n var values = [];\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n\n for (var j = 0; j < data.length; j++) {\n var d = data[j];\n var key = chart.xtype === \"datetime\" ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n keys.push(key);\n }\n rows[key][i] = d[1];\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n keys.sort(sortByNumber);\n }\n\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n values.push([]);\n }\n\n for (var i$2 = 0; i$2 < keys.length; i$2++) {\n var key$1 = keys[i$2];\n\n var label = chart.xtype === \"datetime\" ? new Date(key$1) : key$1;\n labels.push(label);\n\n var row = rows[key$1];\n for (var j$1 = 0; j$1 < series.length; j$1++) {\n var v = row[j$1];\n // Chart.js doesn't like undefined\n values[j$1].push(v === undefined ? null : v);\n }\n }\n\n return {\n labels: labels,\n values: values\n };\n}\n\nfunction prepareBubbleData(chart) {\n var series = chart.data;\n var values = [];\n var max = maxR(series);\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n var points = [];\n for (var j = 0; j < data.length; j++) {\n var v = data[j];\n points.push({\n x: v[0],\n y: v[1],\n r: v[2] * 20 / max,\n // custom attribute, for tooltip\n v: v[2]\n });\n }\n values.push(points);\n }\n\n return {\n labels: [],\n values: values\n };\n}\n\n// scatter or numeric line/area\nfunction prepareNumberData(chart) {\n var series = chart.data;\n var values = [];\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n\n data.sort(sortByNumberSeries);\n\n var points = [];\n for (var j = 0; j < data.length; j++) {\n var v = data[j];\n points.push({\n x: v[0],\n y: v[1]\n });\n }\n values.push(points);\n }\n\n return {\n labels: [],\n values: values\n };\n}\n\nfunction prepareData(chart, chartType) {\n if (chartType === \"bubble\") {\n return prepareBubbleData(chart);\n } else if (chart.xtype === \"number\" && chartType !== \"bar\" && chartType !== \"column\") {\n return prepareNumberData(chart);\n } else {\n return prepareDefaultData(chart);\n }\n}\n\nfunction createDataTable(chart, options, chartType) {\n var ref = prepareData(chart, chartType);\n var labels = ref.labels;\n var values = ref.values;\n\n var series = chart.data;\n var datasets = [];\n var colors = chart.options.colors || defaultColors;\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n // use colors for each bar for single series format\n var color = (void 0);\n var backgroundColor = (void 0);\n if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n color = colors;\n backgroundColor = [];\n for (var j = 0; j < colors.length; j++) {\n backgroundColor[j] = addOpacity(color[j], 0.5);\n }\n } else {\n color = s.color || colors[i];\n backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n }\n\n var dataset = {\n label: s.name || \"\",\n data: values[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n borderWidth: 2\n };\n\n var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n if (pointChart) {\n dataset.pointBackgroundColor = color;\n dataset.pointHoverBackgroundColor = color;\n dataset.pointHitRadius = 50;\n }\n\n if (chartType === \"bubble\") {\n dataset.pointBackgroundColor = backgroundColor;\n dataset.pointHoverBackgroundColor = backgroundColor;\n dataset.pointHoverBorderWidth = 2;\n }\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n if (curve === false) {\n dataset.tension = 0;\n } else if (pointChart) {\n dataset.tension = 0.4;\n }\n\n var points = seriesOption(chart, s, \"points\");\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHoverRadius = 0;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n if (notnull(xmin)) {\n options.scales.x.min = toDate(xmin).getTime();\n }\n if (notnull(xmax)) {\n options.scales.x.max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.x.min = xmin;\n }\n if (notnull(xmax)) {\n options.scales.x.max = xmax;\n }\n }\n\n if (chart.xtype === \"datetime\") {\n var timeUnit = calculateTimeUnit(labels);\n\n // for empty datetime chart\n if (labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n }\n\n if (labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (var i$1 = 1; i$1 < labels.length; i$1++) {\n var value = labels[i$1].getTime();\n if (value < minTime) {\n minTime = value;\n }\n if (value > maxTime) {\n maxTime = value;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.x.time.unit) {\n var step;\n if (timeUnit === \"year\" || timeDiff > 365 * 10) {\n options.scales.x.time.unit = \"year\";\n step = 365;\n } else if (timeUnit === \"month\" || timeDiff > 30 * 10) {\n options.scales.x.time.unit = \"month\";\n step = 30;\n } else if (timeUnit === \"week\" || timeUnit === \"day\" || timeDiff > 10) {\n options.scales.x.time.unit = \"day\";\n step = 1;\n } else if (timeUnit === \"hour\" || timeDiff > 0.5) {\n options.scales.x.time.displayFormats = {hour: \"MMM d, h a\"};\n options.scales.x.time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (timeUnit === \"minute\") {\n options.scales.x.time.displayFormats = {minute: \"h:mm a\"};\n options.scales.x.time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n // width not available for hidden elements\n var width = chart.element.offsetWidth;\n if (width > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n if (timeUnit === \"week\" && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n options.scales.x.ticks.stepSize = unitStepSize;\n }\n }\n }\n\n if (!options.scales.x.time.tooltipFormat) {\n if (timeUnit === \"year\") {\n options.scales.x.time.tooltipFormat = \"yyyy\";\n } else if (timeUnit === \"month\") {\n options.scales.x.time.tooltipFormat = \"MMM yyyy\";\n } else if (timeUnit === \"week\" || timeUnit === \"day\") {\n options.scales.x.time.tooltipFormat = \"PP\";\n } else if (timeUnit === \"hour\") {\n options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n } else if (timeUnit === \"minute\") {\n options.scales.x.time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n }\n\n return {\n labels: labels,\n datasets: datasets\n };\n}\n\nvar defaultExport$2 = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n};\n\ndefaultExport$2.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n if (!chartType) {\n chartType = \"line\";\n }\n\n var chartOptions = {};\n\n var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n setFormatOptions$1(chart, options, chartType);\n\n var data = createDataTable(chart, options, chartType);\n\n if (chart.xtype === \"number\") {\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n } else {\n options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n};\n\ndefaultExport$2.prototype.renderPieChart = function renderPieChart (chart) {\n var options = merge({}, baseOptions);\n if (chart.options.donut) {\n options.cutout = \"50%\";\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$2(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$2(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n\n var labels = [];\n var values = [];\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n\n this.drawChart(chart, \"pie\", data, options);\n};\n\ndefaultExport$2.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n var options;\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions$2);\n barOptions.indexAxis = \"y\";\n\n // ensure gridlines have proper orientation\n barOptions.scales.x.grid.drawOnChartArea = true;\n barOptions.scales.y.grid.drawOnChartArea = false;\n delete barOptions.scales.y.ticks.maxTicksLimit;\n\n options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n } else {\n options = jsOptions$2(chart, chart.options);\n }\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\");\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"index\";\n }\n this.drawChart(chart, \"bar\", data, options);\n};\n\ndefaultExport$2.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"area\");\n};\n\ndefaultExport$2.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$2.prototype.renderScatterChart = function renderScatterChart (chart, chartType) {\n chartType = chartType || \"scatter\";\n\n var options = jsOptions$2(chart, chart.options);\n setFormatOptions$1(chart, options, chartType);\n\n if (!(\"showLine\" in options)) {\n options.showLine = false;\n }\n\n var data = createDataTable(chart, options, chartType);\n\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n\n // prevent grouping hover and tooltips\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"nearest\";\n }\n\n this.drawChart(chart, chartType, data, options);\n};\n\ndefaultExport$2.prototype.renderBubbleChart = function renderBubbleChart (chart) {\n this.renderScatterChart(chart, \"bubble\");\n};\n\ndefaultExport$2.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n};\n\ndefaultExport$2.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n};\n\nvar defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n },\n time: {\n useUTC: false\n }\n};\n\nfunction hideLegend$1(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n}\n\nfunction setTitle$1(options, title) {\n options.title.text = title;\n}\n\nfunction setMin$1(options, min) {\n options.yAxis.min = min;\n}\n\nfunction setMax$1(options, max) {\n options.yAxis.max = max;\n}\n\nfunction setStacked$1(options, stacked) {\n var stackedValue = stacked ? (stacked === true ? \"normal\" : stacked) : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n}\n\nfunction setXtitle$1(options, title) {\n options.xAxis.title.text = title;\n}\n\nfunction setYtitle$1(options, title) {\n options.yAxis.title.text = title;\n}\n\nvar jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\nfunction setFormatOptions(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n // skip when axis is an array (like with min/max)\n if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n options.tooltip.pointFormatter = function () {\n return '\\u25CF ' + formatValue(this.series.name + ': ', this.y, formatOptions) + '
';\n };\n }\n}\n\nvar defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n};\n\ndefaultExport$1.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions);\n if (chart.xtype === \"number\") {\n options.xAxis.type = options.xAxis.type || \"linear\";\n } else {\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n }\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n setFormatOptions(chart, options, chartType);\n\n var series = chart.data;\n for (var i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n var data = series[i].data;\n if (chart.xtype === \"datetime\") {\n for (var j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n } else if (chart.xtype === \"number\") {\n data.sort(sortByNumberSeries);\n }\n series[i].marker = {symbol: \"circle\"};\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderScatterChart = function renderScatterChart (chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n};\n\ndefaultExport$1.prototype.renderPieChart = function renderPieChart (chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.plotOptions = {pie: {innerSize: \"50%\"}};\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n\n this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options);\n var rows = [];\n var categories = [];\n options.chart.type = chartType;\n setFormatOptions(chart, options, chartType);\n\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n for (var j = 0; j < s.data.length; j++) {\n var d = s.data[j];\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n\n var newSeries = [];\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var d$1 = [];\n for (var j$1 = 0; j$1 < categories.length; j$1++) {\n d$1.push(rows[categories[j$1]][i$1] || 0);\n }\n\n var d2 = {\n name: series[i$1].name || \"Value\",\n data: d$1\n };\n if (series[i$1].stack) {\n d2.stack = series[i$1].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n};\n\ndefaultExport$1.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$1.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"areaspline\");\n};\n\ndefaultExport$1.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n};\n\ndefaultExport$1.prototype.drawChart = function drawChart (chart, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n};\n\nvar loaded = {};\nvar callbacks = [];\n\n// Set chart options\nvar defaultOptions = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n};\n\nfunction hideLegend(options, legend, hideLegend) {\n if (legend !== undefined) {\n var position;\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n options.legend.position = position;\n } else if (hideLegend) {\n options.legend.position = \"none\";\n }\n}\n\nfunction setTitle(options, title) {\n options.title = title;\n options.titleTextStyle = {color: \"#333\", fontSize: \"20px\"};\n}\n\nfunction setMin(options, min) {\n options.vAxis.viewWindow.min = min;\n}\n\nfunction setMax(options, max) {\n options.vAxis.viewWindow.max = max;\n}\n\nfunction setBarMin(options, min) {\n options.hAxis.viewWindow.min = min;\n}\n\nfunction setBarMax(options, max) {\n options.hAxis.viewWindow.max = max;\n}\n\nfunction setStacked(options, stacked) {\n options.isStacked = stacked || false;\n}\n\nfunction setXtitle(options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n}\n\nfunction setYtitle(options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n}\n\nvar jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\nfunction resize(callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n callback();\n}\n\nvar defaultExport = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n};\n\ndefaultExport.prototype.renderLineChart = function renderLineChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"LineChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderPieChart = function renderPieChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n if (\"legend\" in chart.options) {\n hideLegend(chartOptions, chart.options.legend);\n }\n if (chart.options.title) {\n setTitle(chartOptions, chart.options.title);\n }\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n\n this$1$1.drawChart(chart, \"PieChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderColumnChart = function renderColumnChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var options = jsOptions(chart, chart.options);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderBarChart = function renderBarChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"BarChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderAreaChart = function renderAreaChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"AreaChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderGeoChart = function renderGeoChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n\n this$1$1.drawChart(chart, \"GeoChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderScatterChart = function renderScatterChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions(chart, chart.options, chartOptions);\n\n var series = chart.data;\n var rows2 = [];\n for (var i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n var d = series[i].data;\n for (var j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n data.addColumn(\"number\", series[i$1].name);\n }\n data.addRows(rows2);\n\n this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderTimeline = function renderTimeline (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn({type: \"string\", id: \"Name\"});\n data.addColumn({type: \"date\", id: \"Start\"});\n data.addColumn({type: \"date\", id: \"End\"});\n data.addRows(chart.data);\n\n chart.element.style.lineHeight = \"normal\";\n\n this$1$1.drawChart(chart, \"Timeline\", data, options);\n });\n};\n\n// TODO remove resize events\ndefaultExport.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n};\n\ndefaultExport.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n};\n\ndefaultExport.prototype.waitForLoaded = function waitForLoaded (chart, pack, callback) {\n var this$1$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({pack: pack, callback: callback});\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true;\n\n // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n var loadOptions = {\n packages: [pack],\n callback: function () { this$1$1.runCallbacks(); }\n };\n var config = chart.__config();\n if (config.language) {\n loadOptions.language = config.language;\n }\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n};\n\ndefaultExport.prototype.runCallbacks = function runCallbacks () {\n for (var i = 0; i < callbacks.length; i++) {\n var cb = callbacks[i];\n var call = this.library.visualization && ((cb.pack === \"corechart\" && this.library.visualization.LineChart) || (cb.pack === \"timeline\" && this.library.visualization.Timeline) || (cb.pack === \"geochart\" && this.library.visualization.GeoChart));\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n};\n\n// cant use object as key\ndefaultExport.prototype.createDataTable = function createDataTable (series, columnType) {\n var rows = [];\n var sortedLabels = [];\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (var j = 0; j < s.data.length; j++) {\n var d = s.data[j];\n var key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n rows[key][i] = d[1];\n }\n }\n\n var rows2 = [];\n var values = [];\n for (var j$1 = 0; j$1 < sortedLabels.length; j$1++) {\n var i$1 = sortedLabels[j$1];\n var value = (void 0);\n if (columnType === \"datetime\") {\n value = new Date(i$1);\n values.push(value);\n } else {\n value = i$1;\n }\n rows2.push([value].concat(rows[i$1]));\n }\n\n var day = true;\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n\n var timeUnit = calculateTimeUnit(values, true);\n day = isDay(timeUnit);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (var i$2 = 0; i$2 < rows2.length; i$2++) {\n rows2[i$2][0] = toStr(rows2[i$2][0]);\n }\n\n columnType = \"string\";\n }\n\n // create datatable\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n for (var i$3 = 0; i$3 < series.length; i$3++) {\n data.addColumn(\"number\", series[i$3].name);\n }\n data.addRows(rows2);\n\n return data;\n};\n\nvar adapters = [];\n\nfunction getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport;\n } else if (isFunction(library)) {\n return defaultExport$2;\n }\n }\n throw new Error(\"Unknown adapter\");\n}\n\nfunction addAdapter(library) {\n var adapterType = getAdapterType(library);\n\n for (var i = 0; i < adapters.length; i++) {\n if (adapters[i].library === library) {\n return;\n }\n }\n\n adapters.push(new adapterType(library));\n}\n\nfunction loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n}\n\n// TODO remove chartType if cross-browser way\n// to get the name of the chart class\nfunction callAdapter(chartType, chart) {\n var fnName = \"render\" + chartType;\n var adapterName = chart.options.adapter;\n\n loadAdapters();\n\n for (var i = 0; i < adapters.length; i++) {\n var adapter = adapters[i];\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n}\n\nvar Chartkick = {\n charts: {},\n configure: function (options) {\n for (var key in options) {\n if (Object.prototype.hasOwnProperty.call(options, key)) {\n Chartkick.config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function (opts) {\n Chartkick.options = opts;\n },\n eachChart: function (callback) {\n for (var chartId in Chartkick.charts) {\n if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n destroyAll: function () {\n for (var chartId in Chartkick.charts) {\n if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n Chartkick.charts[chartId].destroy();\n delete Chartkick.charts[chartId];\n }\n }\n },\n config: {},\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function (adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n};\n\nfunction formatSeriesBubble(data) {\n var r = [];\n for (var i = 0; i < data.length; i++) {\n r.push([toFloat(data[i][0]), toFloat(data[i][1]), toFloat(data[i][2])]);\n }\n return r;\n}\n\n// casts data to proper type\n// sorting is left to adapters\nfunction formatSeriesData(data, keyType) {\n if (keyType === \"bubble\") {\n return formatSeriesBubble(data);\n }\n\n var keyFunc;\n if (keyType === \"number\") {\n keyFunc = toFloat;\n } else if (keyType === \"datetime\") {\n keyFunc = toDate;\n } else {\n keyFunc = toStr;\n }\n\n var r = [];\n for (var i = 0; i < data.length; i++) {\n r.push([keyFunc(data[i][0]), toFloat(data[i][1])]);\n }\n return r;\n}\n\nfunction detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n}\n\nfunction detectXTypeWithFunction(series, func) {\n for (var i = 0; i < series.length; i++) {\n var data = toArr(series[i].data);\n for (var j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// creates a shallow copy of each element of the array\n// elements are expected to be objects\nfunction copySeries(series) {\n var newSeries = [];\n for (var i = 0; i < series.length; i++) {\n var copy = {};\n for (var j in series[i]) {\n if (Object.prototype.hasOwnProperty.call(series[i], j)) {\n copy[j] = series[i][j];\n }\n }\n newSeries.push(copy);\n }\n return newSeries;\n}\n\nfunction processSeries(chart, keyType, noDatetime) {\n var opts = chart.options;\n var series = chart.rawData;\n\n // see if one series or multiple\n chart.singleSeriesFormat = !isArray(series) || !isPlainObject(series[0]);\n if (chart.singleSeriesFormat) {\n series = [{name: opts.label, data: series}];\n }\n\n // convert to array\n // must come before dataEmpty check\n series = copySeries(series);\n for (var i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType || (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts));\n\n // right format\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n series[i$1].data = formatSeriesData(series[i$1].data, chart.xtype);\n }\n\n return series;\n}\n\nfunction processSimple(chart) {\n var perfectData = toArr(chart.rawData);\n for (var i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n return perfectData;\n}\n\nfunction dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction addDownloadButton(chart) {\n var download = chart.options.download;\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {filename: download};\n }\n\n var link = document.createElement(\"a\");\n link.download = download.filename || \"chart.png\";\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n\n var image = document.createElement(\"img\");\n // icon from Font Awesome, modified to set fill color\n var svg = \"\";\n image.src = \"data:image/svg+xml;utf8,\" + (encodeURIComponent(svg));\n image.alt = \"Download\";\n image.style.width = \"20px\";\n image.style.height = \"20px\";\n image.style.border = \"none\";\n link.appendChild(image);\n\n var element = chart.element;\n element.style.position = \"relative\";\n\n chart.__downloadAttached = true;\n\n // mouseenter\n chart.__enterEvent = element.addEventListener(\"mouseover\", function (e) {\n var related = e.relatedTarget;\n // check download option again to ensure it wasn't changed\n if ((!related || (related !== this && !this.contains(related))) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n });\n\n // mouseleave\n chart.__leaveEvent = element.addEventListener(\"mouseout\", function (e) {\n var related = e.relatedTarget;\n if (!related || (related !== this && !this.contains(related))) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n}\n\nvar pendingRequests = [];\nvar runningRequests = 0;\nvar maxRequests = 4;\n\nfunction pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n}\n\nfunction runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n}\n\nfunction requestComplete() {\n runningRequests--;\n runNext();\n}\n\nfunction getJSON(url, success, error) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.onload = function () {\n requestComplete();\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText));\n } else {\n error(xhr.statusText);\n }\n };\n xhr.send();\n}\n\n// helpers\n\nfunction setText(element, text) {\n element.textContent = text;\n}\n\n// TODO remove prefix for all messages\nfunction chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n setText(element, message);\n element.style.color = \"#ff0000\";\n}\n\nfunction errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n}\n\nfunction fetchDataSource(chart, dataSource, showLoading) {\n // only show loading message for urls and callbacks\n if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n setText(chart.element, chart.options.loading);\n }\n\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n}\n\nfunction renderChart(chartType, chart) {\n if (dataEmpty(chart.data, chartType)) {\n var message = chart.options.empty || (chart.options.messages && chart.options.messages.empty) || \"No data\";\n setText(chart.element, message);\n } else {\n callAdapter(chartType, chart);\n // TODO add downloadSupported method to adapter\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n}\n\nfunction getElement(element) {\n if (typeof element === \"string\") {\n var elementId = element;\n element = document.getElementById(element);\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n return element;\n}\n\n// define classes\n\nvar Chart = function Chart(element, dataSource, options) {\n this.element = getElement(element);\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n\n // TODO handle charts without an id for eachChart and destroyAll\n if (this.element.id) {\n Chartkick.charts[this.element.id] = this;\n }\n\n fetchDataSource(this, dataSource, true);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n};\n\nChart.prototype.getElement = function getElement () {\n return this.element;\n};\n\nChart.prototype.getDataSource = function getDataSource () {\n return this.dataSource;\n};\n\nChart.prototype.getData = function getData () {\n return this.data;\n};\n\nChart.prototype.getOptions = function getOptions () {\n return this.options;\n};\n\nChart.prototype.getChartObject = function getChartObject () {\n return this.chart;\n};\n\nChart.prototype.getAdapter = function getAdapter () {\n return this.adapter;\n};\n\nChart.prototype.updateData = function updateData (dataSource, options) {\n this.dataSource = dataSource;\n if (options) {\n this.__updateOptions(options);\n }\n fetchDataSource(this, dataSource, true);\n};\n\nChart.prototype.setOptions = function setOptions (options) {\n this.__updateOptions(options);\n this.redraw();\n};\n\nChart.prototype.redraw = function redraw () {\n fetchDataSource(this, this.rawData);\n};\n\nChart.prototype.refreshData = function refreshData () {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + (new Date()).getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n};\n\nChart.prototype.startRefresh = function startRefresh () {\n var this$1$1 = this;\n\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval(function () {\n this$1$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n};\n\nChart.prototype.stopRefresh = function stopRefresh () {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n};\n\nChart.prototype.toImage = function toImage (download) {\n // TODO move logic to adapter\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.canvas;\n var ctx = this.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n throw new Error(\"Feature only available for Chart.js\");\n }\n};\n\nChart.prototype.destroy = function destroy () {\n this.destroyed = true;\n this.stopRefresh();\n\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n this.element.removeEventListener(\"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n this.element.removeEventListener(\"mouseout\", this.__leaveEvent);\n }\n};\n\nChart.prototype.__updateOptions = function __updateOptions (options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n};\n\nChart.prototype.__render = function __render () {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n};\n\nChart.prototype.__config = function __config () {\n return Chartkick.config;\n};\n\nvar LineChart = /*@__PURE__*/(function (Chart) {\n function LineChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create( Chart && Chart.prototype );\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName () {\n return \"LineChart\";\n };\n\n return LineChart;\n}(Chart));\n\nvar PieChart = /*@__PURE__*/(function (Chart) {\n function PieChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create( Chart && Chart.prototype );\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName () {\n return \"PieChart\";\n };\n\n return PieChart;\n}(Chart));\n\nvar ColumnChart = /*@__PURE__*/(function (Chart) {\n function ColumnChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create( Chart && Chart.prototype );\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName () {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n}(Chart));\n\nvar BarChart = /*@__PURE__*/(function (Chart) {\n function BarChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create( Chart && Chart.prototype );\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName () {\n return \"BarChart\";\n };\n\n return BarChart;\n}(Chart));\n\nvar AreaChart = /*@__PURE__*/(function (Chart) {\n function AreaChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create( Chart && Chart.prototype );\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName () {\n return \"AreaChart\";\n };\n\n return AreaChart;\n}(Chart));\n\nvar GeoChart = /*@__PURE__*/(function (Chart) {\n function GeoChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create( Chart && Chart.prototype );\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName () {\n return \"GeoChart\";\n };\n\n return GeoChart;\n}(Chart));\n\nvar ScatterChart = /*@__PURE__*/(function (Chart) {\n function ScatterChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create( Chart && Chart.prototype );\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData () {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName () {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n}(Chart));\n\nvar BubbleChart = /*@__PURE__*/(function (Chart) {\n function BubbleChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create( Chart && Chart.prototype );\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData () {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName () {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n}(Chart));\n\nvar Timeline = /*@__PURE__*/(function (Chart) {\n function Timeline () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create( Chart && Chart.prototype );\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData () {\n var data = this.rawData;\n for (var i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName () {\n return \"Timeline\";\n };\n\n return Timeline;\n}(Chart));\n\nChartkick.LineChart = LineChart;\nChartkick.PieChart = PieChart;\nChartkick.ColumnChart = ColumnChart;\nChartkick.BarChart = BarChart;\nChartkick.AreaChart = AreaChart;\nChartkick.GeoChart = GeoChart;\nChartkick.ScatterChart = ScatterChart;\nChartkick.BubbleChart = BubbleChart;\nChartkick.Timeline = Timeline;\n\n// not ideal, but allows for simpler integration\nif (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick;\n\n // clean up previous charts before Turbolinks loads new page\n document.addEventListener(\"turbolinks:before-render\", function () {\n if (Chartkick.config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n });\n\n // clean up previous charts before Turbo loads new page\n document.addEventListener(\"turbo:before-render\", function () {\n if (Chartkick.config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n });\n\n // use setTimeout so charting library can come later in same JS file\n setTimeout(function () {\n window.dispatchEvent(new Event(\"chartkick:load\"));\n }, 0);\n}\n\n// backwards compatibility for esm require\nChartkick.default = Chartkick;\n\nexport { Chartkick as default };\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.7\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.7\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.7\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(date, constructor) {\n const date_ = isConstructor(constructor)\n ? new constructor(0)\n : constructFrom(constructor, 0);\n date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n date_.setHours(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n return date_;\n}\n\nfunction isConstructor(constructor) {\n return (\n typeof constructor === \"function\" &&\n constructor.prototype?.constructor === constructor\n );\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n\n constructor(context, reference) {\n super();\n this.context = context || ((date) => constructFrom(reference, date));\n }\n\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, this.context));\n }\n}\n","import { ValueSetter } from \"./Setter.js\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.js\";\n\nimport { numericPatterns } from \"./constants.js\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const date_ = toDate(date, options?.in);\n const diff = getWeek(date_, options) - week;\n date_.setDate(date_.getDate() - diff * 7);\n return toDate(date_, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week, options) {\n const _date = toDate(date, options?.in);\n const diff = getISOWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n if (!amount) return _date;\n\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const date_ = toDate(date, options?.in);\n const currentDay = date_.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date, options) {\n const day = toDate(date, options?.in).getDay();\n return day === 0 ? 7 : day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day, options) {\n const date_ = toDate(date, options?.in);\n const currentDay = getISODay(date_, options);\n const diff = day - currentDay;\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { Parser } from \"../Parser.js\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.js\";\n\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (!formatStr)\n return dateStr ? invalidDate() : toDate(referenceDate, options?.in);\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will try to use the context or\n // the reference date and fallback to the system time zone.\n const setters = [new DateTimezoneSetter(options?.in, referenceDate)];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return invalidDate();\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return invalidDate();\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return invalidDate();\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate, options?.in);\n\n if (isNaN(+date)) return invalidDate();\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return invalidDate();\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return date;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const invalidDate = () => constructFrom(options?.in, NaN);\n\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(+date)) return invalidDate();\n\n const timestamp = +date;\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) return invalidDate();\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) return invalidDate();\n } else {\n const tmpDate = new Date(timestamp + time);\n const result = toDate(0, options?.in);\n result.setFullYear(\n tmpDate.getUTCFullYear(),\n tmpDate.getUTCMonth(),\n tmpDate.getUTCDate(),\n );\n result.setHours(\n tmpDate.getUTCHours(),\n tmpDate.getUTCMinutes(),\n tmpDate.getUTCSeconds(),\n tmpDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n const _date = toDate(date, options?.in);\n _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addQuarters} function options.\n */\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n * @param options - An object with options\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=; Mon Dec 01 2014 00:00:00\n */\nexport function addQuarters(date, amount, options) {\n return addMonths(date, amount * 3, options);\n}\n\n// Fallback for modularized imports:\nexport default addQuarters;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","export function getRoundingMethod(method) {\n return (number) => {\n const round = method ? Math[method] : Math.trunc;\n const result = round(number);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n };\n}\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(laterDate, earlierDate, options) {\n const diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { millisecondsInMinute } from \"./constants.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInMinutes} function options.\n */\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of minutes\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport function differenceInMinutes(dateLeft, dateRight, options) {\n const diff =\n differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMinutes;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link differenceInHours} function options.\n */\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport function differenceInHours(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n const diff = (+laterDate_ - +earlierDate_) / millisecondsInHour;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInHours;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\n\n/**\n * The {@link differenceInDays} function options.\n */\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n * //=> 92\n */\nexport function differenceInDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const sign = compareLocalAsc(laterDate_, earlierDate_);\n const difference = Math.abs(\n differenceInCalendarDays(laterDate_, earlierDate_),\n );\n\n laterDate_.setDate(laterDate_.getDate() - sign * difference);\n\n // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n const isLastDayNotFull = Number(\n compareLocalAsc(laterDate_, earlierDate_) === -sign,\n );\n\n const result = sign * (difference - isLastDayNotFull);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}\n\n// Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(laterDate, earlierDate) {\n const diff =\n laterDate.getFullYear() - earlierDate.getFullYear() ||\n laterDate.getMonth() - earlierDate.getMonth() ||\n laterDate.getDate() - earlierDate.getDate() ||\n laterDate.getHours() - earlierDate.getHours() ||\n laterDate.getMinutes() - earlierDate.getMinutes() ||\n laterDate.getSeconds() - earlierDate.getSeconds() ||\n laterDate.getMilliseconds() - earlierDate.getMilliseconds();\n\n if (diff < 0) return -1;\n if (diff > 0) return 1;\n\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInDays;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInDays } from \"./differenceInDays.js\";\n\n/**\n * The {@link differenceInWeeks} function options.\n */\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full weeks\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * @example\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 6)\n * )\n * //=> 8\n */\nexport function differenceInWeeks(laterDate, earlierDate, options) {\n const diff = differenceInDays(laterDate, earlierDate, options) / 7;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInWeeks;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport function compareAsc(dateLeft, dateRight) {\n const diff = +toDate(dateLeft) - +toDate(dateRight);\n\n if (diff < 0) return -1;\n else if (diff > 0) return 1;\n\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n}\n\n// Fallback for modularized imports:\nexport default compareAsc;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { endOfDay } from \"./endOfDay.js\";\nimport { endOfMonth } from \"./endOfMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport function isLastDayOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n return +endOfDay(_date, options) === +endOfMonth(_date, options);\n}\n\n// Fallback for modularized imports:\nexport default isLastDayOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.js\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.js\";\n\n/**\n * The {@link differenceInMonths} function options.\n */\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport function differenceInMonths(laterDate, earlierDate, options) {\n const [laterDate_, workingLaterDate, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n laterDate,\n earlierDate,\n );\n\n const sign = compareAsc(workingLaterDate, earlierDate_);\n const difference = Math.abs(\n differenceInCalendarMonths(workingLaterDate, earlierDate_),\n );\n\n if (difference < 1) return 0;\n\n if (workingLaterDate.getMonth() === 1 && workingLaterDate.getDate() > 27)\n workingLaterDate.setDate(30);\n\n workingLaterDate.setMonth(workingLaterDate.getMonth() - sign * difference);\n\n let isLastMonthNotFull = compareAsc(workingLaterDate, earlierDate_) === -sign;\n\n if (\n isLastDayOfMonth(laterDate_) &&\n difference === 1 &&\n compareAsc(laterDate_, earlierDate_) === 1\n ) {\n isLastMonthNotFull = false;\n }\n\n const result = sign * (difference - +isLastMonthNotFull);\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInMonths;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMonths } from \"./differenceInMonths.js\";\n\n/**\n * The {@link differenceInQuarters} function options.\n */\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of full quarters\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport function differenceInQuarters(laterDate, earlierDate, options) {\n const diff = differenceInMonths(laterDate, earlierDate, options) / 3;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInQuarters;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * );\n * //=> 2\n */\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return laterDate_.getFullYear() - earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarYears } from \"./differenceInCalendarYears.js\";\n\n/**\n * The {@link differenceInYears} function options.\n */\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full years\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport function differenceInYears(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n // -1 if the left date is earlier than the right date\n // 2023-12-31 - 2024-01-01 = -1\n const sign = compareAsc(laterDate_, earlierDate_);\n\n // First calculate the difference in calendar years\n // 2024-01-01 - 2023-12-31 = 1 year\n const diff = Math.abs(differenceInCalendarYears(laterDate_, earlierDate_));\n\n // Now we need to calculate if the difference is full. To do that we set\n // both dates to the same year and check if the both date's month and day\n // form a full year.\n laterDate_.setFullYear(1584);\n earlierDate_.setFullYear(1584);\n\n // For it to be true, when the later date is indeed later than the earlier date\n // (2026-02-01 - 2023-12-10 = 3 years), the difference is full if\n // the normalized later date is also later than the normalized earlier date.\n // In our example, 1584-02-01 is earlier than 1584-12-10, so the difference\n // is partial, hence we need to subtract 1 from the difference 3 - 1 = 2.\n const partial = compareAsc(laterDate_, earlierDate_) === -sign;\n\n const result = sign * (diff - +partial);\n\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInYears;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfSecond} function options.\n */\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a second\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport function startOfSecond(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setMilliseconds(0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfSecond;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMinute} function options.\n */\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a minute\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport function startOfMinute(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setSeconds(0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfMinute;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfHour} function options.\n */\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an hour\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport function startOfHour(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMinutes(0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfHour;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date, options) {\n const _date = toDate(date, options?.in);\n const currentMonth = _date.getMonth();\n const month = currentMonth - (currentMonth % 3);\n _date.setMonth(month, 1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfSecond} function options.\n */\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone if no `in` option is specified.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a second\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport function endOfSecond(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMilliseconds(999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfSecond;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMinute} function options.\n */\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone or the provided context.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a minute\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport function endOfMinute(date, options) {\n const _date = toDate(date, options?.in);\n _date.setSeconds(59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMinute;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfHour} function options.\n */\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of an hour\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport function endOfHour(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMinutes(59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfHour;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n _date.setDate(_date.getDate() + diff);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfQuarter} function options.\n */\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfQuarter(date, options) {\n const _date = toDate(date, options?.in);\n const currentMonth = _date.getMonth();\n const month = currentMonth - (currentMonth % 3) + 3;\n _date.setMonth(month, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n _date.setFullYear(year + 1, 0, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n","/*!\n * chartjs-adapter-date-fns v3.0.0\n * https://www.chartjs.org\n * (c) 2022 chartjs-adapter-date-fns Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { toDate, parse, parseISO, isValid, format, addYears, addQuarters, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addMilliseconds, differenceInYears, differenceInQuarters, differenceInMonths, differenceInWeeks, differenceInDays, differenceInHours, differenceInMinutes, differenceInSeconds, differenceInMilliseconds, startOfYear, startOfQuarter, startOfMonth, startOfWeek, startOfDay, startOfHour, startOfMinute, startOfSecond, endOfYear, endOfQuarter, endOfMonth, endOfWeek, endOfDay, endOfHour, endOfMinute, endOfSecond } from 'date-fns';\n\nconst FORMATS = {\n datetime: 'MMM d, yyyy, h:mm:ss aaaa',\n millisecond: 'h:mm:ss.SSS aaaa',\n second: 'h:mm:ss aaaa',\n minute: 'h:mm aaaa',\n hour: 'ha',\n day: 'MMM d',\n week: 'PP',\n month: 'MMM yyyy',\n quarter: 'qqq - yyyy',\n year: 'yyyy'\n};\n\n_adapters._date.override({\n _id: 'date-fns', // DEBUG\n\n formats: function() {\n return FORMATS;\n },\n\n parse: function(value, fmt) {\n if (value === null || typeof value === 'undefined') {\n return null;\n }\n const type = typeof value;\n if (type === 'number' || value instanceof Date) {\n value = toDate(value);\n } else if (type === 'string') {\n if (typeof fmt === 'string') {\n value = parse(value, fmt, new Date(), this.options);\n } else {\n value = parseISO(value, this.options);\n }\n }\n return isValid(value) ? value.getTime() : null;\n },\n\n format: function(time, fmt) {\n return format(time, fmt, this.options);\n },\n\n add: function(time, amount, unit) {\n switch (unit) {\n case 'millisecond': return addMilliseconds(time, amount);\n case 'second': return addSeconds(time, amount);\n case 'minute': return addMinutes(time, amount);\n case 'hour': return addHours(time, amount);\n case 'day': return addDays(time, amount);\n case 'week': return addWeeks(time, amount);\n case 'month': return addMonths(time, amount);\n case 'quarter': return addQuarters(time, amount);\n case 'year': return addYears(time, amount);\n default: return time;\n }\n },\n\n diff: function(max, min, unit) {\n switch (unit) {\n case 'millisecond': return differenceInMilliseconds(max, min);\n case 'second': return differenceInSeconds(max, min);\n case 'minute': return differenceInMinutes(max, min);\n case 'hour': return differenceInHours(max, min);\n case 'day': return differenceInDays(max, min);\n case 'week': return differenceInWeeks(max, min);\n case 'month': return differenceInMonths(max, min);\n case 'quarter': return differenceInQuarters(max, min);\n case 'year': return differenceInYears(max, min);\n default: return 0;\n }\n },\n\n startOf: function(time, unit, weekday) {\n switch (unit) {\n case 'second': return startOfSecond(time);\n case 'minute': return startOfMinute(time);\n case 'hour': return startOfHour(time);\n case 'day': return startOfDay(time);\n case 'week': return startOfWeek(time);\n case 'isoWeek': return startOfWeek(time, {weekStartsOn: +weekday});\n case 'month': return startOfMonth(time);\n case 'quarter': return startOfQuarter(time);\n case 'year': return startOfYear(time);\n default: return time;\n }\n },\n\n endOf: function(time, unit) {\n switch (unit) {\n case 'second': return endOfSecond(time);\n case 'minute': return endOfMinute(time);\n case 'hour': return endOfHour(time);\n case 'day': return endOfDay(time);\n case 'week': return endOfWeek(time);\n case 'month': return endOfMonth(time);\n case 'quarter': return endOfQuarter(time);\n case 'year': return endOfYear(time);\n default: return time;\n }\n }\n});\n","import Chartkick from \"chartkick\"\nimport Chart from \"chart.js/auto\"\nimport \"chartjs-adapter-date-fns\"\n\nChartkick.use(Chart)\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","tinymce.IconManager.add('default', {\n icons: {\n 'accessibility-check': '',\n 'accordion-toggle': '',\n 'accordion': '',\n 'action-next': '',\n 'action-prev': '',\n 'addtag': '',\n 'ai-prompt': '',\n 'ai': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-style': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'cell-background-color': '',\n 'cell-border-color': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut-column': '',\n 'cut-row': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate-column': '',\n 'duplicate-row': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'export': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'footnote': '',\n 'format-code': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'language': '',\n 'line-height': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'math-equation': '',\n 'mentions': '',\n 'minus': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'export-pdf': '',\n 'export-word': '',\n 'import-word': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-column-after': '',\n 'paste-column-before': '',\n 'paste-row-after': '',\n 'paste-row-before': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'revision-history': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'send': '',\n 'settings': '',\n 'sharpen': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-caption': '',\n 'table-cell-classes': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-classes': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-numbering-rtl': '',\n 'table-row-numbering': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template-add': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'text-size-decrease': '',\n 'text-size-increase': '',\n 'toc': '',\n 'translate': '',\n 'typography': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'user': '',\n 'vertical-align': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': '',\n }\n});","// Exports the \"default\" icons for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/icons/default')\n// ES2015:\n// import 'tinymce/icons/default'\nrequire('./icons.js');","// Exports the \"dom\" model for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/models/dom')\n// ES2015:\n// import 'tinymce/models/dom'\nrequire('./model.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$2 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$2 = (xs, f) => flatten(map$1(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$1(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$5 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$2 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$a(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$a(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$1 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$1(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$1,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const isRow$2 = isTag('tr');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const removeHeight = cell => {\n remove$5(cell, 'height');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight$1 = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return isRow$2(cell) ? get$8(cell) : get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPixelTableHeight = table => get$8(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight$1(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, getHeight, fallback) => {\n const rowCells = rows(warehouse);\n const rows$1 = map$1(warehouse.all, r => Optional.some(r.element));\n const backups = [Optional.some(height.edge(table))].concat(map$1(height.positions(rowCells, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (row, i) => getDimension(row, i, backups, always, getHeight, fallback));\n };\n const getPixelHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem);\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_merge_content_on_paste', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawValue = prop => (editor, elm) => {\n const raw = editor.dom.getStyle(elm, prop) || editor.dom.getAttrib(elm, prop);\n return Optional.from(raw).filter(isNotEmpty);\n };\n const getRawWidth = getRawValue('width');\n const getRawHeight = getRawValue('height');\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = (editor, replicaElements) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$2(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0',\n overflow: 'hidden',\n opacity: '0'\n });\n const root = getContentContainer(dos);\n append(offscreenDiv, replicaElements);\n append$1(root, offscreenDiv);\n const textContent = offscreenDiv.dom.innerText;\n remove$6(offscreenDiv);\n return textContent;\n };\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(replicaElements => {\n const content = e.format === 'text' ? getTextContent(editor, replicaElements) : serializeElements(editor, replicaElements);\n e.content = content;\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(Warehouse.justCells(warehouse), cell => {\n removeHeight(cell.element);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = Math.max(extractGridDetails(newGrid).rows.length - 1, 0);\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, index);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, index, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells) => {\n each$2(cells, cell => {\n remove$5(cell.element, 'height');\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n remove$7(element, 'height');\n };\n const convertToPercentSizeWidth = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeWidth = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeHeight = table => {\n const newHeight = getPixelTableHeight(table);\n redistribute(table, Optional.none(), Optional.some(newHeight));\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSizeWidth = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSizeWidth(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSizeWidth(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSizeWidth(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSizeWidth(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSizeWidth(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint = (win, x, y) => {\n const doc = win.document;\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cellsDom = map$1(cells, cell => cell.dom);\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCellsDom = getOtherCells(table, { selection: selectedCells }, generators).map(otherCells => map(otherCells, cellArr => map$1(cellArr, cell => cell.dom))).getOrUndefined();\n fireTableSelectionChange(editor, cellsDom, start.dom, finish.dom, otherCellsDom);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const isActive = () => active;\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n isActive,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n if (resizing.isActive()) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n }\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body\n };\n\n const createContainer = () => {\n const container = SugarElement.fromTag('div');\n setAll(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append$1(body$1(), container);\n return container;\n };\n const get = (editor, isResizable) => {\n return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncTableCellPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const isCornerResize = origin => startsWith(origin, 'corner-');\n const getCornerLocation = origin => removeLeading(origin, 'corner-');\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n let startH;\n let startRawH;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const getNumRows = table => getGridSize(table).rows;\n const afterCornerResize = (table, origin, width, height) => {\n const location = getCornerLocation(origin);\n const isRightEdgeResize = endsWith(location, 'e');\n const isNorthEdgeResize = startsWith(location, 'n');\n if (startRawW === '') {\n convertToPercentSizeWidth(table);\n }\n if (startRawH === '') {\n convertToPixelSizeHeight(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncTableCellPixels(table);\n }\n if (height !== startH && startRawH !== '') {\n set$1(table, 'height', startRawH);\n const idx = isNorthEdgeResize ? 0 : getNumRows(table) - 1;\n adjustHeight(table, height - startH, idx);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n if (!editor.mode.isReadOnly()) {\n sz.on();\n }\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm) && !editor.mode.isReadOnly()) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSizeWidth(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSizeWidth(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n startH = e.height;\n startRawH = getRawHeight(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (isCornerResize(origin)) {\n afterCornerResize(table, origin, e.width, e.height);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', () => {\n tableResize.on(resize => {\n if (editor.mode.isReadOnly()) {\n resize.off();\n resize.hideBars();\n } else {\n resize.on();\n resize.showBars();\n }\n });\n });\n editor.on('dragstart dragend', e => {\n tableResize.on(resize => {\n if (e.type === 'dragstart') {\n resize.hideBars();\n resize.off();\n } else {\n resize.on();\n resize.showBars();\n }\n });\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const applyListFormat = (editor, listName, styleValue) => {\n const cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n const register$2 = editor => {\n editor.addCommand('ApplyUnorderedListStyle', (ui, value) => {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', (ui, value) => {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('advlist_number_styles', {\n processor: 'string[]',\n default: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'.split(',')\n });\n registerOption('advlist_bullet_styles', {\n processor: 'string[]',\n default: 'default,circle,square'.split(',')\n });\n };\n const getNumberStyles = option('advlist_number_styles');\n const getBulletStyles = option('advlist_bullet_styles');\n\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const isChildOfBody = (editor, elm) => {\n return editor.dom.isChildOf(elm, editor.getBody());\n };\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const inList = (editor, parents, nodeName) => findUntil(parents, parent => isListNode(parent) && !isCustomList(parent), isTableCellNode).exists(list => list.nodeName === nodeName && isChildOfBody(editor, list));\n const getSelectedStyleType = editor => {\n const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n const style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const styleValueToText = styleValue => {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, chr => {\n return chr.toUpperCase();\n });\n };\n const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;\n const makeSetupHandler = (editor, nodeName) => api => {\n const updateButtonState = (editor, parents) => {\n const element = editor.selection.getStart(true);\n api.setActive(inList(editor, parents, nodeName));\n api.setEnabled(!isWithinNonEditableList(editor, element));\n };\n const nodeChangeHandler = e => updateButtonState(editor, e.parents);\n return setNodeChangeHandler(editor, nodeChangeHandler);\n };\n const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {\n editor.ui.registry.addSplitButton(id, {\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: callback => {\n const items = global.map(styles, styleValue => {\n const iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n const iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n const itemValue = normalizeStyleValue(styleValue);\n const displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: () => editor.execCommand(cmd),\n onItemAction: (_splitButtonApi, value) => {\n applyListFormat(editor, nodeName, value);\n },\n select: value => {\n const listStyleType = getSelectedStyleType(editor);\n return listStyleType.map(listStyle => value === listStyle).getOr(false);\n },\n onSetup: makeSetupHandler(editor, nodeName)\n });\n };\n const addButton = (editor, id, tooltip, cmd, nodeName, styleValue) => {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: makeSetupHandler(editor, nodeName),\n onAction: () => editor.queryCommandState(cmd) || styleValue === '' ? editor.execCommand(cmd) : applyListFormat(editor, nodeName, styleValue)\n });\n };\n const addControl = (editor, id, tooltip, cmd, nodeName, styles) => {\n if (styles.length > 1) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName, normalizeStyleValue(styles[0]));\n }\n };\n const register = editor => {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n var Plugin = () => {\n global$1.add('advlist', editor => {\n if (editor.hasPlugin('lists')) {\n register$1(editor);\n register(editor);\n register$2(editor);\n } else {\n console.error('Please use the Lists plugin together with the List Styles plugin.');\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const fireResizeEditor = editor => editor.dispatch('ResizeEditor');\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('autoresize_overflow_padding', {\n processor: 'number',\n default: 1\n });\n registerOption('autoresize_bottom_margin', {\n processor: 'number',\n default: 50\n });\n };\n const getMinHeight = option('min_height');\n const getMaxHeight = option('max_height');\n const getAutoResizeOverflowPadding = option('autoresize_overflow_padding');\n const getAutoResizeBottomMargin = option('autoresize_bottom_margin');\n\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const toggleScrolling = (editor, state) => {\n const body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n const parseCssValueToInt = (dom, elm, name, computed) => {\n var _a;\n const value = parseInt((_a = dom.getStyle(elm, name, computed)) !== null && _a !== void 0 ? _a : '', 10);\n return isNaN(value) ? 0 : value;\n };\n const shouldScrollIntoView = trigger => {\n if ((trigger === null || trigger === void 0 ? void 0 : trigger.type.toLowerCase()) === 'setcontent') {\n const setContentEvent = trigger;\n return setContentEvent.selection === true || setContentEvent.paste === true;\n } else {\n return false;\n }\n };\n const resize = (editor, oldSize, trigger, getExtraMarginBottom) => {\n var _a;\n const dom = editor.dom;\n const doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n const docEle = doc.documentElement;\n const resizeBottomMargin = getExtraMarginBottom ? getExtraMarginBottom() : getAutoResizeOverflowPadding(editor);\n const minHeight = (_a = getMinHeight(editor)) !== null && _a !== void 0 ? _a : editor.getElement().offsetHeight;\n let resizeHeight = minHeight;\n const marginTop = parseCssValueToInt(dom, docEle, 'margin-top', true);\n const marginBottom = parseCssValueToInt(dom, docEle, 'margin-bottom', true);\n let contentHeight = docEle.offsetHeight + marginTop + marginBottom + resizeBottomMargin;\n if (contentHeight < 0) {\n contentHeight = 0;\n }\n const containerHeight = editor.getContainer().offsetHeight;\n const contentAreaHeight = editor.getContentAreaContainer().offsetHeight;\n const chromeHeight = containerHeight - contentAreaHeight;\n if (contentHeight + chromeHeight > minHeight) {\n resizeHeight = contentHeight + chromeHeight;\n }\n const maxHeight = getMaxHeight(editor);\n if (maxHeight && resizeHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n const old = oldSize.get();\n if (old.set) {\n editor.dom.setStyles(editor.getDoc().documentElement, { 'min-height': 0 });\n editor.dom.setStyles(editor.getBody(), { 'min-height': 'inherit' });\n }\n if (resizeHeight !== old.totalHeight && (contentHeight - resizeBottomMargin !== old.contentHeight || !old.set)) {\n const deltaSize = resizeHeight - old.totalHeight;\n dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px');\n oldSize.set({\n totalHeight: resizeHeight,\n contentHeight,\n set: true\n });\n fireResizeEditor(editor);\n if (global.browser.isSafari() && (global.os.isMacOS() || global.os.isiOS())) {\n const win = editor.getWin();\n win.scrollTo(win.pageXOffset, win.pageYOffset);\n }\n if (editor.hasFocus() && shouldScrollIntoView(trigger)) {\n editor.selection.scrollIntoView();\n }\n if ((global.browser.isSafari() || global.browser.isChromium()) && deltaSize < 0) {\n resize(editor, oldSize, trigger, getExtraMarginBottom);\n }\n }\n };\n const setup = (editor, oldSize) => {\n const getExtraMarginBottom = () => getAutoResizeBottomMargin(editor);\n editor.on('init', e => {\n const overflowPadding = getAutoResizeOverflowPadding(editor);\n const dom = editor.dom;\n dom.setStyles(editor.getDoc().documentElement, { height: 'auto' });\n if (global.browser.isEdge() || global.browser.isIE()) {\n dom.setStyles(editor.getBody(), {\n 'paddingLeft': overflowPadding,\n 'paddingRight': overflowPadding,\n 'min-height': 0\n });\n } else {\n dom.setStyles(editor.getBody(), {\n paddingLeft: overflowPadding,\n paddingRight: overflowPadding\n });\n }\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', e => {\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n };\n\n const register = (editor, oldSize) => {\n editor.addCommand('mceAutoResize', () => {\n resize(editor, oldSize);\n });\n };\n\n var Plugin = () => {\n global$1.add('autoresize', editor => {\n register$1(editor);\n if (!editor.options.isSet('resize')) {\n editor.options.set('resize', false);\n }\n if (!editor.inline) {\n const oldSize = Cell({\n totalHeight: 0,\n contentHeight: 0,\n set: false\n });\n register(editor, oldSize);\n setup(editor, oldSize);\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNull = eq(null);\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('link_assume_external_targets', {\n processor: value => {\n const valid = isString(value) || isBoolean(value);\n if (valid) {\n if (value === true) {\n return {\n value: 1,\n valid\n };\n } else if (value === 'http' || value === 'https') {\n return {\n value,\n valid\n };\n } else {\n return {\n value: 0,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string or a boolean.'\n };\n }\n },\n default: false\n });\n registerOption('link_context_toolbar', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_list', { processor: value => isString(value) || isFunction(value) || isArrayOf(value, isObject) });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n registerOption('link_target_list', {\n processor: value => isBoolean(value) || isArrayOf(value, isObject),\n default: true\n });\n registerOption('link_rel_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_title', {\n processor: 'boolean',\n default: true\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_quicklink', {\n processor: 'boolean',\n default: false\n });\n };\n const assumeExternalTargets = option('link_assume_external_targets');\n const hasContextToolbar = option('link_context_toolbar');\n const getLinkList = option('link_list');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const getTargetList = option('link_target_list');\n const getRelList = option('link_rel_list');\n const getLinkClassList = option('link_class_list');\n const shouldShowLinkTitle = option('link_title');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n const useQuickLink = option('link_quicklink');\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';\n const isLink = elm => isAnchor(elm) && !!getHref(elm);\n const collectNodesInRange = (rng, predicate) => {\n if (rng.collapsed) {\n return [];\n } else {\n const contents = rng.cloneContents();\n const firstChild = contents.firstChild;\n const walker = new global$3(firstChild, contents);\n const elements = [];\n let current = firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n const hasProtocol = url => /^\\w+:/i.test(url);\n const getHref = elm => {\n var _a, _b;\n return (_b = (_a = elm.getAttribute('data-mce-href')) !== null && _a !== void 0 ? _a : elm.getAttribute('href')) !== null && _b !== void 0 ? _b : '';\n };\n const applyRelTargetRules = (rel, isUnsafe) => {\n const rules = ['noopener'];\n const rels = rel ? rel.split(/\\s+/) : [];\n const toString = rels => global$2.trim(rels.sort().join(' '));\n const addTargetRules = rels => {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n const removeTargetRules = rels => rels.filter(val => global$2.inArray(rules, val) === -1);\n const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n const trimCaretContainers = text => text.replace(/\\uFEFF/g, '');\n const getAnchorElement = (editor, selectedElm) => {\n selectedElm = selectedElm || getLinksInSelection(editor.selection.getRng())[0] || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return Optional.from(editor.dom.select('a[href]', selectedElm)[0]);\n } else {\n return Optional.from(editor.dom.getParent(selectedElm, 'a[href]'));\n }\n };\n const isInAnchor = (editor, selectedElm) => getAnchorElement(editor, selectedElm).isSome();\n const getAnchorText = (selection, anchorElm) => {\n const text = anchorElm.fold(() => selection.getContent({ format: 'text' }), anchorElm => anchorElm.innerText || anchorElm.textContent || '');\n return trimCaretContainers(text);\n };\n const getLinksInSelection = rng => collectNodesInRange(rng, isLink);\n const getLinks$1 = elements => global$2.grep(elements, isLink);\n const hasLinks = elements => getLinks$1(elements).length > 0;\n const hasLinksInSelection = rng => getLinksInSelection(rng).length > 0;\n const isOnlyTextSelected = editor => {\n const inlineTextElements = editor.schema.getTextInlineElements();\n const isElement = elm => elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n const isInBlockAnchor = getAnchorElement(editor).exists(anchor => anchor.hasAttribute('data-mce-block'));\n if (isInBlockAnchor) {\n return false;\n }\n const rng = editor.selection.getRng();\n if (!rng.collapsed) {\n const elements = collectNodesInRange(rng, isElement);\n return elements.length === 0;\n } else {\n return true;\n }\n };\n const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n\n const getLinkAttrs = data => {\n const attrs = [\n 'title',\n 'rel',\n 'class',\n 'target'\n ];\n return foldl(attrs, (acc, key) => {\n data[key].each(value => {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n const handleExternalTargets = (href, assumeExternalTargets) => {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n const applyLinkOverrides = (editor, linkAttrs) => {\n const newLinkAttrs = { ...linkAttrs };\n if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n newLinkAttrs.target = getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n const updateLink = (editor, anchorElm, text, linkAttrs) => {\n text.each(text => {\n if (has(anchorElm, 'innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n };\n const createLink = (editor, selectedElm, text, linkAttrs) => {\n const dom = editor.dom;\n if (isImageFigure(selectedElm)) {\n linkImageFigure(dom, selectedElm, linkAttrs);\n } else {\n text.fold(() => {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }, text => {\n editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(text)));\n });\n }\n };\n const linkDomMutation = (editor, attachState, data) => {\n const selectedElm = editor.selection.getNode();\n const anchorElm = getAnchorElement(editor, selectedElm);\n const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n editor.undoManager.transact(() => {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n anchorElm.fold(() => {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }, elm => {\n editor.focus();\n updateLink(editor, elm, data.text, linkAttrs);\n });\n });\n };\n const unlinkSelection = editor => {\n const dom = editor.dom, selection = editor.selection;\n const bookmark = selection.getBookmark();\n const rng = selection.getRng().cloneRange();\n const startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n const endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n if (startAnchorElm) {\n rng.setStartBefore(startAnchorElm);\n }\n if (endAnchorElm) {\n rng.setEndAfter(endAnchorElm);\n }\n selection.setRng(rng);\n editor.execCommand('unlink');\n selection.moveToBookmark(bookmark);\n };\n const unlinkDomMutation = editor => {\n editor.undoManager.transact(() => {\n const node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n const unwrapOptions = data => {\n const {\n class: cls,\n href,\n rel,\n target,\n text,\n title\n } = data;\n return filter({\n class: cls.getOrNull(),\n href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, (v, _k) => isNull(v) === false);\n };\n const sanitizeData = (editor, data) => {\n const getOption = editor.options.get;\n const uriOptions = {\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls')\n };\n const href = data.href;\n return {\n ...data,\n href: global$4.isDomSafe(href, 'a', uriOptions) ? href : ''\n };\n };\n const link = (editor, attachState, data) => {\n const sanitizedData = sanitizeData(editor, data);\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n };\n const unlink = editor => {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n const unlinkImageFigure = (editor, fig) => {\n var _a;\n const img = editor.dom.select('img', fig)[0];\n if (img) {\n const a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n const linkImageFigure = (dom, fig, attrs) => {\n var _a;\n const img = dom.select('img', fig)[0];\n if (img) {\n const a = dom.create('a', attrs);\n (_a = img.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n const getValue = item => isString(item.value) ? item.value : '';\n const getText = item => {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n const sanitizeList = (list, extractValue) => {\n const out = [];\n global$2.each(list, item => {\n const text = getText(item);\n if (item.menu !== undefined) {\n const items = sanitizeList(item.menu, extractValue);\n out.push({\n text,\n items\n });\n } else {\n const value = extractValue(item);\n out.push({\n text,\n value\n });\n }\n });\n return out;\n };\n const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));\n const sanitize = list => sanitizeWith(getValue)(list);\n const createUi = (name, label) => items => ({\n name,\n type: 'listbox',\n label,\n items\n });\n const ListOptions = {\n sanitize,\n sanitizeWith,\n createUi,\n getValue\n };\n\n const isListGroup = item => hasNonNullableKey(item, 'items');\n const findTextByValue = (value, catalog) => findMap(catalog, item => {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const getDelta = (persistentText, fieldName, catalog, data) => {\n const value = data[fieldName];\n const hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(i => ({\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n })) : Optional.none();\n };\n const findCatalog = (catalogs, fieldName) => {\n if (fieldName === 'link') {\n return catalogs.link;\n } else if (fieldName === 'anchor') {\n return catalogs.anchor;\n } else {\n return Optional.none();\n }\n };\n const init = (initialData, linkCatalog) => {\n const persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n const getTitleFromUrlChange = url => {\n var _a;\n return someIf(persistentData.title.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.title).getOr(''));\n };\n const getTextFromUrlChange = url => {\n var _a;\n return someIf(persistentData.text.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.text).getOr(url.value));\n };\n const onUrlChange = data => {\n const text = getTextFromUrlChange(data.url);\n const title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some({\n ...text.map(text => ({ text })).getOr({}),\n ...title.map(title => ({ title })).getOr({})\n });\n } else {\n return Optional.none();\n }\n };\n const onCatalogChange = (data, change) => {\n const catalog = findCatalog(linkCatalog, change).getOr([]);\n return getDelta(persistentData.text, change, catalog, data);\n };\n const onChange = (getData, change) => {\n const name = change.name;\n if (name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], name)) {\n return onCatalogChange(getData(), name);\n } else if (name === 'text' || name === 'title') {\n persistentData[name] = getData()[name];\n return Optional.none();\n } else {\n return Optional.none();\n }\n };\n return { onChange };\n };\n const DialogChanges = {\n init,\n getDelta\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const delayedConfirm = (editor, message, callback) => {\n const rng = editor.selection.getRng();\n global$1.setEditorTimeout(editor, () => {\n editor.windowManager.confirm(message, state => {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n const tryEmailTransform = data => {\n const url = data.href;\n const suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Optional.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: oldData => ({\n ...oldData,\n href: 'mailto:' + url\n })\n }) : Optional.none();\n };\n const tryProtocolTransform = (assumeExternalTargets, defaultLinkProtocol) => data => {\n const url = data.href;\n const suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n return suggestProtocol ? Optional.some({\n message: `The URL you entered seems to be an external link. Do you want to add the required ${ defaultLinkProtocol }:// prefix?`,\n preprocess: oldData => ({\n ...oldData,\n href: defaultLinkProtocol + '://' + url\n })\n }) : Optional.none();\n };\n const preprocess = (editor, data) => findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], f => f(data)).fold(() => Promise.resolve(data), transform => new Promise(callback => {\n delayedConfirm(editor, transform.message, state => {\n callback(state ? transform.preprocess(data) : data);\n });\n }));\n const DialogConfirms = { preprocess };\n\n const getAnchors = editor => {\n const anchorNodes = editor.dom.select('a:not([href])');\n const anchors = bind(anchorNodes, anchor => {\n const id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Optional.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Optional.none();\n };\n const AnchorListOptions = { getAnchors };\n\n const getClasses = editor => {\n const list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n const ClassListOptions = { getClasses };\n\n const parseJson = text => {\n try {\n return Optional.some(JSON.parse(text));\n } catch (err) {\n return Optional.none();\n }\n };\n const getLinks = editor => {\n const extractor = item => editor.convertURL(item.value || item.url || '', 'href');\n const linkList = getLinkList(editor);\n return new Promise(resolve => {\n if (isString(linkList)) {\n fetch(linkList).then(res => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n } else if (isFunction(linkList)) {\n linkList(output => resolve(Optional.some(output)));\n } else {\n resolve(Optional.from(linkList));\n }\n }).then(optItems => optItems.bind(ListOptions.sanitizeWith(extractor)).map(items => {\n if (items.length > 0) {\n const noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n }));\n };\n const LinkListOptions = { getLinks };\n\n const getRels = (editor, initialTarget) => {\n const list = getRelList(editor);\n if (list.length > 0) {\n const isTargetBlank = is(initialTarget, '_blank');\n const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n const safeRelExtractor = item => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n const RelOptions = { getRels };\n\n const fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n const getTargets = editor => {\n const list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(() => Optional.some(fallbacks));\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n const TargetOptions = { getTargets };\n\n const nonEmptyAttr = (dom, elem, name) => {\n const val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n const extractFromAnchor = (editor, anchor) => {\n const dom = editor.dom;\n const onlyText = isOnlyTextSelected(editor);\n const text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n const url = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'href')));\n const target = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'target')));\n const rel = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'rel'));\n const linkClass = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'class'));\n const title = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'title'));\n return {\n url,\n text,\n title,\n target,\n rel,\n linkClass\n };\n };\n const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then(links => {\n const anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: linkNode,\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n const DialogInfo = { collect };\n\n const handleSubmit = (editor, info) => api => {\n const data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n const getChangedValue = key => Optional.from(data[key]).filter(value => !is(info.anchor[key], value));\n const changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n const attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n };\n DialogConfirms.preprocess(editor, changedData).then(pData => {\n link(editor, attachState, pData);\n });\n api.close();\n };\n const collectData = editor => {\n const anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n const getInitialData = (info, defaultTarget) => {\n const anchor = info.anchor;\n const url = anchor.url.getOr('');\n return {\n url: {\n value: url,\n meta: { original: { value: url } }\n },\n text: anchor.text.getOr(''),\n title: anchor.title.getOr(''),\n anchor: url,\n link: url,\n rel: anchor.rel.getOr(''),\n target: anchor.target.or(defaultTarget).getOr(''),\n linkClass: anchor.linkClass.getOr('')\n };\n };\n const makeDialog = (settings, onSubmit, editor) => {\n const urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL',\n picker_text: 'Browse links'\n }];\n const displayText = settings.anchor.text.map(() => ({\n name: 'text',\n type: 'input',\n label: 'Text to display'\n })).toArray();\n const titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n const initialData = getInitialData(settings, defaultTarget);\n const catalogs = settings.catalogs;\n const dialogDelta = DialogChanges.init(initialData, catalogs);\n const body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onChange: (api, {name}) => {\n dialogDelta.onChange(api.getData, { name }).each(newData => {\n api.setData(newData);\n });\n },\n onSubmit\n };\n };\n const open = editor => {\n const data = collectData(editor);\n data.then(info => {\n const onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(spec => {\n editor.windowManager.open(spec);\n });\n };\n\n const register = editor => {\n editor.addCommand('mceLink', (_ui, value) => {\n if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {\n open(editor);\n } else {\n editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });\n }\n });\n };\n\n const setup$2 = editor => {\n editor.addShortcut('Meta+K', '', () => {\n editor.execCommand('mceLink');\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const appendClickRemove = (link, evt) => {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n const openLink = url => {\n const link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n const evt = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n document.dispatchEvent(evt);\n appendClickRemove(link, evt);\n };\n const hasOnlyAltModifier = e => {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n const gotoLink = (editor, a) => {\n if (a) {\n const href = getHref(a);\n if (/^#/.test(href)) {\n const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n openLink(a.href);\n }\n }\n };\n const isSelectionOnImageWithEmbeddedLink = editor => {\n const rng = editor.selection.getRng();\n const node = rng.startContainer;\n return isLink(node) && rng.startContainer === rng.endContainer && editor.dom.select('img', node).length === 1;\n };\n const getLinkFromElement = (editor, element) => {\n const links = getLinks$1(editor.dom.getParents(element));\n return someIf(links.length === 1, links[0]);\n };\n const getLinkInSelection = editor => {\n const links = getLinksInSelection(editor.selection.getRng());\n return someIf(links.length > 0, links[0]).or(getLinkFromElement(editor, editor.selection.getNode()));\n };\n const getLinkFromSelection = editor => editor.selection.isCollapsed() || isSelectionOnImageWithEmbeddedLink(editor) ? getLinkFromElement(editor, editor.selection.getStart()) : getLinkInSelection(editor);\n const setup$1 = editor => {\n const selectedLink = value();\n const getSelectedLink = () => selectedLink.get().or(getLinkFromSelection(editor));\n const gotoSelectedLink = () => getSelectedLink().each(link => gotoLink(editor, link));\n editor.on('contextmenu', e => {\n getLinkFromElement(editor, e.target).each(selectedLink.set);\n });\n editor.on('SelectionChange', () => {\n if (!selectedLink.isSet()) {\n getLinkFromSelection(editor).each(selectedLink.set);\n }\n });\n editor.on('click', e => {\n selectedLink.clear();\n const links = getLinks$1(editor.dom.getParents(e.target));\n if (links.length === 1 && global.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, links[0]);\n }\n });\n editor.on('keydown', e => {\n selectedLink.clear();\n if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n getSelectedLink().each(link => {\n e.preventDefault();\n gotoLink(editor, link);\n });\n }\n });\n return { gotoSelectedLink };\n };\n\n const openDialog = editor => () => {\n editor.execCommand('mceLink', false, { dialog: true });\n };\n const toggleState = (editor, toggler) => {\n editor.on('NodeChange', toggler);\n return () => editor.off('NodeChange', toggler);\n };\n const toggleLinkState = editor => api => {\n const updateState = () => {\n api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleLinkMenuState = editor => api => {\n const updateState = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleRequiresLinkState = editor => api => {\n const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n const parents = editor.dom.getParents(editor.selection.getStart());\n const updateEnabled = parents => {\n api.setEnabled(hasLinks$1(parents) && editor.selection.isEditable());\n };\n updateEnabled(parents);\n return toggleState(editor, e => updateEnabled(e.parents));\n };\n const setupButtons = (editor, openLink) => {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupMenuItems = (editor, openLink) => {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkMenuState(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupContextMenu = editor => {\n const inLink = 'link unlink openlink';\n const noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: element => {\n const isEditable = editor.dom.isEditable(element);\n if (!isEditable) {\n return '';\n }\n return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n const setupContextToolbars = (editor, openLink) => {\n const collapseSelectionToEnd = editor => {\n editor.selection.collapse(false);\n };\n const onSetupLink = buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setEnabled(isInAnchor(editor, node) && editor.selection.isEditable());\n return noop;\n };\n const getLinkText = value => {\n const anchor = getAnchorElement(editor);\n const onlyText = isOnlyTextSelected(editor);\n if (anchor.isNone() && onlyText) {\n const text = getAnchorText(editor.selection, anchor);\n return someIf(text.length === 0, value);\n } else {\n return Optional.none();\n }\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: toggleLinkState(editor)\n },\n label: 'Link',\n predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),\n initValue: () => {\n const elm = getAnchorElement(editor);\n return elm.fold(constant(''), getHref);\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setActive(isInAnchor(editor, node));\n return toggleLinkState(editor)(buttonApi);\n },\n onAction: formApi => {\n const value = formApi.getValue();\n const text = getLinkText(value);\n const attachState = {\n href: value,\n attach: noop\n };\n link(editor, attachState, {\n href: value,\n text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.from(getDefaultLinkTarget(editor)),\n class: Optional.none()\n });\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: formApi => {\n unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: formApi => {\n openLink.gotoSelectedLink();\n formApi.hide();\n }\n }\n ]\n });\n };\n const setup = editor => {\n const openLink = setup$1(editor);\n setupButtons(editor, openLink);\n setupMenuItems(editor, openLink);\n setupContextMenu(editor);\n setupContextToolbars(editor, openLink);\n };\n\n var Plugin = () => {\n global$5.add('link', editor => {\n register$1(editor);\n register(editor);\n setup(editor);\n setup$2(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$1 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const filter$1 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$1(xs, 0);\n const last = xs => get$1(xs, xs.length - 1);\n const unique = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$1(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n const COMMENT = 8;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is = is$1;\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name(e) === tag;\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const child = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child(element, 0);\n const lastChild = element => child(element, element.dom.childNodes.length - 1);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$3 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n\n const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n\n const before = (marker, elements) => {\n each$1(elements, x => {\n before$1(marker, x);\n });\n };\n const append = (parent, elements) => {\n each$1(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove(rogue);\n });\n };\n const remove = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n const keys = Object.keys;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const setAll = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const deep = original => clone(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$1(original);\n setAll(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after(original, nu);\n const children$1 = children(original);\n append(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const matchNodeName = name => node => isNonNullable(node) && node.nodeName.toLowerCase() === name;\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isTextNode$1 = node => isNonNullable(node) && node.nodeType === 3;\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n const isOlNode = matchNodeName('ol');\n const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const isBr = matchNodeName('br');\n const isFirstChild = node => {\n var _a;\n return ((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === node;\n };\n const isTextBlock = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getTextBlockElements();\n const isBlock = (node, blockElements) => isNonNullable(node) && node.nodeName in blockElements;\n const isVoid = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getVoidElements();\n const isBogusBr = (dom, node) => {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n const isEmpty$2 = (dom, elm, keepBookmarks) => {\n const empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n const isChildOfBody = (dom, elm) => dom.isChildOf(elm, dom.getRoot());\n\n const option = name => editor => editor.options.get(name);\n const register$3 = editor => {\n const registerOption = editor.options.register;\n registerOption('lists_indent_on_tab', {\n processor: 'boolean',\n default: true\n });\n };\n const shouldIndentOnTab = option('lists_indent_on_tab');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n\n const createTextBlock = (editor, contentNode, attrs = {}) => {\n const dom = editor.dom;\n const blockElements = editor.schema.getBlockElements();\n const fragment = dom.createFragment();\n const blockName = getForcedRootBlock(editor);\n const blockAttrs = getForcedRootBlockAttrs(editor);\n let node;\n let textBlock;\n let hasContentNode = false;\n textBlock = dom.create(blockName, {\n ...blockAttrs,\n ...attrs.style ? { style: attrs.style } : {}\n });\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n while (node = contentNode.firstChild) {\n const nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (!textBlock) {\n textBlock = dom.create(blockName, blockAttrs);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n }\n }\n if (!hasContentNode && textBlock) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n return fragment;\n };\n\n const DOM$2 = global$3.DOM;\n const splitList = (editor, list, li) => {\n const removeAndKeepBookmarks = targetNode => {\n const parent = targetNode.parentNode;\n if (parent) {\n global$2.each(bookmarks, node => {\n parent.insertBefore(node, li.parentNode);\n });\n }\n DOM$2.remove(targetNode);\n };\n const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n const newBlock = createTextBlock(editor, li);\n const tmpRng = DOM$2.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(list);\n const fragment = tmpRng.extractContents();\n for (let node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$2.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$2.insertAfter(fragment, list);\n }\n DOM$2.insertAfter(newBlock, list);\n const parent = li.parentElement;\n if (parent && isEmpty$2(editor.dom, parent)) {\n removeAndKeepBookmarks(parent);\n }\n DOM$2.remove(li);\n if (isEmpty$2(editor.dom, list)) {\n DOM$2.remove(list);\n }\n };\n\n const isDescriptionDetail = isTag('dd');\n const isDescriptionTerm = isTag('dt');\n const outdentDlItem = (editor, item) => {\n if (isDescriptionDetail(item)) {\n mutate(item, 'dt');\n } else if (isDescriptionTerm(item)) {\n parentElement(item).each(dl => splitList(editor, dl.dom, item.dom));\n }\n };\n const indentDlItem = item => {\n if (isDescriptionTerm(item)) {\n mutate(item, 'dd');\n }\n };\n const dlIndentation = (editor, indentation, dlItems) => {\n if (indentation === 'Indent') {\n each$1(dlItems, indentDlItem);\n } else {\n each$1(dlItems, item => outdentDlItem(editor, item));\n }\n };\n\n const getNormalizedPoint = (container, offset) => {\n if (isTextNode$1(container)) {\n return {\n container,\n offset\n };\n }\n const node = global$6.getNode(container, offset);\n if (isTextNode$1(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode$1(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode$1(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container,\n offset\n };\n };\n const normalizeRange = rng => {\n const outRng = rng.cloneRange();\n const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n const listNames = [\n 'OL',\n 'UL',\n 'DL'\n ];\n const listSelector = listNames.join(',');\n const getParentList = (editor, node) => {\n const selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, listSelector, getClosestListHost(editor, selectionStart));\n };\n const isParentListSelected = (parentList, selectedBlocks) => isNonNullable(parentList) && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n const findSubLists = parentList => filter$1(parentList.querySelectorAll(listSelector), isListNode);\n const getSelectedSubLists = editor => {\n const parentList = getParentList(editor);\n const selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return filter$1(selectedBlocks, elm => {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n const findParentListItemsNodes = (editor, elms) => {\n const listItemsElms = global$2.map(elms, elm => {\n const parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListHost(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return unique(listItemsElms);\n };\n const getSelectedListItems = editor => {\n const selectedBlocks = editor.selection.getSelectedBlocks();\n return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n };\n const getSelectedDlItems = editor => filter$1(getSelectedListItems(editor), isDlItemNode);\n const getClosestEditingHost = (editor, elm) => {\n const parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n };\n const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));\n const getClosestListHost = (editor, elm) => {\n const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);\n const isNotForcedRootBlock = elm => elm.nodeName.toLowerCase() !== getForcedRootBlock(editor);\n const parentBlock = find(parentBlocks, elm => isNotForcedRootBlock(elm) && isListHost(editor.schema, elm));\n return parentBlock.getOr(editor.getBody());\n };\n const isListInsideAnLiWithFirstAndLastNotListElement = list => parent(list).exists(parent => isListItemNode(parent.dom) && firstChild(parent).exists(firstChild => !isListNode(firstChild.dom)) && lastChild(parent).exists(lastChild => !isListNode(lastChild.dom)));\n const findLastParentListNode = (editor, elm) => {\n const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n return last(parentLists);\n };\n const getSelectedLists = editor => {\n const firstList = findLastParentListNode(editor, editor.selection.getStart());\n const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n const getParentLists = editor => {\n const elm = editor.selection.getStart();\n return editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n };\n const getSelectedListRoots = editor => {\n const selectedLists = getSelectedLists(editor);\n const parentLists = getParentLists(editor);\n return find(parentLists, p => isListInsideAnLiWithFirstAndLastNotListElement(SugarElement.fromDom(p))).fold(() => getUniqueListRoots(editor, selectedLists), l => [l]);\n };\n const getUniqueListRoots = (editor, lists) => {\n const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));\n return unique(listRoots);\n };\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const inList = (parents, listName) => findUntil(parents, isListNode, isTableCellNode).exists(list => list.nodeName === listName && !isCustomList(list));\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const selectionIsWithinNonEditableList = editor => {\n const parentList = getParentList(editor);\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$1(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const fireListEvent = (editor, action, element) => editor.dispatch('ListMutation', {\n action,\n element\n });\n\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$1 = s => !isNotEmpty(s);\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n\n const isList = el => is(el, 'OL,UL');\n const isListItem = el => is(el, 'LI');\n const hasFirstChildList = el => firstChild(el).exists(isList);\n const hasLastChildList = el => lastChild(el).exists(isList);\n\n const isEntryList = entry => 'listAttributes' in entry;\n const isEntryComment = entry => 'isComment' in entry;\n const isEntryFragment = entry => 'isFragment' in entry;\n const isIndented = entry => entry.depth > 0;\n const isSelected = entry => entry.isSelected;\n const cloneItemContent = li => {\n const children$1 = children(li);\n const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({\n depth,\n dirty: false,\n isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone$1(li),\n listAttributes: clone$1(list),\n listType: name(list),\n isInPreviousLi: false\n }));\n\n const joinSegment = (parent, child) => {\n append$1(parent.item, child.list);\n };\n const joinSegments = segments => {\n for (let i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n const appendSegments = (head$1, tail) => {\n lift2(last(head$1), head(tail), joinSegment);\n };\n const createSegment = (scope, listType) => {\n const segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append$1(segment.list, segment.item);\n return segment;\n };\n const createSegments = (scope, entry, size) => {\n const segments = [];\n for (let i = 0; i < size; i++) {\n segments.push(createSegment(scope, isEntryList(entry) ? entry.listType : entry.parentListType));\n }\n return segments;\n };\n const populateSegments = (segments, entry) => {\n for (let i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(segment => {\n if (isEntryList(entry)) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n }\n append(segment.item, entry.content);\n });\n };\n const normalizeSegment = (segment, entry) => {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n const createItem = (scope, attr, content) => {\n const item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append(item, content);\n return item;\n };\n const appendItem = (segment, item) => {\n append$1(segment.list, item);\n segment.item = item;\n };\n const writeShallow = (scope, cast, entry) => {\n const newCast = cast.slice(0, entry.depth);\n last(newCast).each(segment => {\n if (isEntryList(entry)) {\n const item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n } else if (isEntryFragment(entry)) {\n append(segment.item, entry.content);\n } else {\n const item = SugarElement.fromHtml(``);\n append$1(segment.list, item);\n }\n });\n return newCast;\n };\n const writeDeep = (scope, cast, entry) => {\n const segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n const composeList = (scope, entries) => {\n let firstCommentEntryOpt = Optional.none();\n const cast = foldl(entries, (cast, entry, i) => {\n if (!isEntryComment(entry)) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n } else {\n if (i === 0) {\n firstCommentEntryOpt = Optional.some(entry);\n return cast;\n }\n return writeShallow(scope, cast, entry);\n }\n }, []);\n firstCommentEntryOpt.each(firstCommentEntry => {\n const item = SugarElement.fromHtml(``);\n head(cast).each(fistCast => {\n prepend(fistCast.list, item);\n });\n });\n return head(cast).map(segment => segment.list);\n };\n\n const indentEntry = (indentation, entry) => {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n entry.dirty = true;\n };\n\n const cloneListProperties = (target, source) => {\n if (isEntryList(target) && isEntryList(source)) {\n target.listType = source.listType;\n target.listAttributes = { ...source.listAttributes };\n }\n };\n const cleanListProperties = entry => {\n entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');\n };\n const closestSiblingEntry = (entries, start) => {\n const depth = entries[start].depth;\n const matches = entry => entry.depth === depth && !entry.dirty;\n const until = entry => entry.depth < depth;\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n };\n const normalizeEntries = entries => {\n each$1(entries, (entry, i) => {\n closestSiblingEntry(entries, i).fold(() => {\n if (entry.dirty && isEntryList(entry)) {\n cleanListProperties(entry);\n }\n }, matchingEntry => cloneListProperties(entry, matchingEntry));\n });\n return entries;\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const parseSingleItem = (depth, itemSelection, selectionState, item) => {\n var _a;\n if (isComment(item)) {\n return [{\n depth: depth + 1,\n content: (_a = item.dom.nodeValue) !== null && _a !== void 0 ? _a : '',\n dirty: false,\n isSelected: false,\n isComment: true\n }];\n }\n itemSelection.each(selection => {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n const currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(selection => {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n };\n const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => parseSingleItem(depth, itemSelection, selectionState, item), list => {\n const parsedSiblings = foldl(children(item), (acc, liChild, i) => {\n if (i === 0) {\n return acc;\n } else {\n if (isListItem(liChild)) {\n return acc.concat(parseSingleItem(depth, itemSelection, selectionState, liChild));\n } else {\n const fragment = {\n isFragment: true,\n depth,\n content: [liChild],\n isSelected: false,\n dirty: false,\n parentListType: name(list)\n };\n return acc.concat(fragment);\n }\n }\n }, []);\n return parseList(depth, itemSelection, selectionState, list).concat(parsedSiblings);\n });\n const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {\n const parser = isList(element) ? parseList : parseItem;\n const newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n const parseLists = (lists, itemSelection) => {\n const selectionState = Cell(false);\n const initialDepth = 0;\n return map(lists, list => ({\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n }));\n };\n\n const outdentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, entry => {\n const content = !isEntryComment(entry) ? fromElements(entry.content) : fromElements([SugarElement.fromHtml(``)]);\n const listItemAttrs = isEntryList(entry) ? entry.itemAttributes : {};\n return SugarElement.fromDom(createTextBlock(editor, content.dom, listItemAttrs));\n });\n };\n const indentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), entries => {\n const groupIsIndented = head(entries).exists(isIndented);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n const indentSelectedEntries = (entries, indentation) => {\n each$1(filter$1(entries, isSelected), entry => indentEntry(indentation, entry));\n };\n const getItemSelection = editor => {\n const selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n start,\n end\n }));\n };\n const listIndentation = (editor, lists, indentation) => {\n const entrySets = parseLists(lists, getItemSelection(editor));\n each$1(entrySets, entrySet => {\n indentSelectedEntries(entrySet.entries, indentation);\n const composedLists = composeEntries(editor, entrySet.entries);\n each$1(composedLists, composedList => {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n const selectionIndentation = (editor, indentation) => {\n const lists = fromDom(getSelectedListRoots(editor));\n const dlItems = fromDom(getSelectedDlItems(editor));\n let isHandled = false;\n if (lists.length || dlItems.length) {\n const bookmark = editor.selection.getBookmark();\n listIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n const handleIndentation = (editor, indentation) => !selectionIsWithinNonEditableList(editor) && selectionIndentation(editor, indentation);\n const indentListSelection = editor => handleIndentation(editor, 'Indent');\n const outdentListSelection = editor => handleIndentation(editor, 'Outdent');\n const flattenListSelection = editor => handleIndentation(editor, 'Flatten');\n\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n\n const ancestor$1 = (scope, predicate, isRoot) => ancestor$3(scope, predicate, isRoot).isSome();\n\n const ancestor = (element, target) => ancestor$1(element, curry(eq, target));\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n const DOM$1 = global$3.DOM;\n const createBookmark = rng => {\n const bookmark = {};\n const setupEndPoint = start => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n const offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n const resolveBookmark = bookmark => {\n const restoreEndPoint = start => {\n const nodeIndex = container => {\n var _a;\n let node = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild;\n let idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (!isElement(node) || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n let container = bookmark[start ? 'startContainer' : 'endContainer'];\n let offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (isElement(container) && container.parentNode) {\n const node = container;\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM$1.remove(node);\n if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n container.appendChild(DOM$1.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n restoreEndPoint(true);\n restoreEndPoint();\n const rng = DOM$1.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return normalizeRange(rng);\n };\n\n const listToggleActionFromListName = listName => {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\n };\n\n const updateListStyle = (dom, el, detail) => {\n const type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n const setAttribs = (elm, attrs) => {\n global$2.each(attrs, (value, key) => {\n elm.setAttribute(key, value);\n });\n };\n const updateListAttrs = (dom, el, detail) => {\n setAttribs(el, detail['list-attributes']);\n global$2.each(dom.select('li', el), li => {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n const updateListWithDetails = (dom, el, detail) => {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n const removeStyles = (dom, element, styles) => {\n global$2.each(styles, style => dom.setStyle(element, style, ''));\n };\n const isInline = (editor, node) => isNonNullable(node) && !isBlock(node, editor.schema.getBlockElements());\n const getEndPointNode = (editor, rng, start, root) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n const offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n const findBlockAncestor = node => {\n while (!editor.dom.isBlock(node) && node.parentNode && root !== node) {\n node = node.parentNode;\n }\n return node;\n };\n const findBetterContainer = (container, forward) => {\n var _a;\n const walker = new global$5(container, findBlockAncestor(container));\n const dir = forward ? 'next' : 'prev';\n let node;\n while (node = walker[dir]()) {\n if (!(isVoid(editor, node) || isZwsp(node.textContent) || ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length) === 0)) {\n return Optional.some(node);\n }\n }\n return Optional.none();\n };\n if (start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, false).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.previousSibling !== null && (isInline(editor, container.previousSibling) || isTextNode$1(container.previousSibling))) {\n container = container.previousSibling;\n }\n }\n }\n if (!start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, true).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.nextSibling !== null && (isInline(editor, container.nextSibling) || isTextNode$1(container.nextSibling))) {\n container = container.nextSibling;\n }\n }\n }\n while (container.parentNode !== root) {\n const parent = container.parentNode;\n if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(parent.nodeName)) {\n return container;\n }\n container = parent;\n }\n return container;\n };\n const getSelectedTextBlocks = (editor, rng, root) => {\n const textBlocks = [];\n const dom = editor.dom;\n const startNode = getEndPointNode(editor, rng, true, root);\n const endNode = getEndPointNode(editor, rng, false, root);\n let block;\n const siblings = [];\n for (let node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$2.each(siblings, node => {\n var _a;\n if (isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || isBr(node)) {\n if (isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n const nextSibling = node.nextSibling;\n if (global$1.isBookmarkNode(node)) {\n if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n const hasCompatibleStyle = (dom, sib, detail) => {\n const sibStyle = dom.getStyle(sib, 'list-style-type');\n let detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n const getRootSearchStart = (editor, range) => {\n const start = editor.selection.getStart(true);\n const startPoint = getEndPointNode(editor, range, true, editor.getBody());\n if (ancestor(SugarElement.fromDom(startPoint), SugarElement.fromDom(range.commonAncestorContainer))) {\n return range.commonAncestorContainer;\n } else {\n return start;\n }\n };\n const applyList = (editor, listName, detail) => {\n const rng = editor.selection.getRng();\n let listItemName = 'LI';\n const root = getClosestListHost(editor, getRootSearchStart(editor, rng));\n const dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n const bookmark = createBookmark(rng);\n const selectedTextBlocks = filter$1(getSelectedTextBlocks(editor, rng, root), editor.dom.isEditable);\n global$2.each(selectedTextBlocks, block => {\n let listBlock;\n const sibling = block.previousSibling;\n const parent = block.parentNode;\n if (!isListItemNode(parent)) {\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n parent.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n }\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n const isValidLists = (list1, list2) => {\n return isListNode(list1) && list1.nodeName === (list2 === null || list2 === void 0 ? void 0 : list2.nodeName);\n };\n const hasSameListStyle = (dom, list1, list2) => {\n const targetStyle = dom.getStyle(list1, 'list-style-type', true);\n const style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n const hasSameClasses = (elm1, elm2) => {\n return elm1.className === elm2.className;\n };\n const shouldMerge = (dom, list1, list2) => {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n const mergeWithAdjacentLists = (dom, listBlock) => {\n let node;\n let sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(liSibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(liSibling);\n }\n };\n const updateList$1 = (editor, list, listName, detail) => {\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const updateCustomList = (editor, list, listName, detail) => {\n list.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n list.removeAttribute('class');\n }\n }\n });\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n const parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n const bookmark = createBookmark(editor.selection.getRng());\n const allLists = parentIsList ? [\n parentList,\n ...lists\n ] : lists;\n const updateFunction = parentIsList && isCustomList(parentList) ? updateCustomList : updateList$1;\n global$2.each(allLists, elm => {\n updateFunction(editor, elm, listName, detail);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const hasListStyleDetail = detail => {\n return 'list-style-type' in detail;\n };\n const toggleSingleList = (editor, parentList, listName, detail) => {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n const bookmark = createBookmark(editor.selection.getRng());\n if (isCustomList(parentList)) {\n parentList.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n parentList.removeAttribute('class');\n }\n }\n });\n }\n updateListWithDetails(editor.dom, parentList, detail);\n const newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n const toggleList = (editor, listName, _detail) => {\n const parentList = getParentList(editor);\n if (isWithinNonEditableList(editor, parentList)) {\n return;\n }\n const selectedSubLists = getSelectedSubLists(editor);\n const detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n const DOM = global$3.DOM;\n const normalizeList = (dom, list) => {\n const parentNode = list.parentElement;\n if (parentNode && parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n if (isEmpty$2(dom, parentNode)) {\n DOM.remove(parentNode);\n }\n } else {\n DOM.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n }\n }\n };\n const normalizeLists = (dom, element) => {\n const lists = global$2.grep(dom.select('ol,ul', element));\n global$2.each(lists, list => {\n normalizeList(dom, list);\n });\n };\n\n const findNextCaretContainer = (editor, rng, isForward, root) => {\n let node = rng.startContainer;\n const offset = rng.startOffset;\n if (isTextNode$1(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (isElement(node)) {\n node = global$6.getNode(node, offset);\n }\n const walker = new global$5(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n const walkFn = isForward ? walker.next.bind(walker) : walker.prev2.bind(walker);\n while (node = walkFn()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (isTextNode$1(node) && node.data.length > 0) {\n return node;\n }\n }\n return null;\n };\n const hasOnlyOneBlockChild = (dom, elm) => {\n const childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n const isUnwrappable = node => Optional.from(node).map(SugarElement.fromDom).filter(isHTMLElement).exists(el => isEditable(el) && !contains$1(['details'], name(el)));\n const unwrapSingleBlockChild = (dom, elm) => {\n if (hasOnlyOneBlockChild(dom, elm) && isUnwrappable(elm.firstChild)) {\n dom.remove(elm.firstChild, true);\n }\n };\n const moveChildren = (dom, fromElm, toElm) => {\n let node;\n const targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty$2(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n const mergeLiElements = (dom, fromElm, toElm) => {\n let listNode;\n const ul = fromElm.parentNode;\n if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n return;\n }\n if (isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n const node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty$2(dom, toElm, true)) {\n empty(SugarElement.fromDom(toElm));\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n const contains$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n const nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each$1(nestedLists, list => {\n if (isEmpty$2(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n empty(SugarElement.fromDom(toLi));\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n const mergeForward = (editor, rng, fromLi, toLi) => {\n const dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n const bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const mergeBackward = (editor, rng, fromLi, toLi) => {\n const bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n const dom = editor.dom, selection = editor.selection;\n const selectionStartElm = selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n const ul = li.parentElement;\n if (ul === editor.getBody() && isEmpty$2(dom, ul)) {\n return true;\n }\n const rng = normalizeRange(selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n const willMergeParentIntoChild = otherLi && (isForward ? dom.isChildOf(li, otherLi) : dom.isChildOf(otherLi, li));\n if (otherLi && otherLi !== li && !willMergeParentIntoChild) {\n editor.undoManager.transact(() => {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n }\n });\n return true;\n } else if (willMergeParentIntoChild && !isForward && otherLi !== li) {\n editor.undoManager.transact(() => {\n if (rng.commonAncestorContainer.parentElement) {\n const bookmark = createBookmark(rng);\n const oldParentElRef = rng.commonAncestorContainer.parentElement;\n moveChildren(dom, rng.commonAncestorContainer.parentElement, otherLi);\n oldParentElRef.remove();\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n }\n });\n return true;\n } else if (!otherLi) {\n if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n editor.undoManager.transact(() => {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n const removeBlock = (dom, block, root) => {\n const parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n const backspaceDeleteIntoListCaret = (editor, isForward) => {\n const dom = editor.dom;\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block, undefined, { checkRootAsContent: true })) {\n const rng = normalizeRange(editor.selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi) {\n const findValidElement = element => contains$1([\n 'td',\n 'th',\n 'caption'\n ], name(element));\n const findRoot = node => node.dom === root;\n const otherLiCell = closest$2(SugarElement.fromDom(otherLi), findValidElement, findRoot);\n const caretCell = closest$2(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);\n if (!equals(otherLiCell, caretCell, eq)) {\n return false;\n }\n editor.undoManager.transact(() => {\n const parentNode = otherLi.parentNode;\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, parentNode);\n editor.selection.select(otherLi, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n const backspaceDeleteCaret = (editor, isForward) => {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n const hasListSelection = editor => {\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n return startListParent || getSelectedListItems(editor).length > 0;\n };\n const backspaceDeleteRange = editor => {\n if (hasListSelection(editor)) {\n editor.undoManager.transact(() => {\n let shouldFireInput = true;\n const inputHandler = () => shouldFireInput = false;\n editor.on('input', inputHandler);\n editor.execCommand('Delete');\n editor.off('input', inputHandler);\n if (shouldFireInput) {\n editor.dispatch('input');\n }\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n const backspaceDelete = (editor, isForward) => {\n const selection = editor.selection;\n return !isWithinNonEditableList(editor, selection.getNode()) && (selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor));\n };\n const setup$2 = editor => {\n editor.on('ExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if ((cmd === 'delete' || cmd === 'forwarddelete') && hasListSelection(editor)) {\n normalizeLists(editor.dom, editor.getBody());\n }\n });\n editor.on('keydown', e => {\n if (e.keyCode === global$4.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$4.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n\n const get = editor => ({\n backspaceDelete: isForward => {\n backspaceDelete(editor, isForward);\n }\n });\n\n const updateList = (editor, update) => {\n const parentList = getParentList(editor);\n if (parentList === null || isWithinNonEditableList(editor, parentList)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each(update.attrs, (v, k) => editor.dom.setAttrib(parentList, k, v));\n }\n });\n };\n\n const parseAlphabeticBase26 = str => {\n const chars = reverse(trim(str).split(''));\n const values = map(chars, (char, i) => {\n const charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, (sum, v) => sum + v, 0);\n };\n const composeAlphabeticBase26 = value => {\n value--;\n if (value < 0) {\n return '';\n } else {\n const remainder = value % 26;\n const quotient = Math.floor(value / 26);\n const rest = composeAlphabeticBase26(quotient);\n const char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n const isUppercase = str => /^[A-Z]+$/.test(str);\n const isLowercase = str => /^[a-z]+$/.test(str);\n const isNumeric = str => /^[0-9]+$/.test(str);\n const deduceListType = start => {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty$1(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n const parseStartValue = start => {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n const parseDetail = detail => {\n const start = parseInt(detail.start, 10);\n if (is$2(detail.listStyleType, 'upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (is$2(detail.listStyleType, 'lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n const open = editor => {\n const currentList = getParentList(editor);\n if (!isOlNode(currentList) || isWithinNonEditableList(editor, currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.from(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const data = api.getData();\n parseStartValue(data.start).each(detail => {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n const queryListCommandState = (editor, listName) => () => {\n const parentList = getParentList(editor);\n return isNonNullable(parentList) && parentList.nodeName === listName;\n };\n const registerDialog = editor => {\n editor.addCommand('mceListProps', () => {\n open(editor);\n });\n };\n const register$2 = editor => {\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', (ui, detail) => {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', (ui, detail) => {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', (ui, detail) => {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', () => {\n flattenListSelection(editor);\n });\n registerDialog(editor);\n editor.addCommand('mceListUpdate', (ui, detail) => {\n if (isObject(detail)) {\n updateList(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n const isTextNode = node => node.type === 3;\n const isEmpty = nodeBuffer => nodeBuffer.length === 0;\n const wrapInvalidChildren = list => {\n const insertListItem = (buffer, refNode) => {\n const li = global.create('li');\n each$1(buffer, node => li.append(node));\n if (refNode) {\n list.insert(li, refNode, true);\n } else {\n list.append(li);\n }\n };\n const reducer = (buffer, node) => {\n if (isTextNode(node)) {\n return [\n ...buffer,\n node\n ];\n } else if (!isEmpty(buffer) && !isTextNode(node)) {\n insertListItem(buffer, node);\n return [];\n } else {\n return buffer;\n }\n };\n const restBuffer = foldl(list.children(), reducer, []);\n if (!isEmpty(restBuffer)) {\n insertListItem(restBuffer);\n }\n };\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {parser} = editor;\n parser.addNodeFilter('ul,ol', nodes => each$1(nodes, wrapInvalidChildren));\n });\n };\n\n const setupTabKey = editor => {\n editor.on('keydown', e => {\n if (e.keyCode !== global$4.TAB || global$4.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n const setup = editor => {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup$2(editor);\n };\n\n const setupToggleButtonHandler = (editor, listName) => api => {\n const toggleButtonHandler = e => {\n api.setActive(inList(e.parents, listName));\n api.setEnabled(!isWithinNonEditableList(editor, e.element) && editor.selection.isEditable());\n };\n api.setEnabled(editor.selection.isEditable());\n return setNodeChangeHandler(editor, toggleButtonHandler);\n };\n const register$1 = editor => {\n const exec = command => () => editor.execCommand(command);\n if (!editor.hasPlugin('advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: setupToggleButtonHandler(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: setupToggleButtonHandler(editor, 'UL')\n });\n }\n };\n\n const setupMenuButtonHandler = (editor, listName) => api => {\n const menuButtonHandler = e => api.setEnabled(inList(e.parents, listName) && !isWithinNonEditableList(editor, e.element));\n return setNodeChangeHandler(editor, menuButtonHandler);\n };\n const register = editor => {\n const listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: () => editor.execCommand('mceListProps'),\n onSetup: setupMenuButtonHandler(editor, 'OL')\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: node => {\n const parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n var Plugin = () => {\n global$7.add('lists', editor => {\n register$3(editor);\n setup$1(editor);\n if (!editor.hasPlugin('rtc', true)) {\n setup(editor);\n register$2(editor);\n } else {\n registerDialog(editor);\n }\n register$1(editor);\n register(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const getPrototypeOf$2 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$2(value, Object);\n const isArray = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const noarg = f => () => f();\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant$1 = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const never = constant$1(false);\n const always = constant$1(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$2 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const chunk$1 = (array, size) => {\n const r = [];\n for (let i = 0; i < array.length; i += size) {\n const s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n const map$2 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$3 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$5 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex$1 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$2(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$2(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const pure$2 = x => [x];\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$i = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$i(xs, 0);\n const last$1 = xs => get$i(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$1 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const find$4 = (obj, pred) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$h = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const sequence = arr => {\n const r = [];\n for (let i = 0; i < arr.length; i++) {\n const x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Optional.none();\n }\n }\n return Optional.some(r);\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const mapFrom = (a, f) => a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const addToEnd = (str, suffix) => {\n return str + suffix;\n };\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const ensureTrailing = (str, suffix) => {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$1 = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$2 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml: fromHtml$2,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path$1 = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path$1(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie$1 = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie$1('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name$3 = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name$3(e) === tag;\n\n const is = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$3 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$4 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner$4(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentNode = element => parent(element);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const offsetParent = element => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map$2(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const isInShadowRoot = e => getShadowRoot(e).isSome();\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$1(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body = () => getBody(SugarElement.fromDom(document));\n const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$9 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$g = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$g(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$8 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$8 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const setOptions = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n v.fold(() => {\n internalRemove(dom, k);\n }, value => {\n internalSet(dom, k, value);\n });\n });\n };\n const get$f = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const isValidValue$1 = (tag, property, value) => {\n const element = SugarElement.fromTag(tag);\n set$8(element, property, value);\n const style = getRaw(element, property);\n return style.isSome();\n };\n const remove$7 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n remove$8(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$f(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$f(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api$2 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$e = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const setMax$1 = (element, value) => {\n const inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n const absMax = api$2.max(element, value, inclusions);\n set$8(element, 'max-height', absMax + 'px');\n };\n\n const r$1 = (left, top) => {\n const translate = (x, y) => r$1(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r$1;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute$3 = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport$1 = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const api$1 = Dimension('width', element => element.dom.offsetWidth);\n const set$7 = (element, h) => api$1.set(element, h);\n const get$d = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const setMax = (element, value) => {\n const inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n const absMax = api$1.max(element, value, inclusions);\n set$8(element, 'max-width', absMax + 'px');\n };\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant$1(isiPad),\n isiPhone: constant$1(isiPhone),\n isTablet: constant$1(isTablet),\n isPhone: constant$1(isPhone),\n isTouch: constant$1(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant$1(iOSwebview),\n isDesktop: constant$1(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$3 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$d(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n const unknown$3 = () => {\n return nu$d(0, 0);\n };\n const nu$d = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$d,\n detect: detect$4,\n unknown: unknown$3\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$5(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$5(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$3(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant$1(browsers),\n oses: constant$1(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$2 = () => {\n return nu$c({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$c = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$2,\n nu: nu$c,\n edge: constant$1(edge),\n chromium: constant$1(chromium),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown$1 = () => {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$b = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown: unknown$1,\n nu: nu$b,\n windows: constant$1(windows),\n ios: constant$1(ios),\n android: constant$1(android),\n linux: constant$1(linux),\n macos: constant$1(macos),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform();\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$2 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$2(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend$1 = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$2(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$2 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$2(parent, element);\n }, v => {\n before$1(v, element);\n });\n };\n\n const append$1 = (parent, elements) => {\n each$1(elements, x => {\n append$2(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n const get$c = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n const get$b = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds$1 = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds$3 = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$c(SugarElement.fromDom(doc));\n return get$b(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant$1([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n const paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner$3 = element => owner$4(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n const find$2 = element => {\n const doc = getDocument();\n const scroll = get$c(doc);\n const path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), frames => {\n const offset = viewport$1(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport$1(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n });\n };\n\n const pointed = (point, width, height) => ({\n point,\n width,\n height\n });\n const rect = (x, y, width, height) => ({\n x,\n y,\n width,\n height\n });\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const box$1 = element => {\n const xy = absolute$3(element);\n const w = getOuter$1(element);\n const h = getOuter$2(element);\n return bounds(xy.left, xy.top, w, h);\n };\n const absolute$2 = element => {\n const position = find$2(element);\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const constrain = (original, constraint) => {\n const left = Math.max(original.x, constraint.x);\n const top = Math.max(original.y, constraint.y);\n const right = Math.min(original.right, constraint.right);\n const bottom = Math.min(original.bottom, constraint.bottom);\n const width = right - left;\n const height = bottom - top;\n return bounds(left, top, width, height);\n };\n const constrainByMany = (original, constraints) => {\n return foldl(constraints, (acc, c) => constrain(acc, c), original);\n };\n const win = () => getBounds$3(window);\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton$1 = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const destroyable = () => singleton$1(s => s.destroy());\n const unbindable = () => singleton$1(s => s.unbind());\n const value$4 = () => {\n const subject = singleton$1(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n const value$3 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant$1(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error$1 = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error$1(err), value$3);\n const Result = {\n value: value$3,\n error: error$1,\n fromOption\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition$2 = results => {\n const values = [];\n const errors = [];\n each$1(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n const map = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n const bind$1 = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult$1 = res => fold$1(res, Result.error, Result.value);\n const fromResult$1 = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue,\n partition: partition$2,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const field$2 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (value, ifField, ifCustom) => {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n const shallow$1 = (old, nu) => {\n return nu;\n };\n const deep$1 = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has$2(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep$1);\n const merge$1 = baseMerge(shallow$1);\n\n const required$2 = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant$1(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n const mergeWithThunk = baseThunk => ({\n tag: 'mergeWithThunk',\n process: baseThunk\n });\n const mergeWith = base => mergeWithThunk(constant$1(base));\n\n const mergeValues$1 = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors$1 = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant$1('... (only showing first ten failures)')\n }]) : errors;\n return map$2(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu$a = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu$a(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu$a(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu$a(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const unsupportedFields = (path, unsupported) => nu$a(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified');\n const custom = (path, err) => nu$a(path, constant$1(err));\n\n const value$2 = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant$1('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value$2(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$h(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$h(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$h(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$h(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant$1({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const valueThunk = getDelegate => {\n const extract = (path, val) => getDelegate().extract(path, val);\n const toString = () => getDelegate().toString();\n return {\n extract,\n toString\n };\n };\n const getSetKeys = obj => keys(filter$1(obj, isNonNullable));\n const objOfOnly = fields => {\n const delegate = objOf(fields);\n const fieldNames = foldr(fields, (acc, value) => {\n return fold(value, key => deepMerge(acc, { [key]: true }), constant$1(acc));\n }, {});\n const extract = (path, o) => {\n const keys = isBoolean(o) ? [] : getSetKeys(o);\n const extra = filter$2(keys, k => !hasNonNullableKey(fieldNames, k));\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract,\n toString: delegate.toString\n };\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$2(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$2(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$2(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const setOf$1 = (validator, prop) => {\n const validateKeys = (path, keys) => arrOf(value$2(validator)).extract(path, keys);\n const extract = (path, o) => {\n const keys$1 = keys(o);\n const validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, validKeys => {\n const schema = map$2(validKeys, vk => {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n const toString = () => 'setOf(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const thunk = (_desc, processor) => {\n const getP = cached(processor);\n const extract = (path, val) => getP().extract(path, val);\n const toString = () => getP().toString();\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\n\n const anyValue = constant$1(anyValue$1);\n const typedValue = (validator, expectedType) => value$2(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n const isPostMessageable = val => {\n if (Object(val) !== val) {\n return true;\n }\n switch ({}.toString.call(val).slice(8, -1)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'RegExp':\n case 'Blob':\n case 'FileList':\n case 'ImageData':\n case 'ImageBitmap':\n case 'ArrayBuffer':\n return true;\n case 'Array':\n case 'Object':\n return Object.keys(val).every(prop => isPostMessageable(val[prop]));\n default:\n return false;\n }\n };\n const postMessageable = value$2(a => {\n if (isPostMessageable(a)) {\n return SimpleResult.svalue(a);\n } else {\n return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n }\n });\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$h(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$2 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$h(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const arrOfVal = () => arrOf(anyValue$1);\n const valueOf = validator => value$2(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const setOf = (validator, prop) => setOf$1(v => SimpleResult.fromResult(validator(v)), prop);\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const getOrDie = extraction => {\n return extraction.fold(errInfo => {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n const thunkOf = (desc, schema) => thunk(desc, schema);\n\n const field$1 = field$2;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const required$1 = key => field$1(key, key, required$2(), anyValue());\n const requiredOf = (key, schema) => field$1(key, key, required$2(), schema);\n const requiredNumber = key => requiredOf(key, number);\n const requiredString = key => requiredOf(key, string);\n const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values));\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const forbid = (key, message) => field$1(key, key, asOption(), value$2(_v => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message)));\n const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema));\n const option$3 = key => field$1(key, key, asOption(), anyValue());\n const optionOf = (key, schema) => field$1(key, key, asOption(), schema);\n const optionNumber = key => optionOf(key, number);\n const optionString = key => optionOf(key, string);\n const optionStringEnum = (key, values) => optionOf(key, validateEnum(values));\n const optionFunction = key => optionOf(key, functionProcessor);\n const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema));\n const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field$1(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema));\n\n const generate$7 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$1(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate: generate$7 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$1(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const exclude$1 = (obj, fields) => {\n const r = {};\n each(obj, (v, k) => {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n const wrap$2 = (key, value) => ({ [key]: value });\n const wrapAll$1 = keyvalues => {\n const r = {};\n each$1(keyvalues, kv => {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n const exclude = (obj, fields) => exclude$1(obj, fields);\n const wrap$1 = (key, value) => wrap$2(key, value);\n const wrapAll = keyvalues => wrapAll$1(keyvalues);\n const mergeValues = (values, base) => {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n };\n const mergeErrors = errors => Result.error(flatten(errors));\n const consolidate = (objs, base) => {\n const partitions = partition$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor$2 = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop));\n };\n\n const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target);\n\n const defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n const nu$9 = parts => {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return {\n ...defaultEventHandler,\n ...parts\n };\n };\n const all$2 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true);\n const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false);\n const read$2 = handler => isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n const fuse$1 = handlers => {\n const can = all$2(handlers, handler => handler.can);\n const abort = any(handlers, handler => handler.abort);\n const run = (...args) => {\n each$1(handlers, handler => {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can,\n abort,\n run\n };\n };\n\n const constant = constant$1;\n const touchstart = constant('touchstart');\n const touchmove = constant('touchmove');\n const touchend = constant('touchend');\n const touchcancel = constant('touchcancel');\n const mousedown = constant('mousedown');\n const mousemove = constant('mousemove');\n const mouseout = constant('mouseout');\n const mouseup = constant('mouseup');\n const mouseover = constant('mouseover');\n const focusin = constant('focusin');\n const focusout = constant('focusout');\n const keydown = constant('keydown');\n const keyup = constant('keyup');\n const input = constant('input');\n const change = constant('change');\n const click = constant('click');\n const transitioncancel = constant('transitioncancel');\n const transitionend = constant('transitionend');\n const transitionstart = constant('transitionstart');\n const selectstart = constant('selectstart');\n\n const prefixName = name => constant$1('alloy.' + name);\n const alloy = { tap: prefixName('tap') };\n const focus$4 = prefixName('focus');\n const postBlur = prefixName('blur.post');\n const postPaste = prefixName('paste.post');\n const receive = prefixName('receive');\n const execute$5 = prefixName('execute');\n const focusItem = prefixName('focus.item');\n const tap = alloy.tap;\n const longpress = prefixName('longpress');\n const sandboxClose = prefixName('sandbox.close');\n const typeaheadCancel = prefixName('typeahead.cancel');\n const systemInit = prefixName('system.init');\n const documentTouchmove = prefixName('system.touchmove');\n const documentTouchend = prefixName('system.touchend');\n const windowScroll = prefixName('system.scroll');\n const windowResize = prefixName('system.resize');\n const attachedToDom = prefixName('system.attached');\n const detachedFromDom = prefixName('system.detached');\n const dismissRequested = prefixName('system.dismissRequested');\n const repositionRequested = prefixName('system.repositionRequested');\n const focusShifted = prefixName('focusmanager.shifted');\n const slotVisibility = prefixName('slotcontainer.visibility');\n const externalElementScroll = prefixName('system.external.element.scroll');\n const changeTab = prefixName('change.tab');\n const dismissTab = prefixName('dismiss.tab');\n const highlight$1 = prefixName('highlight');\n const dehighlight$1 = prefixName('dehighlight');\n\n const emit = (component, event) => {\n dispatchWith(component, component.element, event, {});\n };\n const emitWith = (component, event, properties) => {\n dispatchWith(component, component.element, event, properties);\n };\n const emitExecute = component => {\n emit(component, execute$5());\n };\n const dispatch = (component, target, event) => {\n dispatchWith(component, target, event, {});\n };\n const dispatchWith = (component, target, event, properties) => {\n const data = {\n target,\n ...properties\n };\n component.getSystem().triggerEvent(event, target, data);\n };\n const retargetAndDispatchWith = (component, target, eventName, properties) => {\n const data = {\n ...properties,\n target\n };\n component.getSystem().triggerEvent(eventName, target, data);\n };\n const dispatchEvent = (component, target, event, simulatedEvent) => {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n const derive$2 = configs => wrapAll(configs);\n const abort = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n const can = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n const preventDefault = name => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n const run$1 = (name, handler) => {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n const runActionExtra = (name, action, extra) => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n const runOnName = name => {\n return handler => run$1(name, handler);\n };\n const runOnSourceName = name => {\n return handler => ({\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n });\n };\n const redirectToUid = (name, uid) => {\n return run$1(name, (component, simulatedEvent) => {\n component.getSystem().getByUid(uid).each(redirectee => {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n const redirectToPart = (name, detail, partName) => {\n const uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n const runWithTarget = (name, f) => {\n return run$1(name, (component, simulatedEvent) => {\n const ev = simulatedEvent.event;\n const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n const closest = closest$4(ev.target, el => component.getSystem().getByDom(el).toOptional(), never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n const cutter = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.cut();\n });\n };\n const stopper = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.stop();\n });\n };\n const runOnSource = (name, f) => {\n return runOnSourceName(name)(f);\n };\n const runOnAttached = runOnSourceName(attachedToDom());\n const runOnDetached = runOnSourceName(detachedFromDom());\n const runOnInit = runOnSourceName(systemInit());\n const runOnExecute$1 = runOnName(execute$5());\n\n const markAsBehaviourApi = (f, apiName, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n });\n return f;\n };\n const cleanParameters = parameters => map$2(parameters, p => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p);\n const markAsExtraApi = (f, extraName) => {\n const delegate = f.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: extraName,\n parameters: cleanParameters(parameters)\n });\n return f;\n };\n const markAsSketchApi = (f, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n });\n return f;\n };\n\n const nu$8 = s => ({\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n });\n const merge = (defnA, mod) => ({\n ...defnA,\n attributes: {\n ...defnA.attributes,\n ...mod.attributes\n },\n styles: {\n ...defnA.styles,\n ...mod.styles\n },\n classes: defnA.classes.concat(mod.classes)\n });\n\n const executeEvent = (bConfig, bState, executor) => runOnExecute$1(component => {\n executor(component, bConfig, bState);\n });\n const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => {\n f(component, bConfig, bState);\n });\n const create$5 = (schema, name, active, apis, extra, state) => {\n const configSchema = objOfOnly(schema);\n const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const createModes$1 = (modes, name, active, apis, extra, state) => {\n const configSchema = modes;\n const schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const wrapApi = (bName, apiFunction, apiName) => {\n const f = (component, ...rest) => {\n const args = [component].concat(rest);\n return component.config({ name: constant$1(bName) }).fold(() => {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, info => {\n const rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n const revokeBehaviour = name => ({\n key: name,\n value: undefined\n });\n const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => {\n const getConfig = info => hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName));\n const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n const me = {\n ...wrappedExtra,\n ...wrappedApis,\n revoke: curry(revokeBehaviour, name),\n config: spec => {\n const prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me,\n configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)),\n initialConfig: spec,\n state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: (info, base) => {\n return lift2(getConfig(info), get$h(active, 'exhibit'), (behaviourInfo, exhibitor) => {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(() => nu$8({}));\n },\n name: constant$1(name),\n handlers: info => {\n return getConfig(info).map(behaviourInfo => {\n const getEvents = get$h(active, 'events').getOr(() => ({}));\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n };\n return me;\n };\n\n const NoState = { init: () => nu$7({ readState: constant$1('No State required') }) };\n const nu$7 = spec => spec;\n\n const derive$1 = capabilities => wrapAll(capabilities);\n const simpleSchema = objOfOnly([\n required$1('fields'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const create$4 = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$5(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n const modeSchema = objOfOnly([\n required$1('branchKey'),\n required$1('branches'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const createModes = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n const revoke = constant$1(undefined);\n\n const read$1 = (element, attr) => {\n const value = get$g(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$1(element, attr);\n const nu = old.concat([id]);\n set$9(element, attr, nu.join(' '));\n return true;\n };\n const remove$5 = (element, attr, id) => {\n const nu = filter$2(read$1(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$9(element, attr, nu.join(' '));\n } else {\n remove$8(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$a = element => read$1(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$4 = (element, clazz) => remove$5(element, 'class', clazz);\n const toggle$5 = (element, clazz) => {\n if (contains$2(get$a(element), clazz)) {\n return remove$4(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$a(element);\n if (classList.length === 0) {\n remove$8(element, 'class');\n }\n };\n const remove$3 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$4 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$5(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const add$1 = (element, classes) => {\n each$1(classes, x => {\n add$2(element, x);\n });\n };\n const remove$2 = (element, classes) => {\n each$1(classes, x => {\n remove$3(element, x);\n });\n };\n const toggle$3 = (element, classes) => {\n each$1(classes, x => {\n toggle$4(element, x);\n });\n };\n const hasAll = (element, classes) => forall(classes, clazz => has(element, clazz));\n const getNative = element => {\n const classList = element.dom.classList;\n const r = new Array(classList.length);\n for (let i = 0; i < classList.length; i++) {\n const item = classList.item(i);\n if (item !== null) {\n r[i] = item;\n }\n }\n return r;\n };\n const get$9 = element => supports(element) ? getNative(element) : get$a(element);\n\n const NuPositionCss = (position, left, top, right, bottom) => {\n const toPx = num => num + 'px';\n return {\n position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n const toOptions = position => ({\n ...position,\n position: Optional.some(position.position)\n });\n const applyPositionCss = (element, position) => {\n setOptions(element, toOptions(position));\n };\n\n const getOffsetParent = element => {\n const isFixed = is$1(getRaw(element, 'position'), 'fixed');\n const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(() => {\n const marker = SugarElement.fromTag('span');\n return parent(element).bind(parent => {\n append$2(parent, marker);\n const offsetParent$1 = offsetParent(marker);\n remove$6(marker);\n return offsetParent$1;\n });\n });\n };\n const getOrigin = element => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n\n const appear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n const disappear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n const isPartiallyVisible = (box, bounds) => box.y < bounds.bottom && box.bottom > bounds.y;\n const isTopCompletelyVisible = (box, bounds) => box.y >= bounds.y;\n const isBottomCompletelyVisible = (box, bounds) => box.bottom <= bounds.bottom;\n const forceTopPosition = (winBox, leftX, viewport) => ({\n location: 'top',\n leftX,\n topY: viewport.bounds.y - winBox.y\n });\n const forceBottomPosition = (winBox, leftX, viewport) => ({\n location: 'bottom',\n leftX,\n bottomY: winBox.bottom - viewport.bounds.bottom\n });\n const getDockedLeftPosition = bounds => {\n return bounds.box.x - bounds.win.x;\n };\n const tryDockingPosition = (modes, bounds, viewport) => {\n const winBox = bounds.win;\n const box = bounds.box;\n const leftX = getDockedLeftPosition(bounds);\n return findMap(modes, mode => {\n switch (mode) {\n case 'bottom':\n return !isBottomCompletelyVisible(box, viewport.bounds) ? Optional.some(forceBottomPosition(winBox, leftX, viewport)) : Optional.none();\n case 'top':\n return !isTopCompletelyVisible(box, viewport.bounds) ? Optional.some(forceTopPosition(winBox, leftX, viewport)) : Optional.none();\n default:\n return Optional.none();\n }\n }).getOr({ location: 'no-dock' });\n };\n const isVisibleForModes = (modes, box, viewport) => forall(modes, mode => {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport.bounds);\n case 'top':\n return isTopCompletelyVisible(box, viewport.bounds);\n }\n });\n const getXYForRestoring = (pos, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(pos.bounds.y), scrollEnv => scrollEnv.scrollElmTop + (pos.bounds.y - scrollEnv.currentScrollTop));\n return SugarPosition(pos.bounds.x, priorY);\n };\n const getXYForSaving = (box, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(box.y), scrollEnv => box.y + scrollEnv.currentScrollTop - scrollEnv.scrollElmTop);\n return SugarPosition(box.x, priorY);\n };\n const getPrior = (elem, viewport, state) => state.getInitialPos().map(pos => {\n const xy = getXYForRestoring(pos, viewport);\n return {\n box: bounds(xy.left, xy.top, get$d(elem), get$e(elem)),\n location: pos.location\n };\n });\n const storePrior = (elem, box, viewport, state, decision) => {\n const xy = getXYForSaving(box, viewport);\n const bounds$1 = bounds(xy.left, xy.top, box.width, box.height);\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$f(elem, 'position') || 'static',\n bounds: bounds$1,\n location: decision.location\n });\n };\n const storePriorIfNone = (elem, box, viewport, state, decision) => {\n state.getInitialPos().fold(() => storePrior(elem, box, viewport, state, decision), () => noop);\n };\n const revertToOriginal = (elem, box, state) => state.getInitialPos().bind(position => {\n var _a;\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some({ morph: 'static' });\n case 'absolute':\n const offsetParent = getOffsetParent(elem).getOr(body());\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n return Optional.some({\n morph: 'absolute',\n positionCss: NuPositionCss('absolute', get$h(position.style, 'left').map(_left => box.x - offsetBox.x), get$h(position.style, 'top').map(_top => box.y - offsetBox.y + scrollDelta), get$h(position.style, 'right').map(_right => offsetBox.right - box.right), get$h(position.style, 'bottom').map(_bottom => offsetBox.bottom - box.bottom))\n });\n default:\n return Optional.none();\n }\n });\n const tryMorphToOriginal = (elem, viewport, state) => getPrior(elem, viewport, state).filter(({box}) => isVisibleForModes(state.getModes(), box, viewport)).bind(({box}) => revertToOriginal(elem, box, state));\n const tryDecisionToFixedMorph = decision => {\n switch (decision.location) {\n case 'top': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.some(decision.topY), Optional.none(), Optional.none())\n });\n }\n case 'bottom': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.none(), Optional.none(), Optional.some(decision.bottomY))\n });\n }\n default:\n return Optional.none();\n }\n };\n const tryMorphToFixed = (elem, viewport, state) => {\n const box = box$1(elem);\n const winBox = win();\n const decision = tryDockingPosition(state.getModes(), {\n win: winBox,\n box\n }, viewport);\n if (decision.location === 'top' || decision.location === 'bottom') {\n storePrior(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n const tryMorphToOriginalOrUpdateFixed = (elem, viewport, state) => {\n return tryMorphToOriginal(elem, viewport, state).orThunk(() => {\n return viewport.optScrollEnv.bind(_ => getPrior(elem, viewport, state)).bind(({box, location}) => {\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = location === 'top' ? forceTopPosition(winBox, leftX, viewport) : forceBottomPosition(winBox, leftX, viewport);\n return tryDecisionToFixedMorph(decision);\n });\n });\n };\n const tryMorph = (component, viewport, state) => {\n const elem = component.element;\n const isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n return isDocked ? tryMorphToOriginalOrUpdateFixed(elem, viewport, state) : tryMorphToFixed(elem, viewport, state);\n };\n const calculateMorphToOriginal = (component, viewport, state) => {\n const elem = component.element;\n return getPrior(elem, viewport, state).bind(({box}) => revertToOriginal(elem, box, state));\n };\n const forceDockWith = (elem, viewport, state, getDecision) => {\n const box = box$1(elem);\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = getDecision(winBox, leftX, viewport);\n if (decision.location === 'bottom' || decision.location === 'top') {\n storePriorIfNone(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n\n const morphToStatic = (component, config, state) => {\n state.setDocked(false);\n each$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], prop => remove$7(component.element, prop));\n config.onUndocked(component);\n };\n const morphToCoord = (component, config, state, position) => {\n const isDocked = position.position === 'fixed';\n state.setDocked(isDocked);\n applyPositionCss(component.element, position);\n const method = isDocked ? config.onDocked : config.onUndocked;\n method(component);\n };\n const updateVisibility = (component, config, state, viewport, morphToDocked = false) => {\n config.contextual.each(contextInfo => {\n contextInfo.lazyContext(component).each(box => {\n const isVisible = isPartiallyVisible(box, viewport.bounds);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$1(component.element, [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n const method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n const applyFixedMorph = (component, config, state, viewport, morph) => {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, state, morph.positionCss);\n };\n const applyMorph = (component, config, state, viewport, morph) => {\n switch (morph.morph) {\n case 'static': {\n return morphToStatic(component, config, state);\n }\n case 'absolute': {\n return morphToCoord(component, config, state, morph.positionCss);\n }\n case 'fixed': {\n return applyFixedMorph(component, config, state, viewport, morph);\n }\n }\n };\n const refreshInternal = (component, config, state) => {\n const viewport = config.lazyViewport(component);\n updateVisibility(component, config, state, viewport);\n tryMorph(component, viewport, state).each(morph => {\n applyMorph(component, config, state, viewport, morph);\n });\n };\n const resetInternal = (component, config, state) => {\n const elem = component.element;\n state.setDocked(false);\n const viewport = config.lazyViewport(component);\n calculateMorphToOriginal(component, viewport, state).each(staticOrAbsoluteMorph => {\n switch (staticOrAbsoluteMorph.morph) {\n case 'static': {\n morphToStatic(component, config, state);\n break;\n }\n case 'absolute': {\n morphToCoord(component, config, state, staticOrAbsoluteMorph.positionCss);\n break;\n }\n }\n });\n state.setVisible(true);\n config.contextual.each(contextInfo => {\n remove$2(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n const refresh$4 = (component, config, state) => {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n const reset$2 = (component, config, state) => {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n const forceDockWithDecision = getDecision => (component, config, state) => {\n const viewport = config.lazyViewport(component);\n const optMorph = forceDockWith(component.element, viewport, state, getDecision);\n optMorph.each(morph => {\n applyFixedMorph(component, config, state, viewport, morph);\n });\n };\n const forceDockToTop = forceDockWithDecision(forceTopPosition);\n const forceDockToBottom = forceDockWithDecision(forceBottomPosition);\n const isDocked$2 = (component, config, state) => state.isDocked();\n const setModes = (component, config, state, modes) => state.setModes(modes);\n const getModes = (component, config, state) => state.getModes();\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset$2,\n isDocked: isDocked$2,\n getModes: getModes,\n setModes: setModes,\n forceDockToTop: forceDockToTop,\n forceDockToBottom: forceDockToBottom\n });\n\n const events$i = (dockInfo, dockState) => derive$2([\n runOnSource(transitionend(), (component, simulatedEvent) => {\n dockInfo.contextual.each(contextInfo => {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$2(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run$1(windowScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(externalElementScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), (component, _) => {\n reset$2(component, dockInfo, dockState);\n })\n ]);\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$i\n });\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n const get$8 = element => element.dom.innerHTML;\n const set$6 = (element, content) => {\n const owner = owner$4(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$8(container);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n\n const getHtml = element => {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n const clone = shallow(element);\n return getOuter(clone);\n }\n };\n\n const element = elem => getHtml(elem);\n\n const unknown = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n const eventConfig = Cell({});\n const makeEventLogger = (eventName, initialTarget) => {\n const sequence = [];\n const startTime = new Date().getTime();\n return {\n logEventCut: (_name, target, purpose) => {\n sequence.push({\n outcome: 'cut',\n target,\n purpose\n });\n },\n logEventStopped: (_name, target, purpose) => {\n sequence.push({\n outcome: 'stopped',\n target,\n purpose\n });\n },\n logNoParent: (_name, target, purpose) => {\n sequence.push({\n outcome: 'no-parent',\n target,\n purpose\n });\n },\n logEventNoHandlers: (_name, target) => {\n sequence.push({\n outcome: 'no-handlers-left',\n target\n });\n },\n logEventResponse: (_name, target, purpose) => {\n sequence.push({\n outcome: 'response',\n purpose,\n target\n });\n },\n write: () => {\n const finishTime = new Date().getTime();\n if (contains$2([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom,\n sequence: map$2(sequence, s => {\n if (!contains$2([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n const processEvent = (eventName, initialTarget, f) => {\n const status = get$h(eventConfig.get(), eventName).orThunk(() => {\n const patterns = keys(eventConfig.get());\n return findMap(patterns, p => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none());\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n const logger = makeEventLogger(eventName, initialTarget);\n const output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n const path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n const getTrace = () => {\n const err = new Error();\n if (err.stack !== undefined) {\n const lines = err.stack.split('\\n');\n return find$5(lines, line => line.indexOf('alloy') > 0 && !exists(path, p => line.indexOf(p) > -1)).getOr(unknown);\n } else {\n return unknown;\n }\n };\n const ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f);\n const noLogger = constant$1(ignoreEvent);\n\n const menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n const itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n const itemSchema$3 = constant$1(objOf(itemFields()));\n\n const _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n const itemMarkers = () => requiredOf('markers', itemSchema$3());\n const tieredMenuMarkers = () => requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n const markers$1 = required => requiredObjOf('markers', map$2(required, required$1));\n const onPresenceHandler = (label, fieldName, presence) => {\n getTrace();\n return field$1(fieldName, fieldName, presence, valueOf(f => Result.value((...args) => {\n return f.apply(undefined, args);\n })));\n };\n const onHandler = fieldName => onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n const onKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n const onStrictHandler = fieldName => onPresenceHandler('onHandler', fieldName, required$2());\n const onStrictKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n const output$1 = (name, value) => customField(name, constant$1(value));\n const snapshot = name => customField(name, identity);\n const initSize = constant$1(_initSize);\n\n var DockingSchema = [\n optionObjOf('contextual', [\n requiredString('fadeInClass'),\n requiredString('fadeOutClass'),\n requiredString('transitionClass'),\n requiredFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', () => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n })),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n const init$g = spec => {\n const docked = Cell(false);\n const visible = Cell(true);\n const initialBounds = value$4();\n const modes = Cell(spec.modes);\n const readState = () => `docked: ${ docked.get() }, visible: ${ visible.get() }, modes: ${ modes.get().join(',') }`;\n return nu$7({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPos: initialBounds.get,\n setInitialPos: initialBounds.set,\n clearInitialPos: initialBounds.clear,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n const Docking = create$4({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target);\n const events$h = derive$2([can(focus$4(), (component, simulatedEvent) => {\n const event = simulatedEvent.event;\n const originator = event.originator;\n const target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$h\n });\n\n const cycleBy = (value, delta, min, max) => {\n const r = value + delta;\n if (r > max) {\n return min;\n } else if (r < min) {\n return max;\n } else {\n return r;\n }\n };\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$6 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const prefix$1 = constant$1('alloy-id-');\n const idAttr$1 = constant$1('data-alloy-id');\n\n const prefix = prefix$1();\n const idAttr = idAttr$1();\n const write = (label, elem) => {\n const id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n const writeOnly = (elem, uid) => {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n const read = elem => {\n const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n const generate$5 = prefix => generate$6(prefix);\n\n const make$8 = identity;\n\n const NoContextApi = getComp => {\n const getMessage = event => `The component must be in a context to execute: ${ event }` + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n const fail = event => () => {\n throw new Error(getMessage(event));\n };\n const warn = event => () => {\n console.warn(getMessage(event));\n };\n return {\n debugInfo: constant$1('fake'),\n triggerEvent: warn('triggerEvent'),\n triggerFocus: warn('triggerFocus'),\n triggerEscape: warn('triggerEscape'),\n broadcast: warn('broadcast'),\n broadcastOn: warn('broadcastOn'),\n broadcastEvent: warn('broadcastEvent'),\n build: fail('build'),\n buildOrPatch: fail('buildOrPatch'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n isConnected: never\n };\n };\n const singleton = NoContextApi();\n\n const premadeTag = generate$6('alloy-premade');\n const premade$1 = comp => {\n Object.defineProperty(comp.element.dom, premadeTag, {\n value: comp.uid,\n writable: true\n });\n return wrap$1(premadeTag, comp);\n };\n const isPremade = element => has$2(element.dom, premadeTag);\n const getPremade = spec => get$h(spec, premadeTag);\n const makeApi = f => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f);\n\n const generateFrom$1 = (spec, all) => {\n const schema = map$2(all, a => optionObjOf(a.name(), [\n required$1('config'),\n defaulted('state', NoState)\n ]));\n const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(errInfo => {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, identity);\n return {\n list: all,\n data: map$1(validated, optBlobThunk => {\n const output = optBlobThunk.map(blob => ({\n config: blob.config,\n state: blob.state.init(blob.config)\n }));\n return constant$1(output);\n })\n };\n };\n const getBehaviours$3 = bData => bData.list;\n const getData$2 = bData => bData.data;\n\n const byInnerKey = (data, tuple) => {\n const r = {};\n each(data, (detail, key) => {\n each(detail, (value, indexKey) => {\n const chain = get$h(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n const combine$2 = (info, baseMod, behaviours, base) => {\n const modsByBehaviour = { ...baseMod };\n each$1(behaviours, behaviour => {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({\n name,\n modification\n }));\n const combineObjects = objects => foldr(objects, (b, a) => ({\n ...a.modification,\n ...b\n }), {});\n const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []);\n const combinedAttributes = combineObjects(byAspect.attributes);\n const combinedStyles = combineObjects(byAspect.styles);\n return nu$8({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n const sortKeys = (label, keyName, array, order) => {\n try {\n const sorted = sort(array, (a, b) => {\n const aKey = a[keyName];\n const bKey = b[keyName];\n const aIndex = order.indexOf(aKey);\n const bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n const uncurried = (handler, purpose) => ({\n handler,\n purpose\n });\n const curried = (handler, purpose) => ({\n cHandler: handler,\n purpose\n });\n const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n const getCurried = descHandler => descHandler.cHandler;\n\n const behaviourTuple = (name, handler) => ({\n name,\n handler\n });\n const nameToHandlers = (behaviours, info) => {\n const r = {};\n each$1(behaviours, behaviour => {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n const groupByEvents = (info, behaviours, base) => {\n const behaviourEvents = {\n ...base,\n ...nameToHandlers(behaviours, info)\n };\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n const combine$1 = (info, eventOrder, behaviours, base) => {\n const byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n const assemble = rawHandler => {\n const handler = read$2(rawHandler);\n return (component, simulatedEvent, ...rest) => {\n const args = [\n component,\n simulatedEvent\n ].concat(rest);\n if (handler.abort.apply(undefined, args)) {\n simulatedEvent.stop();\n } else if (handler.can.apply(undefined, args)) {\n handler.run.apply(undefined, args);\n }\n };\n };\n const missingOrderError = (eventName, tuples) => Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map$2(tuples, c => c.name), null, 2)]);\n const fuse = (tuples, eventOrder, eventName) => {\n const order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(sortedTuples => {\n const handlers = map$2(sortedTuples, tuple => tuple.handler);\n return fuse$1(handlers);\n });\n }\n };\n const combineGroups = (byEventName, eventOrder) => {\n const r = mapToArray(byEventName, (tuples, eventName) => {\n const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n return combined.map(handler => {\n const assembled = assemble(handler);\n const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], o => exists(tuples, t => t.name === o)).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n const baseBehaviour = 'alloy.base.behaviour';\n const schema$z = objOf([\n field$1('dom', 'dom', required$2(), objOf([\n required$1('tag'),\n defaulted('styles', {}),\n defaulted('classes', []),\n defaulted('attributes', {}),\n option$3('value'),\n option$3('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith({\n [execute$5()]: [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ],\n [focus$4()]: [\n baseBehaviour,\n 'focusing',\n 'keying'\n ],\n [systemInit()]: [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing',\n 'tooltipping'\n ],\n [input()]: [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n [detachedFromDom()]: [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [touchstart()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [mouseover()]: [\n 'item-type-events',\n 'tooltipping'\n ],\n [receive()]: [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ]\n }), anyValue()),\n option$3('domModification')\n ]);\n const toInfo = spec => asRaw('custom.definition', schema$z, spec);\n const toDefinition = detail => ({\n ...detail.dom,\n uid: detail.uid,\n domChildren: map$2(detail.components, comp => comp.element)\n });\n const toModification = detail => detail.domModification.fold(() => nu$8({}), nu$8);\n const toEvents = info => info.events;\n\n const get$7 = element => element.dom.value;\n const set$5 = (element, value) => {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n const determineObsoleted = (parent, index, oldObsoleted) => {\n const newObsoleted = child$2(parent, index);\n return newObsoleted.map(newObs => {\n const elemChanged = oldObsoleted.exists(o => !eq(o, newObs));\n if (elemChanged) {\n const oldTag = oldObsoleted.map(name$3).getOr('span');\n const marker = SugarElement.fromTag(oldTag);\n before$1(newObs, marker);\n return marker;\n } else {\n return newObs;\n }\n });\n };\n const ensureInDom = (parent, child, obsoleted) => {\n obsoleted.fold(() => append$2(parent, child), obs => {\n if (!eq(obs, child)) {\n before$1(obs, child);\n remove$6(obs);\n }\n });\n };\n const patchChildrenWith = (parent, nu, f) => {\n const builtChildren = map$2(nu, f);\n const currentChildren = children(parent);\n each$1(currentChildren.slice(builtChildren.length), remove$6);\n return builtChildren;\n };\n const patchSpecChild = (parent, index, spec, build) => {\n const oldObsoleted = child$2(parent, index);\n const childComp = build(spec, oldObsoleted);\n const obsoleted = determineObsoleted(parent, index, oldObsoleted);\n ensureInDom(parent, childComp.element, obsoleted);\n return childComp;\n };\n const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build));\n const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => {\n const optObsoleted = child$2(parent, index);\n ensureInDom(parent, node, optObsoleted);\n return node;\n });\n\n const diffKeyValueSet = (newObj, oldObj) => {\n const newKeys = keys(newObj);\n const oldKeys = keys(oldObj);\n const toRemove = difference(oldKeys, newKeys);\n const toSet = bifilter(newObj, (v, k) => {\n return !has$2(oldObj, k) || v !== oldObj[k];\n }).t;\n return {\n toRemove,\n toSet\n };\n };\n const reconcileToDom = (definition, obsoleted) => {\n const {\n class: clazz,\n style,\n ...existingAttributes\n } = clone$2(obsoleted);\n const {\n toSet: attrsToSet,\n toRemove: attrsToRemove\n } = diffKeyValueSet(definition.attributes, existingAttributes);\n const updateAttrs = () => {\n each$1(attrsToRemove, a => remove$8(obsoleted, a));\n setAll$1(obsoleted, attrsToSet);\n };\n const existingStyles = getAllRaw(obsoleted);\n const {\n toSet: stylesToSet,\n toRemove: stylesToRemove\n } = diffKeyValueSet(definition.styles, existingStyles);\n const updateStyles = () => {\n each$1(stylesToRemove, s => remove$7(obsoleted, s));\n setAll(obsoleted, stylesToSet);\n };\n const existingClasses = get$9(obsoleted);\n const classesToRemove = difference(existingClasses, definition.classes);\n const classesToAdd = difference(definition.classes, existingClasses);\n const updateClasses = () => {\n add$1(obsoleted, classesToAdd);\n remove$2(obsoleted, classesToRemove);\n };\n const updateHtml = html => {\n set$6(obsoleted, html);\n };\n const updateChildren = () => {\n const children = definition.domChildren;\n patchDomChildren(obsoleted, children);\n };\n const updateValue = () => {\n const valueElement = obsoleted;\n const value = definition.value.getOrUndefined();\n if (value !== get$7(valueElement)) {\n set$5(valueElement, value !== null && value !== void 0 ? value : '');\n }\n };\n updateAttrs();\n updateClasses();\n updateStyles();\n definition.innerHtml.fold(updateChildren, updateHtml);\n updateValue();\n return obsoleted;\n };\n\n const introduceToDom = definition => {\n const subject = SugarElement.fromTag(definition.tag);\n setAll$1(subject, definition.attributes);\n add$1(subject, definition.classes);\n setAll(subject, definition.styles);\n definition.innerHtml.each(html => set$6(subject, html));\n const children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(value => {\n set$5(subject, value);\n });\n return subject;\n };\n const attemptPatch = (definition, obsoleted) => {\n try {\n const e = reconcileToDom(definition, obsoleted);\n return Optional.some(e);\n } catch (err) {\n return Optional.none();\n }\n };\n const hasMixedChildren = definition => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n const renderToDom = (definition, optObsoleted) => {\n const canBePatched = candidate => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n const elem = optObsoleted.filter(canBePatched).bind(obsoleted => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n writeOnly(elem, definition.uid);\n return elem;\n };\n\n const getBehaviours$2 = spec => {\n const behaviours = get$h(spec, 'behaviours').getOr({});\n return bind$3(keys(behaviours), name => {\n const behaviour = behaviours[name];\n return isNonNullable(behaviour) ? [behaviour.me] : [];\n });\n };\n const generateFrom = (spec, all) => generateFrom$1(spec, all);\n const generate$4 = spec => {\n const all = getBehaviours$2(spec);\n return generateFrom(spec, all);\n };\n\n const getDomDefinition = (info, bList, bData) => {\n const definition = toDefinition(info);\n const infoModification = toModification(info);\n const baseModification = { 'alloy.base.modification': infoModification };\n const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n return merge(definition, modification);\n };\n const getEvents = (info, bList, bData) => {\n const baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n const build$2 = (spec, obsoleted) => {\n const getMe = () => me;\n const systemApi = Cell(singleton);\n const info = getOrDie(toInfo(spec));\n const bBlob = generate$4(spec);\n const bList = getBehaviours$3(bBlob);\n const bData = getData$2(bBlob);\n const modDefinition = getDomDefinition(info, bList, bData);\n const item = renderToDom(modDefinition, obsoleted);\n const events = getEvents(info, bList, bData);\n const subcomponents = Cell(info.components);\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(getMe));\n };\n const syncComponents = () => {\n const children$1 = children(item);\n const subs = bind$3(children$1, child => systemApi.get().getByDom(child).fold(() => [], pure$2));\n subcomponents.set(subs);\n };\n const config = behaviour => {\n const b = bData;\n const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n const hasConfigured = behaviour => isFunction(bData[behaviour.name()]);\n const getApis = () => info.apis;\n const readState = behaviourName => bData[behaviourName]().map(b => b.state.readState()).getOr('not enabled');\n const me = {\n uid: spec.uid,\n getSystem: systemApi.get,\n config,\n hasConfigured,\n spec,\n readState,\n getApis,\n connect,\n disconnect,\n element: item,\n syncComponents,\n components: subcomponents.get,\n events\n };\n return me;\n };\n\n const buildSubcomponents = (spec, obsoleted) => {\n const components = get$h(spec, 'components').getOr([]);\n return obsoleted.fold(() => map$2(components, build$1), obs => map$2(components, (c, i) => {\n return buildOrPatch(c, child$2(obs, i));\n }));\n };\n const buildFromSpec = (userSpec, obsoleted) => {\n const {\n events: specEvents,\n ...spec\n } = make$8(userSpec);\n const components = buildSubcomponents(spec, obsoleted);\n const completeSpec = {\n ...spec,\n events: {\n ...DefaultEvents,\n ...specEvents\n },\n components\n };\n return Result.value(build$2(completeSpec, obsoleted));\n };\n const text$2 = textContent => {\n const element = SugarElement.fromText(textContent);\n return external$1({ element });\n };\n const external$1 = spec => {\n const extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$1('element'),\n option$3('uid')\n ]), spec);\n const systemApi = Cell(NoContextApi());\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(() => me));\n };\n const uid = extSpec.uid.getOrThunk(() => generate$5('external'));\n writeOnly(extSpec.element, uid);\n const me = {\n uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect,\n disconnect,\n getApis: () => ({}),\n element: extSpec.element,\n spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n const uids = generate$5;\n const isSketchSpec$1 = spec => has$2(spec, 'uid');\n const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n uid: uids(''),\n ...spec\n };\n return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n });\n const build$1 = spec => buildOrPatch(spec, Optional.none());\n const premade = premade$1;\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$1 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$3 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child$1(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$5(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n\n const first$1 = selector => one(selector);\n const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n const sibling = (scope, selector) => sibling$1(scope, e => is(e, selector));\n const child = (scope, selector) => child$1(scope, e => is(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is$1 = (element, selector) => is(element, selector);\n return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n };\n\n const attribute = 'aria-controls';\n const find$1 = queryElem => {\n const dependent = closest$3(queryElem, elem => {\n if (!isElement$1(elem)) {\n return false;\n }\n const id = get$g(elem, 'id');\n return id !== undefined && id.indexOf(attribute) > -1;\n });\n return dependent.bind(dep => {\n const id = get$g(dep, 'id');\n const dos = getRootNode(dep);\n return descendant(dos, `[${ attribute }=\"${ id }\"]`);\n });\n };\n const manager = () => {\n const ariaId = generate$6(attribute);\n const link = elem => {\n set$9(elem, attribute, ariaId);\n };\n const unlink = elem => {\n remove$8(elem, attribute);\n };\n return {\n id: ariaId,\n link,\n unlink\n };\n };\n\n const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists(owner => isPartOf$1(component, owner));\n const isPartOf$1 = (component, queryElem) => closest$2(queryElem, el => eq(el, component.element), never) || isAriaPartOf(component, queryElem);\n\n const nu$6 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({\n x,\n y,\n bubble,\n direction,\n placement,\n restriction: boundsRestriction,\n label: `${ labelPrefix }-${ placement }`,\n alwaysFit\n });\n\n const adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n const cata$2 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle);\n const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west);\n const southeast$3 = adt$a.southeast;\n const southwest$3 = adt$a.southwest;\n const northeast$3 = adt$a.northeast;\n const northwest$3 = adt$a.northwest;\n const south$3 = adt$a.south;\n const north$3 = adt$a.north;\n const east$3 = adt$a.east;\n const west$3 = adt$a.west;\n\n const getRestriction = (anchor, restriction) => {\n switch (restriction) {\n case 1:\n return anchor.x;\n case 0:\n return anchor.x + anchor.width;\n case 2:\n return anchor.y;\n case 3:\n return anchor.y + anchor.height;\n }\n };\n const boundsRestriction = (anchor, restrictions) => mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], dir => get$h(restrictions, dir).map(restriction => getRestriction(anchor, restriction)));\n const adjustBounds = (bounds$1, restriction, bubbleOffset) => {\n const applyRestriction = (dir, current) => restriction[dir].map(pos => {\n const isVerticalAxis = dir === 'top' || dir === 'bottom';\n const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n const newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n const adjustedLeft = applyRestriction('left', bounds$1.x);\n const adjustedTop = applyRestriction('top', bounds$1.y);\n const adjustedRight = applyRestriction('right', bounds$1.right);\n const adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n const labelPrefix$2 = 'layout';\n const eastX$1 = anchor => anchor.x;\n const middleX$1 = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY$2 = (anchor, element) => anchor.y - element.height;\n const southY$2 = anchor => anchor.y + anchor.height;\n const centreY$1 = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const eastEdgeX$1 = anchor => anchor.x + anchor.width;\n const westEdgeX$1 = (anchor, element) => anchor.x - element.width;\n const southeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), labelPrefix$2);\n const southwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), labelPrefix$2);\n const northeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), labelPrefix$2);\n const northwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), labelPrefix$2);\n const north$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n const south$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n const east$2 = (anchor, element, bubbles) => nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n const west$2 = (anchor, element, bubbles) => nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n const all$1 = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const allRtl$1 = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const aboveOrBelow = () => [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n const aboveOrBelowRtl = () => [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n const belowOrAbove = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n const belowOrAboveRtl = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n\n const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, ch => contains$2(message.channels, ch));\n const events$g = receiveConfig => derive$2([run$1(receive(), (component, message) => {\n const channelMap = receiveConfig.channels;\n const channels = keys(channelMap);\n const receivingData = message;\n const targetChannels = chooseChannels(channels, receivingData);\n each$1(targetChannels, ch => {\n const channelInfo = channelMap[ch];\n const channelSchema = channelInfo.schema;\n const data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n const Receiving = create$4({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n const exhibit$6 = (base, posConfig) => nu$8({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n const focus$3 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n const blur$1 = element => element.dom.blur();\n const hasFocus = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const preserve$1 = (f, container) => {\n const dos = getRootNode(container);\n const refocus = active$1(dos).bind(focused => {\n const hasFocus = elem => eq(focused, elem);\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n const result = f(container);\n refocus.each(oldFocus => {\n active$1(dos).filter(newFocus => eq(newFocus, oldFocus)).fold(() => {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n const adt$9 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n const positionWithDirection = (posName, decision, x, y, width, height) => {\n const decisionRect = decision.rect;\n const decisionX = decisionRect.x - x;\n const decisionY = decisionRect.y - y;\n const decisionWidth = decisionRect.width;\n const decisionHeight = decisionRect.height;\n const decisionRight = width - (decisionX + decisionWidth);\n const decisionBottom = height - (decisionY + decisionHeight);\n const left = Optional.some(decisionX);\n const top = Optional.some(decisionY);\n const right = Optional.some(decisionRight);\n const bottom = Optional.some(decisionBottom);\n const none = Optional.none();\n return cata$2(decision.direction, () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, none, none, right, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none));\n };\n const reposition = (origin, decision) => origin.fold(() => {\n const decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, (x, y, width, height) => {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, (x, y, width, height) => {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n const toBox = (origin, element) => {\n const rel = curry(find$2, element);\n const position = origin.fold(rel, rel, () => {\n const scroll = get$c();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const viewport = (origin, optBounds) => optBounds.fold(() => origin.fold(win, win, bounds), bounds$1 => origin.fold(constant$1(bounds$1), constant$1(bounds$1), () => {\n const pos = translate$2(origin, bounds$1.x, bounds$1.y);\n return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n }));\n const translate$2 = (origin, x, y) => {\n const pos = SugarPosition(x, y);\n const removeScroll = () => {\n const outerScroll = get$c();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n adt$9.none;\n const relative$1 = adt$9.relative;\n const fixed$1 = adt$9.fixed;\n\n const anchor = (anchorBox, origin) => ({\n anchorBox,\n origin\n });\n const box = (anchorBox, origin) => anchor(anchorBox, origin);\n\n const placementAttribute = 'data-alloy-placement';\n const setPlacement$1 = (element, placement) => {\n set$9(element, placementAttribute, placement);\n };\n const getPlacement = element => getOpt(element, placementAttribute);\n const reset$1 = element => remove$8(element, placementAttribute);\n\n const adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n const determinePosition = (box, bounds) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds;\n const {x, y, right, bottom, width, height} = box;\n const xInBounds = x >= boundsX && x <= boundsRight;\n const yInBounds = y >= boundsY && y <= boundsBottom;\n const originInBounds = xInBounds && yInBounds;\n const rightInBounds = right <= boundsRight && right >= boundsX;\n const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n const sizeInBounds = rightInBounds && bottomInBounds;\n const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds,\n sizeInBounds,\n visibleW,\n visibleH\n };\n };\n const calcReposition = (box, bounds$1) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds$1;\n const {x, y, width, height} = box;\n const maxX = Math.max(boundsX, boundsRight - width);\n const maxY = Math.max(boundsY, boundsBottom - height);\n const restrictedX = clamp(x, boundsX, maxX);\n const restrictedY = clamp(y, boundsY, maxY);\n const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n const calcMaxSizes = (direction, box, bounds) => {\n const upAvailable = constant$1(box.bottom - bounds.y);\n const downAvailable = constant$1(bounds.bottom - box.y);\n const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n const westAvailable = constant$1(box.right - bounds.x);\n const eastAvailable = constant$1(bounds.right - box.x);\n const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth,\n maxHeight\n };\n };\n const attempt = (candidate, width, height, bounds$1) => {\n const bubble = candidate.bubble;\n const bubbleOffset = bubble.offset;\n const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n const newX = candidate.x + bubbleOffset.left;\n const newY = candidate.y + bubbleOffset.top;\n const box = bounds(newX, newY, width, height);\n const {originInBounds, sizeInBounds, visibleW, visibleH} = determinePosition(box, adjustedBounds);\n const fits = originInBounds && sizeInBounds;\n const fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n const {maxWidth, maxHeight} = calcMaxSizes(candidate.direction, fittedBox, bounds$1);\n const reposition = {\n rect: fittedBox,\n maxHeight,\n maxWidth,\n direction: candidate.direction,\n placement: candidate.placement,\n classes: {\n on: bubble.classesOn,\n off: bubble.classesOff\n },\n layout: candidate.label,\n testY: newY\n };\n return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n };\n const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => {\n const panelWidth = elementBox.width;\n const panelHeight = elementBox.height;\n const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => {\n const next = layout(anchorBox, elementBox, bubbles, element, bounds);\n const attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n const improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n const abc = foldl(candidates, (b, a) => {\n const bestNext = curry(attemptBestFit, a);\n return b.fold(constant$1(b), bestNext);\n }, adt$8.nofit({\n rect: anchorBox,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast$3(),\n placement: 'southeast',\n classes: {\n on: [],\n off: []\n },\n layout: 'none',\n testY: anchorBox.y\n }, -1, -1, false));\n return abc.fold(identity, identity);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n const capture = (element, event, handler) => capture$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n const timerAttr = 'data-alloy-transition-timer';\n const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes);\n const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n return lastPlacement.exists(placer => {\n const mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n const hasChanges = (position, intermediate) => {\n const round = value => parseFloat(value).toFixed(3);\n return find$4(intermediate, (value, key) => {\n const newValue = position[key].map(round);\n const val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n const getTransitionDuration = element => {\n const get = name => {\n const style = get$f(element, name);\n const times = style.split(/\\s*,\\s*/);\n return filter$2(times, isNotEmpty);\n };\n const parse = value => {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n const num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n const delay = get('transition-delay');\n const duration = get('transition-duration');\n return foldl(duration, (acc, dur, i) => {\n const time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n const setupTransitionListeners = (element, transition) => {\n const transitionEnd = unbindable();\n const transitionCancel = unbindable();\n let timer;\n const isSourceTransition = e => {\n var _a;\n const pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n };\n const transitionDone = e => {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n const type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$8(element, timerAttr);\n remove$2(element, transition.classes);\n }\n }\n };\n const transitionStart = bind(element, transitionstart(), e => {\n if (isSourceTransition(e)) {\n transitionStart.unbind();\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n }\n });\n const duration = getTransitionDuration(element);\n requestAnimationFrame(() => {\n timer = setTimeout(transitionDone, duration + 17);\n set$9(element, timerAttr, timer);\n });\n };\n const startTransitioning = (element, transition) => {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(timerId => {\n clearTimeout(parseInt(timerId, 10));\n remove$8(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => {\n const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$8(element, 'position', position.position);\n const rect = toBox(origin, element);\n const intermediatePosition = reposition(origin, {\n ...decision,\n rect\n });\n const intermediateCssOptions = mapToObject(properties, prop => intermediatePosition[prop]);\n if (hasChanges(position, intermediateCssOptions)) {\n setOptions(element, intermediateCssOptions);\n if (shouldTransition) {\n startTransitioning(element, transition);\n }\n reflow(element);\n }\n } else {\n remove$2(element, transition.classes);\n }\n };\n\n const elementSize = p => ({\n width: getOuter$1(p),\n height: getOuter$2(p)\n });\n const layout = (anchorBox, element, bubbles, options) => {\n remove$7(element, 'max-height');\n remove$7(element, 'max-width');\n const elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n const setClasses = (element, decision) => {\n const classInfo = decision.classes;\n remove$2(element, classInfo.off);\n add$1(element, classInfo.on);\n };\n const setHeight = (element, decision, options) => {\n const maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n const setWidth = (element, decision, options) => {\n const maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n const position$2 = (element, decision, options) => {\n const positionCss = reposition(options.origin, decision);\n options.transition.each(transition => {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n const setPlacement = (element, decision) => {\n setPlacement$1(element, decision.placement);\n };\n\n const setMaxHeight = (element, maxHeight) => {\n setMax$1(element, Math.floor(maxHeight));\n };\n const anchored = constant$1((element, available) => {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n const expandable$1 = constant$1((element, available) => {\n setMaxHeight(element, available);\n });\n\n const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key];\n const simple = (anchor, element, bubble, layouts, lastPlacement, optBounds, overrideOptions, transition) => {\n const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n const anchorBox = anchor.anchorBox;\n const origin = anchor.origin;\n const options = {\n bounds: viewport(origin, optBounds),\n origin,\n preference: layouts,\n maxHeightFunction,\n maxWidthFunction,\n lastPlacement,\n transition\n };\n return go(anchorBox, element, bubble, options);\n };\n const go = (anchorBox, element, bubble, options) => {\n const decision = layout(anchorBox, element, bubble, options);\n position$2(element, decision, options);\n setPlacement(element, decision);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n return {\n layout: decision.layout,\n placement: decision.placement\n };\n };\n\n const allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n const nu$5 = (xOffset, yOffset, classes, insetModifier = 1) => {\n const insetXOffset = xOffset * insetModifier;\n const insetYOffset = yOffset * insetModifier;\n const getClasses = prop => get$h(classes, prop).getOr([]);\n const make = (xDelta, yDelta, alignmentsOn) => {\n const alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind$3(alignmentsOn, getClasses),\n classesOff: bind$3(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: () => make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]),\n southwest: () => make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]),\n south: () => make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]),\n northeast: () => make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]),\n northwest: () => make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]),\n north: () => make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]),\n east: () => make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]),\n west: () => make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]),\n insetNortheast: () => make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]),\n insetNorthwest: () => make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]),\n insetNorth: () => make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]),\n insetSoutheast: () => make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]),\n insetSouthwest: () => make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]),\n insetSouth: () => make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]),\n insetEast: () => make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]),\n insetWest: () => make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ])\n };\n };\n const fallback = () => nu$5(0, 0, {});\n\n const nu$4 = identity;\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$f(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n const Attribute = 'data-alloy-vertical-dir';\n const isBottomToTopDir = el => closest$2(el, current => isElement$1(current) && get$g(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop);\n\n const schema$y = () => optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option$3('onBottomLtr'),\n option$3('onBottomRtl')\n ]);\n const get$6 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n const customLtr = info.layouts.map(ls => ls.onLtr(elem));\n const customRtl = info.layouts.map(ls => ls.onRtl(elem));\n const ltr = isBottomToTop ? info.layouts.bind(ls => ls.onBottomLtr.map(f => f(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n const rtl = isBottomToTop ? info.layouts.bind(ls => ls.onBottomRtl.map(f => f(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n const f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n const placement$4 = (component, anchorInfo, origin) => {\n const hotspot = anchorInfo.hotspot;\n const anchorBox = toBox(origin, hotspot.element);\n const layouts = get$6(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option$3('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n const placement$3 = (component, anchorInfo, origin) => {\n const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n const layouts = get$6(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var MakeshiftAnchor = [\n required$1('x'),\n required$1('y'),\n defaulted('height', 0),\n defaulted('width', 0),\n defaulted('bubble', fallback()),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$3)\n ];\n\n const adt$7 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n const toFixed = pos => pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop));\n const toAbsolute = pos => pos.fold(identity, identity);\n const sum = points => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0));\n const sumAsFixed = positions => {\n const points = map$2(positions, toFixed);\n return sum(points);\n };\n const sumAsAbsolute = positions => {\n const points = map$2(positions, toAbsolute);\n return sum(points);\n };\n const screen = adt$7.screen;\n const absolute$1 = adt$7.absolute;\n\n const getOffset = (component, origin, anchorInfo) => {\n const win = defaultView(anchorInfo.root).dom;\n const hasSameOwner = frame => {\n const frameOwner = owner$4(frame);\n const compOwner = owner$4(component.element);\n return eq(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n };\n const getRootPoint = (component, origin, anchorInfo) => {\n const doc = owner$4(component.element);\n const outerScroll = get$c(doc);\n const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n const getBox = (left, top, width, height) => {\n const point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map(box => {\n const points = [\n rootPoint,\n box.point\n ];\n const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n const layouts = get$6(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n });\n });\n\n const placement$2 = (component, anchorInfo, origin) => {\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(target => {\n const rect = target.dom.getBoundingClientRect();\n const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n const elem = anchorInfo.node.getOr(component.element);\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n required$1('node'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before = adt$6.before;\n const on$1 = adt$6.on;\n const after$1 = adt$6.after;\n const Situ = {\n before,\n on: on$1,\n after: after$1,\n cata,\n getStart: getStart$1\n };\n\n const adt$5 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$5.domRange;\n const relative = adt$5.relative;\n const exact = adt$5.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range$1 = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range: range$1\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n const getBounds$2 = rng => {\n const rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant$1(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$4.ltr, rng));\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$4.ltr;\n adt$4.rtl;\n\n const ancestors = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n\n const descendants = (scope, selector) => all$3(selector, scope);\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner$4(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getBounds$1 = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getBounds$2(rng);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$5 = element => api.get(element);\n\n const point = (element, offset) => ({\n element,\n offset\n });\n const descendOnce$1 = (element, offset) => {\n const children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n const last = children$1[children$1.length - 1];\n const len = isText(last) ? get$5(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset);\n const isSimRange = detail => detail.foffset !== undefined;\n const getAnchorSelection = (win, anchorInfo) => {\n const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win));\n return getSelection().map(sel => {\n if (isSimRange(sel)) {\n const modStart = descendOnce(sel.start, sel.soffset);\n const modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n } else {\n return sel;\n }\n });\n };\n const placement$1 = (component, anchorInfo, origin) => {\n const win = defaultView(anchorInfo.root).dom;\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n const selectionBox = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n const optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(() => {\n const zeroWidth$1 = SugarElement.fromText(zeroWidth);\n before$1(sel.start, zeroWidth$1);\n const rect = getFirstRect(win, SimSelection.exact(zeroWidth$1, 0, zeroWidth$1, 1));\n remove$6(zeroWidth$1);\n return rect;\n });\n return optRect.bind(rawRect => {\n return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n } else {\n const selectionRect = map$1(sel, cell => cell.dom.getBoundingClientRect());\n const bounds = {\n left: Math.min(selectionRect.firstCell.left, selectionRect.lastCell.left),\n right: Math.max(selectionRect.firstCell.right, selectionRect.lastCell.right),\n top: Math.min(selectionRect.firstCell.top, selectionRect.lastCell.top),\n bottom: Math.max(selectionRect.firstCell.bottom, selectionRect.lastCell.bottom)\n };\n return getBox(bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top);\n }\n });\n const targetElement = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n return isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start);\n } else {\n return Optional.some(sel.firstCell);\n }\n });\n const elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option$3('getSelection'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n const labelPrefix$1 = 'link-layout';\n const eastX = anchor => anchor.x + anchor.width;\n const westX = (anchor, element) => anchor.x - element.width;\n const northY$1 = (anchor, element) => anchor.y - element.height + anchor.height;\n const southY$1 = anchor => anchor.y;\n const southeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n const southwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), labelPrefix$1);\n const northeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), labelPrefix$1);\n const northwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), labelPrefix$1);\n const all = () => [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n const allRtl = () => [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n\n const placement = (component, submenuInfo, origin) => {\n const anchorBox = toBox(origin, submenuInfo.item.element);\n const layouts = get$6(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts\n }));\n };\n var SubmenuAnchor = [\n required$1('item'),\n schema$y(),\n defaulted('overrides', {}),\n output$1('placement', placement)\n ];\n\n var AnchorSchema = choose$1('type', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n const TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n const PositionSchema = [\n defaulted('useFixed', never),\n option$3('getBounds')\n ];\n const PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n const getFixedOrigin = () => {\n const html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n const getRelativeOrigin = component => {\n const position = absolute$3(component.element);\n const bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n const place = (origin, anchoring, optBounds, placee, lastPlace, transition) => {\n const anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, optBounds, anchoring.overrides, transition);\n };\n const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n const optWithinBounds = Optional.none();\n positionWithinBounds(component, posConfig, posState, placee, placementSpec, optWithinBounds);\n };\n const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, optWithinBounds) => {\n const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n const anchorage = placeeDetail.anchor;\n const element = placee.element;\n const placeeState = posState.get(placee.uid);\n preserve$1(() => {\n set$8(element, 'position', 'fixed');\n const oldVisibility = getRaw(element, 'visibility');\n set$8(element, 'visibility', 'hidden');\n const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n anchorage.placement(component, anchorage, origin).each(anchoring => {\n const optBounds = optWithinBounds.orThunk(() => posConfig.getBounds.map(apply$1));\n const newState = place(origin, anchoring, optBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(() => {\n remove$7(element, 'visibility');\n }, vis => {\n set$8(element, 'visibility', vis);\n });\n if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is$1(getRaw(element, 'position'), 'fixed')) {\n remove$7(element, 'position');\n }\n }, element);\n };\n const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute';\n const reset = (component, pConfig, posState, placee) => {\n const element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], prop => remove$7(element, prop));\n reset$1(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset\n });\n\n const init$f = () => {\n let state = {};\n const set = (id, data) => {\n state[id] = data;\n };\n const get = id => get$h(state, id);\n const clear = id => {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$7({\n readState: () => state,\n clear,\n set,\n get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n const Positioning = create$4({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n const isConnected = comp => comp.getSystem().isConnected();\n const fireDetaching = component => {\n emit(component, detachedFromDom());\n const children = component.components();\n each$1(children, fireDetaching);\n };\n const fireAttaching = component => {\n const children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n const virtualAttach = (parent, child) => {\n parent.getSystem().addToWorld(child);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n };\n const virtualDetach = comp => {\n fireDetaching(comp);\n comp.getSystem().removeFromWorld(comp);\n };\n const attach$1 = (parent, child) => {\n append$2(parent.element, child.element);\n };\n const detachChildren$1 = component => {\n each$1(component.components(), childComp => remove$6(childComp.element));\n empty(component.element);\n component.syncComponents();\n };\n const replaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n detachChildren$1(component);\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, comp => {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n component.getSystem().addToWorld(childComp);\n attach$1(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach$1(component, childComp);\n }\n });\n component.syncComponents();\n };\n const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n const existingComps = bind$3(newSpecs, spec => getPremade(spec).toArray());\n each$1(subs, childComp => {\n if (!contains$2(existingComps, childComp)) {\n virtualDetach(childComp);\n }\n });\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, deletedComp => {\n if (isConnected(deletedComp)) {\n virtualDetach(deletedComp);\n }\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n virtualAttach(component, childComp);\n }\n });\n component.syncComponents();\n };\n\n const attach = (parent, child) => {\n attachWith(parent, child, append$2);\n };\n const attachWith = (parent, child, insertion) => {\n parent.getSystem().addToWorld(child);\n insertion(parent.element, child.element);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n parent.syncComponents();\n };\n const doDetach = component => {\n fireDetaching(component);\n remove$6(component.element);\n component.getSystem().removeFromWorld(component);\n };\n const detach = component => {\n const parent$1 = parent(component.element).bind(p => component.getSystem().getByDom(p).toOptional());\n doDetach(component);\n parent$1.each(p => {\n p.syncComponents();\n });\n };\n const detachChildren = component => {\n const subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n const attachSystem = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, append$2);\n };\n const attachSystemAfter = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, after$2);\n };\n const attachSystemWith = (element, guiSystem, inserter) => {\n inserter(element, guiSystem.element);\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n const detachSystem = guiSystem => {\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$6(guiSystem.element);\n };\n\n const rebuild = (sandbox, sConfig, sState, data) => {\n sState.get().each(_data => {\n detachChildren(sandbox);\n });\n const point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n const built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n const open$1 = (sandbox, sConfig, sState, data) => {\n const newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n cloak(sandbox, sConfig);\n open$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n const close$1 = (sandbox, sConfig, sState) => {\n sState.get().each(data => {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists(data => sConfig.isPartOf(sandbox, data, queryElem));\n const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n const store = (sandbox, cssKey, attr, newValue) => {\n getRaw(sandbox.element, cssKey).fold(() => {\n remove$8(sandbox.element, attr);\n }, v => {\n set$9(sandbox.element, attr, v);\n });\n set$8(sandbox.element, cssKey, newValue);\n };\n const restore = (sandbox, cssKey, attr) => {\n getOpt(sandbox.element, attr).fold(() => remove$7(sandbox.element, cssKey), oldValue => set$8(sandbox.element, cssKey, oldValue));\n };\n const cloak = (sandbox, sConfig, _sState) => {\n const sink = sConfig.getAttachPoint(sandbox);\n set$8(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n const hasPosition = element => exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], pos => getRaw(element, pos).isSome());\n const decloak = (sandbox, sConfig, _sState) => {\n if (!hasPosition(sandbox.element)) {\n remove$7(sandbox.element, 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open$1,\n openWhileCloaked: openWhileCloaked,\n close: close$1,\n isOpen: isOpen$1,\n isPartOf: isPartOf,\n getState: getState$2,\n setContent: setContent\n });\n\n const events$f = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n required$1('isPartOf'),\n required$1('getAttachPoint'),\n defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n const init$e = () => {\n const contents = value$4();\n const readState = constant$1('not-implemented');\n return nu$7({\n readState,\n isOpen: contents.isSet,\n clear: contents.clear,\n set: contents.set,\n get: contents.get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$e\n });\n\n const Sandboxing = create$4({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n const dismissPopups = constant$1('dismiss.popups');\n const repositionPopups = constant$1('reposition.popups');\n const mouseReleased = constant$1('mouse.released');\n\n const schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n const receivingChannel$1 = rawSpec => {\n const detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return {\n [dismissPopups()]: {\n schema: objOfOnly([required$1('target')]),\n onReceive: (sandbox, data) => {\n if (Sandboxing.isOpen(sandbox)) {\n const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n }\n };\n };\n\n const schema$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n const receivingChannel = rawSpec => {\n const detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n return {\n [repositionPopups()]: {\n onReceive: sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(() => detail.doReposition(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n };\n };\n\n const onLoad$5 = (component, repConfig, repState) => {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n const onUnload$2 = (component, repConfig, repState) => {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n const setValue$3 = (component, repConfig, repState, data) => {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n const getState$1 = (component, repConfig, repState) => repState;\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$5,\n onUnload: onUnload$2,\n setValue: setValue$3,\n getValue: getValue$3,\n getState: getState$1\n });\n\n const events$e = (repConfig, repState) => {\n const es = repConfig.resetOnDom ? [\n runOnAttached((comp, _se) => {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached((comp, _se) => {\n onUnload$2(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad$5)];\n return derive$2(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$e\n });\n\n const memory$1 = () => {\n const data = Cell(null);\n const readState = () => ({\n mode: 'memory',\n value: data.get()\n });\n const isNotSet = () => data.get() === null;\n const clear = () => {\n data.set(null);\n };\n return nu$7({\n set: data.set,\n get: data.get,\n isNotSet,\n clear,\n readState\n });\n };\n const manual = () => {\n const readState = noop;\n return nu$7({ readState });\n };\n const dataset = () => {\n const dataByValue = Cell({});\n const dataByText = Cell({});\n const readState = () => ({\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n });\n const clear = () => {\n dataByValue.set({});\n dataByText.set({});\n };\n const lookup = itemString => get$h(dataByValue.get(), itemString).orThunk(() => get$h(dataByText.get(), itemString));\n const update = items => {\n const currentDataByValue = dataByValue.get();\n const currentDataByText = dataByText.get();\n const newDataByValue = {};\n const newDataByText = {};\n each$1(items, item => {\n newDataByValue[item.value] = item;\n get$h(item, 'meta').each(meta => {\n get$h(meta, 'text').each(text => {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set({\n ...currentDataByValue,\n ...newDataByValue\n });\n dataByText.set({\n ...currentDataByText,\n ...newDataByText\n });\n };\n return nu$7({\n readState,\n lookup,\n update,\n clear\n });\n };\n const init$d = spec => spec.store.manager.state(spec);\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$d\n });\n\n const setValue$2 = (component, repConfig, repState, data) => {\n const store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const getValue$2 = (component, repConfig, repState) => {\n const store = repConfig.store;\n const key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key));\n };\n const onLoad$4 = (component, repConfig, repState) => {\n const store = repConfig.store;\n store.initialValue.each(data => {\n setValue$2(component, repConfig, repState, data);\n });\n };\n const onUnload$1 = (component, repConfig, repState) => {\n repState.clear();\n };\n var DatasetStore = [\n option$3('initialValue'),\n required$1('getFallbackEntry'),\n required$1('getDataKey'),\n required$1('setValue'),\n output$1('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$4,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n const setValue$1 = (component, repConfig, _repState, data) => {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const onLoad$3 = (component, repConfig, _repState) => {\n repConfig.store.initialValue.each(data => {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option$3('initialValue'),\n output$1('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$3,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n const setValue = (component, repConfig, repState, data) => {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n const getValue = (component, repConfig, repState) => repState.get();\n const onLoad$2 = (component, repConfig, repState) => {\n repConfig.store.initialValue.each(initVal => {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n const onUnload = (component, repConfig, repState) => {\n repState.clear();\n };\n var MemoryStore = [\n option$3('initialValue'),\n output$1('manager', {\n setValue,\n getValue,\n onLoad: onLoad$2,\n onUnload,\n state: memory$1\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted('resetOnDom', false)\n ];\n\n const Representing = create$4({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: (component, source) => {\n const value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, f => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([customField('dump', identity)]));\n const get$4 = data => data.dump;\n const augment = (data, original) => ({\n ...derive$1(original),\n ...data.dump\n });\n const SketchBehaviours = {\n field,\n augment,\n get: get$4\n };\n\n const _placeholder = 'placeholder';\n const adt$3 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n const isSubstituted = spec => has$2(spec, 'uiType');\n const subPlaceholder = (owner, detail, compSpec, placeholders) => {\n if (owner.exists(o => o !== compSpec.owner)) {\n return adt$3.single(true, constant$1(compSpec));\n }\n return get$h(placeholders, compSpec.name).fold(() => {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, newSpec => newSpec.replace());\n };\n const scan = (owner, detail, compSpec, placeholders) => {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$3.single(false, constant$1(compSpec));\n }\n };\n const substitute = (owner, detail, compSpec, placeholders) => {\n const base = scan(owner, detail, compSpec, placeholders);\n return base.fold((req, valueThunk) => {\n const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n const childSpecs = get$h(value, 'components').getOr([]);\n const substituted = bind$3(childSpecs, c => substitute(owner, detail, c, placeholders));\n return [{\n ...value,\n components: substituted\n }];\n }, (req, valuesThunk) => {\n if (isSubstituted(compSpec)) {\n const values = valuesThunk(detail, compSpec.config, compSpec.validated);\n const preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n const substituteAll = (owner, detail, components, placeholders) => bind$3(components, c => substitute(owner, detail, c, placeholders));\n const oneReplace = (label, replacements) => {\n let called = false;\n const used = () => called;\n const replace = () => {\n if (called) {\n throw new Error('Trying to use the same placeholder more than once: ' + label);\n }\n called = true;\n return replacements;\n };\n const required = () => replacements.fold((req, _) => req, (req, _) => req);\n return {\n name: constant$1(label),\n required,\n used,\n replace\n };\n };\n const substitutePlaces = (owner, detail, components, placeholders) => {\n const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph));\n const outcome = substituteAll(owner, detail, components, ps);\n each(ps, p => {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n const single$2 = adt$3.single;\n const multiple = adt$3.multiple;\n const placeholder = constant$1(_placeholder);\n\n const adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n const fFactory = defaulted('factory', { sketch: identity });\n const fSchema = defaulted('schema', []);\n const fName = required$1('name');\n const fPname = field$1('pname', 'pname', defaultedThunk(typeSpec => ''), anyValue());\n const fGroupSchema = customField('schema', () => [option$3('preprocess')]);\n const fDefaults = defaulted('defaults', constant$1({}));\n const fOverrides = defaulted('overrides', constant$1({}));\n const requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n const optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n const asNamedPart = part => {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n const name$2 = part => {\n const get = data => data.name;\n return part.fold(get, get, get, get);\n };\n const asCommon = part => {\n return part.fold(identity, identity, identity, identity);\n };\n const convert = (adtConstructor, partSchema) => spec => {\n const data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n const required = convert(adt$2.required, requiredSpec);\n const external = convert(adt$2.external, externalSpec);\n const optional = convert(adt$2.optional, optionalSpec);\n const group = convert(adt$2.group, groupSpec);\n const original = constant$1('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$2,\n asCommon: asCommon,\n original: original\n });\n\n const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n const subs = (owner, detail, parts) => {\n const internals = {};\n const externals = {};\n each$1(parts, part => {\n part.fold(data => {\n internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n const partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, data => {\n internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => {\n const units = detail[data.name];\n return map$2(units, u => data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u))));\n });\n });\n });\n return {\n internals: constant$1(internals),\n externals: constant$1(externals)\n };\n };\n\n const generate$3 = (owner, parts) => {\n const r = {};\n each$1(parts, part => {\n asNamedPart(part).each(np => {\n const g = doGenerateOne(owner, np.pname);\n r[np.name] = config => {\n const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return {\n ...g,\n config,\n validated\n };\n };\n });\n });\n return r;\n };\n const doGenerateOne = (owner, pname) => ({\n uiType: placeholder(),\n owner,\n name: pname\n });\n const generateOne$1 = (owner, pname, config) => ({\n uiType: placeholder(),\n owner,\n name: pname,\n config,\n validated: {}\n });\n const schemas = parts => bind$3(parts, part => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(data => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n const names = parts => map$2(parts, name$2);\n const substitutes = (owner, detail, parts) => subs(owner, detail, parts);\n const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n const getPart = (component, detail, partKey) => {\n const uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n const getParts = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n const getAllParts = (component, detail) => {\n const system = component.getSystem();\n return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n };\n const getAllPartNames = detail => keys(detail.partUids);\n const getPartsOrDie = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n const defaultUids = (baseUid, partTypes) => {\n const partNames = names(partTypes);\n return wrapAll(map$2(partNames, pn => ({\n key: pn,\n value: baseUid + '-' + pn\n })));\n };\n const defaultUidsSchema = partTypes => field$1('partUids', 'partUids', mergeWithThunk(spec => defaultUids(spec.uid, partTypes)), anyValue());\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$3,\n generateOne: generateOne$1,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components$1,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n const base = (partSchemas, partUidsSchemas) => {\n const ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n return ps.concat([\n required$1('uid'),\n defaulted('dom', {}),\n defaulted('components', []),\n snapshot('originalSpec'),\n defaulted('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => {\n const baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n const single$1 = (owner, schema, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const detail = asRawOrDie(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n const composite$1 = (owner, schema, partTypes, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const partSchemas = schemas(partTypes);\n const partUidsSchema = defaultUidsSchema(partTypes);\n const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n const subs = substitutes(owner, detail, partTypes);\n const components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n const hasUid = spec => has$2(spec, 'uid');\n const supplyUid = spec => {\n return hasUid(spec) ? spec : {\n ...spec,\n uid: generate$5('uid')\n };\n };\n\n const isSketchSpec = spec => {\n return spec.uid !== undefined;\n };\n const singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const compositeSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n required$1('partFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const single = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n const sketch = spec => single$1(config.name, config.configFields, config.factory, spec);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n configFields: config.configFields,\n sketch,\n ...apis,\n ...extraApis\n };\n };\n const composite = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n const sketch = spec => composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n const parts = generate$3(config.name, config.partFields);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch,\n parts,\n ...apis,\n ...extraApis\n };\n };\n\n const inside = target => isTag('input')(target) && get$g(target, 'type') !== 'radio' || isTag('textarea')(target);\n\n const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n const ComposeSchema = [required$1('find')];\n\n const Composing = create$4({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n const nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n const onLoad$1 = (component, disableConfig, disableState) => {\n const f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig);\n };\n const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n const nativeIsDisabled = component => has$1(component.element, 'disabled');\n const nativeDisable = component => {\n set$9(component.element, 'disabled', 'disabled');\n };\n const nativeEnable = component => {\n remove$8(component.element, 'disabled');\n };\n const ariaIsDisabled = component => get$g(component.element, 'aria-disabled') === 'true';\n const ariaDisable = component => {\n set$9(component.element, 'aria-disabled', 'true');\n };\n const ariaEnable = component => {\n set$9(component.element, 'aria-disabled', 'false');\n };\n const disable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n add$2(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n const enable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n remove$3(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n const isDisabled = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n const set$4 = (component, disableConfig, disableState, disabled) => {\n const f = disabled ? disable : enable;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable,\n disable: disable,\n isDisabled: isDisabled,\n onLoad: onLoad$1,\n set: set$4\n });\n\n const exhibit$5 = (base, disableConfig) => nu$8({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n const events$d = (disableConfig, disableState) => derive$2([\n abort(execute$5(), (component, _simulatedEvent) => isDisabled(component, disableConfig)),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$d\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option$3('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n const Disabling = create$4({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n const highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, h => {\n const shouldSkip = exists(skip, skipComp => eq(skipComp.element, h));\n if (!shouldSkip) {\n remove$3(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(target => {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n const dehighlight = (component, hConfig, hState, target) => {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$3(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n const highlight = (component, hConfig, hState, target) => {\n dehighlightAllExcept(component, hConfig, hState, [target]);\n if (!isHighlighted(component, hConfig, hState, target)) {\n add$2(target.element, hConfig.highlightClass);\n hConfig.onHighlight(component, target);\n emit(target, highlight$1());\n }\n };\n const highlightFirst = (component, hConfig, hState) => {\n getFirst(component, hConfig).each(firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightLast = (component, hConfig, hState) => {\n getLast(component, hConfig).each(lastComp => {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n const highlightAt = (component, hConfig, hState, index) => {\n getByIndex(component, hConfig, hState, index).fold(err => {\n throw err;\n }, firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightBy = (component, hConfig, hState, predicate) => {\n const candidates = getCandidates(component, hConfig);\n const targetComp = find$5(candidates, predicate);\n targetComp.each(c => {\n highlight(component, hConfig, hState, c);\n });\n };\n const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass);\n const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getByIndex = (component, hConfig, hState, index) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom);\n };\n const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getLast = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(c => component.getSystem().getByDom(c).toOptional());\n };\n const getDelta$2 = (component, hConfig, hState, delta) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const current = findIndex$1(items, item => has(item, hConfig.highlightClass));\n return current.bind(selected => {\n const dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1);\n const getCandidates = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, i => component.getSystem().getByDom(i).toOptional()));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight,\n highlight: highlight,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n required$1('highlightClass'),\n required$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n const Highlighting = create$4({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n const BACKSPACE = [8];\n const TAB = [9];\n const ENTER = [13];\n const ESCAPE = [27];\n const SPACE = [32];\n const LEFT = [37];\n const UP = [38];\n const RIGHT = [39];\n const DOWN = [40];\n\n const cyclePrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n const after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n const tryPrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n return find$5(before, predicate);\n };\n const cycleNext = (values, index, predicate) => {\n const before = values.slice(0, index);\n const after = values.slice(index + 1);\n return find$5(after.concat(before), predicate);\n };\n const tryNext = (values, index, predicate) => {\n const after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n const inSet = keys => event => {\n const raw = event.raw;\n return contains$2(keys, raw.which);\n };\n const and = preds => event => forall(preds, pred => pred(event));\n const isShift$1 = event => {\n const raw = event.raw;\n return raw.shiftKey === true;\n };\n const isControl = event => {\n const raw = event.raw;\n return raw.ctrlKey === true;\n };\n const isNotShift = not(isShift$1);\n\n const rule = (matches, action) => ({\n matches,\n classification: action\n });\n const choose = (transitions, event) => {\n const transition = find$5(transitions, t => t.matches(event));\n return transition.map(t => t.classification);\n };\n\n const reportFocusShifting = (component, prevFocus, newFocus) => {\n const noChange = prevFocus.exists(p => newFocus.exists(n => eq(n, p)));\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus,\n newFocus\n });\n }\n };\n const dom$2 = () => {\n const get = component => search(component.element);\n const set = (component, focusee) => {\n const prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n const highlights = () => {\n const get = component => Highlighting.getHighlighted(component).map(item => item.element);\n const set = (component, element) => {\n const prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, item => {\n Highlighting.highlight(component, item);\n });\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => {\n const schema = () => infoSchema.concat([\n defaulted('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(val => contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(rule => rule(component, simulatedEvent, keyingConfig, keyingState));\n };\n const toEvents = (keyingConfig, keyingState) => {\n const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(focusIn => run$1(focus$4(), (component, simulatedEvent) => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n }));\n const tryGoInsideComponent = (component, simulatedEvent) => {\n const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(focusIn => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n const keyboardEvents = [\n run$1(keydown(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => {\n tryGoInsideComponent(component, simulatedEvent);\n }, _ => {\n simulatedEvent.stop();\n });\n }),\n run$1(keyup(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(_ => {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n };\n const me = {\n schema,\n processKey,\n toEvents\n };\n return me;\n };\n\n const create$2 = cyclicField => {\n const schema = [\n option$3('onEscape'),\n option$3('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option$3('visibilitySelector')\n ].concat([cyclicField]);\n const isVisible = (tabbingConfig, element) => {\n const target = tabbingConfig.visibilitySelector.bind(sel => closest$1(element, sel)).getOr(element);\n return get$e(target) > 0;\n };\n const findInitial = (component, tabbingConfig) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n const visibles = filter$2(tabstops, elem => isVisible(tabbingConfig, elem));\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind(elem => closest$1(elem, tabbingConfig.selector));\n const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n const focusIn = (component, tabbingConfig, _tabbingState) => {\n findInitial(component, tabbingConfig).each(target => {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, elem => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), target => {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n const go = (component, _simulatedEvent, tabbingConfig, cycle) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(tabstop => {\n const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(stopIndex => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n });\n };\n const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const goForwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const isFirstChild = elem => parentNode(elem).bind(firstChild).exists(child => eq(child, elem));\n const goFromPseudoTabstop = (component, simulatedEvent, tabbingConfig) => findCurrent(component, tabbingConfig).filter(elem => !tabbingConfig.useTabstopAt(elem)).bind(elem => (isFirstChild(elem) ? goBackwards : goForwards)(component, simulatedEvent, tabbingConfig));\n const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind(f => f(component, simulatedEvent));\n const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind(f => f(component, simulatedEvent));\n const getKeydownRules = constant$1([\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n const getKeyupRules = constant$1([\n rule(inSet(ESCAPE), exit),\n rule(inSet(TAB), goFromPseudoTabstop)\n ]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn));\n };\n\n var AcyclicType = create$2(customField('cyclic', never));\n\n var CyclicType = create$2(customField('cyclic', always));\n\n const doDefaultExecute = (component, _simulatedEvent, focused) => {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n const defaultExecute = (component, simulatedEvent, focused) => {\n const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n\n const schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n const enterExec = executeConfig.useEnter ? ENTER : [];\n const downExec = executeConfig.useDown ? DOWN : [];\n const execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$4)] : []);\n };\n const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n\n const flatgrid$1 = () => {\n const dimensions = value$4();\n const setGridSize = (numRows, numColumns) => {\n dimensions.set({\n numRows,\n numColumns\n });\n };\n const getNumRows = () => dimensions.get().map(d => d.numRows);\n const getNumColumns = () => dimensions.get().map(d => d.numColumns);\n return nu$7({\n readState: () => dimensions.get().map(d => ({\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n })).getOr({\n numRows: '?',\n numColumns: '?'\n }),\n setGridSize,\n getNumRows,\n getNumColumns\n });\n };\n const init$c = spec => spec.state(spec);\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$c\n });\n\n const useH = movement => (component, simulatedEvent, config, state) => {\n const move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n const west$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n const east$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n const useV = move => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state);\n const use = (move, component, simulatedEvent, config, state) => {\n const outcome = config.focusManager.get(component).bind(focused => move(component.element, focused, config, state));\n return outcome.map(newFocus => {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n const north$1 = useV;\n const south$1 = useV;\n const move$1 = useV;\n\n const isHidden$1 = dom => dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n const isVisible = element => !isHidden$1(element.dom);\n\n const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map(index => ({\n index,\n candidates\n }));\n\n const locateVisible = (container, current, selector) => {\n const predicate = x => eq(x, current);\n const candidates = descendants(container, selector);\n const visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n const findIndex = (elements, target) => findIndex$1(elements, elem => eq(target, elem));\n\n const withGrid = (values, index, numCols, f) => {\n const oldRow = Math.floor(index / numCols);\n const oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(address => {\n const newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const onLastRow = oldRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n const onLastRow = newRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n const newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1);\n const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1);\n const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1);\n const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1);\n\n const schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n const focusIn$3 = (component, gridConfig, _gridState) => {\n descendant(component.element, gridConfig.selector).each(first => {\n gridConfig.focusManager.set(component, first);\n });\n };\n const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind(elem => closest$1(elem, gridConfig.selector));\n const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind(focused => gridConfig.execute(component, simulatedEvent, focused));\n const doMove$2 = cycle => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector).bind(identified => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n const moveLeft$3 = doMove$2(cycleLeft$1);\n const moveRight$3 = doMove$2(cycleRight$1);\n const moveNorth$1 = doMove$2(cycleUp$1);\n const moveSouth$1 = doMove$2(cycleDown$1);\n const getKeydownRules$4 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$1(moveNorth$1)),\n rule(inSet(DOWN), south$1(moveSouth$1)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n const getKeyupRules$4 = constant$1([\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE), stopEventForFirefox)\n ]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$3));\n\n const f = (container, selector, current, delta, getNewIndex) => {\n const isDisabledButton = candidate => name$3(candidate) === 'button' && get$g(candidate, 'disabled') === 'disabled';\n const tryNewIndex = (initial, index, candidates) => getNewIndex(initial, index, delta, 0, candidates.length - 1, candidates[index], newIndex => isDisabledButton(candidates[newIndex]) ? tryNewIndex(initial, newIndex, candidates) : Optional.from(candidates[newIndex]));\n return locateVisible(container, current, selector).bind(identified => {\n const index = identified.index;\n const candidates = identified.candidates;\n return tryNewIndex(index, index, candidates);\n });\n };\n const horizontalWithoutCycles = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, oldCandidate, onNewIndex) => {\n const newIndex = clamp(v + d, min, max);\n return newIndex === prevIndex ? Optional.from(oldCandidate) : onNewIndex(newIndex);\n });\n const horizontal = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, _oldCandidate, onNewIndex) => {\n const newIndex = cycleBy(v, d, min, max);\n return newIndex === prevIndex ? Optional.none() : onNewIndex(newIndex);\n });\n\n const schema$t = [\n required$1('selector'),\n defaulted('getInitial', Optional.none),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('executeOnMove', false),\n defaulted('allowVertical', true),\n defaulted('allowHorizontal', true),\n defaulted('cycles', true)\n ];\n const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind(elem => closest$1(elem, flowConfig.selector));\n const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind(focused => flowConfig.execute(component, simulatedEvent, focused));\n const focusIn$2 = (component, flowConfig, _state) => {\n flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each(first => {\n flowConfig.focusManager.set(component, first);\n });\n };\n const moveLeft$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, -1);\n const moveRight$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, +1);\n const doMove$1 = movement => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n const westMovers = [...flowConfig.allowHorizontal ? LEFT : []].concat(flowConfig.allowVertical ? UP : []);\n const eastMovers = [...flowConfig.allowHorizontal ? RIGHT : []].concat(flowConfig.allowVertical ? DOWN : []);\n return [\n rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n rule(inSet(ENTER), execute$2),\n rule(inSet(SPACE), execute$2)\n ];\n };\n const getKeyupRules$3 = constant$1([\n rule(inSet(SPACE), stopEventForFirefox),\n rule(inSet(ESCAPE), doEscape)\n ]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$2));\n\n const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind(row => Optional.from(row[columnIndex]).map(cell => ({\n rowIndex,\n columnIndex,\n cell\n })));\n const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const cycleVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const moveVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1);\n const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1);\n const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1);\n const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1);\n const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1);\n const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1);\n const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1);\n const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1);\n\n const schema$s = [\n requiredObjOf('selectors', [\n required$1('row'),\n required$1('cell')\n ]),\n defaulted('cycles', true),\n defaulted('previousSelector', Optional.none),\n defaulted('execute', defaultExecute)\n ];\n const focusIn$1 = (component, matrixConfig, _state) => {\n const focused = matrixConfig.previousSelector(component).orThunk(() => {\n const selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(cell => {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind(focused => matrixConfig.execute(component, simulatedEvent, focused));\n const toMatrix = (rows, matrixConfig) => map$2(rows, row => descendants(row, matrixConfig.selectors.cell));\n const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => {\n const move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(inRow => {\n const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(colIndex => {\n const allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(allRows, inRow).bind(rowIndex => {\n const matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(next => next.cell);\n });\n });\n });\n };\n const moveLeft = doMove(cycleLeft, moveLeft$1);\n const moveRight = doMove(cycleRight, moveRight$1);\n const moveNorth = doMove(cycleUp, moveUp$1);\n const moveSouth = doMove(cycleDown, moveDown$1);\n const getKeydownRules$2 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n rule(inSet(UP), north$1(moveNorth)),\n rule(inSet(DOWN), south$1(moveSouth)),\n rule(inSet(SPACE.concat(ENTER)), execute$1)\n ]);\n const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$1));\n\n const schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind(focused => menuConfig.execute(component, simulatedEvent, focused));\n const focusIn = (component, menuConfig, _state) => {\n descendant(component.element, menuConfig.selector).each(first => {\n menuConfig.focusManager.set(component, first);\n });\n };\n const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), fireTab),\n rule(inSet(ENTER), execute),\n rule(inSet(SPACE), execute)\n ]);\n const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn));\n\n const schema$q = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted('stopSpaceKeyup', false),\n option$3('focusIn')\n ];\n const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n rule(inSet(SPACE), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), specialInfo.onEnter),\n rule(and([\n isShift$1,\n inSet(ENTER)\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), specialInfo.onShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), specialInfo.onTab),\n rule(inSet(UP), specialInfo.onUp),\n rule(inSet(DOWN), specialInfo.onDown),\n rule(inSet(LEFT), specialInfo.onLeft),\n rule(inSet(RIGHT), specialInfo.onRight),\n rule(inSet(SPACE), specialInfo.onSpace)\n ];\n const getKeyupRules = (component, simulatedEvent, specialInfo) => [\n ...specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [],\n rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, specialInfo => specialInfo.focusIn);\n\n const acyclic = AcyclicType.schema();\n const cyclic = CyclicType.schema();\n const flow = FlowType.schema();\n const flatgrid = FlatgridType.schema();\n const matrix = MatrixType.schema();\n const execution = ExecutionType.schema();\n const menu = MenuType.schema();\n const special = SpecialType.schema();\n\n var KeyboardBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n acyclic: acyclic,\n cyclic: cyclic,\n flow: flow,\n flatgrid: flatgrid,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n const isFlatgridState = keyState => hasNonNullableKey(keyState, 'setGridSize');\n const Keying = createModes({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: (keyingConfig, keyingState) => {\n const handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: (component, keyConfig, keyState) => {\n keyConfig.sendFocusIn(keyConfig).fold(() => {\n component.getSystem().triggerFocus(component.element, component.element);\n }, sendFocusIn => {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n if (!isFlatgridState(keyState)) {\n console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n const withoutReuse = (parent, data) => {\n preserve$1(() => {\n replaceChildren(parent, data, () => map$2(data, parent.getSystem().build));\n }, parent.element);\n };\n const withReuse = (parent, data) => {\n preserve$1(() => {\n virtualReplaceChildren(parent, data, () => {\n return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch);\n });\n }, parent.element);\n };\n\n const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n virtualDetach(replacee);\n const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n virtualAttach(component, child);\n component.syncComponents();\n };\n const insert = (component, insertion, childSpec) => {\n const child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n const replace = (component, replacee, replaceeIndex, childSpec) => {\n detach(replacee);\n insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec);\n };\n const set$3 = (component, replaceConfig, replaceState, data) => {\n const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n return replacer(component, data);\n };\n const append = (component, replaceConfig, replaceState, appendee) => {\n insert(component, append$2, appendee);\n };\n const prepend = (component, replaceConfig, replaceState, prependee) => {\n insert(component, prepend$1, prependee);\n };\n const remove$1 = (component, replaceConfig, replaceState, removee) => {\n const children = contents(component);\n const foundChild = find$5(children, child => eq(removee.element, child.element));\n foundChild.each(detach);\n };\n const contents = (component, _replaceConfig) => component.components();\n const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n const children = contents(component);\n return Optional.from(children[replaceeIndex]).map(replacee => {\n replacer.fold(() => detach(replacee), r => {\n const replacer = replaceConfig.reuseDom ? virtualReplace : replace;\n replacer(component, replacee, replaceeIndex, r);\n });\n return replacee;\n });\n };\n const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n const children = contents(component);\n return findIndex$1(children, replaceePred).bind(replaceeIndex => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer));\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n remove: remove$1,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$3,\n contents: contents\n });\n\n const Replacing = create$4({\n fields: [defaultedBoolean('reuseDom', true)],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n const events$c = (name, eventHandlers) => {\n const events = derive$2(eventHandlers);\n return create$4({\n fields: [required$1('enabled')],\n name,\n active: { events: constant$1(events) }\n });\n };\n const config = (name, eventHandlers) => {\n const me = events$c(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n const focus$2 = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n const blur = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n blur$1(component.element);\n }\n };\n const isFocused = component => hasFocus(component.element);\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur,\n isFocused: isFocused\n });\n\n const exhibit$4 = (base, focusConfig) => {\n const mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$8(mod);\n };\n const events$b = focusConfig => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_, simulatedEvent) => {\n simulatedEvent.event.prevent();\n })] : []));\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$b\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n const Focusing = create$4({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n const SetupBehaviourCellState = initialState => {\n const init = () => {\n const cell = Cell(initialState);\n const get = () => cell.get();\n const set = newState => cell.set(newState);\n const clear = () => cell.set(initialState);\n const readState = () => cell.get();\n return {\n get,\n set,\n clear,\n readState\n };\n };\n return { init };\n };\n\n const updateAriaState = (component, toggleConfig, toggleState) => {\n const ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n const updateClass = (component, toggleConfig, toggleState) => {\n toggleConfig.toggleClass.each(toggleClass => {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$3(component.element, toggleClass);\n }\n });\n };\n const set$2 = (component, toggleConfig, toggleState, state) => {\n const initialState = toggleState.get();\n toggleState.set(state);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n if (initialState !== state) {\n toggleConfig.onToggled(component, state);\n }\n };\n const toggle$2 = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, !toggleState.get());\n };\n const on = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, true);\n };\n const off = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, false);\n };\n const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n const onLoad = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n toggle: toggle$2,\n isOn: isOn,\n on: on,\n off: off,\n set: set$2\n });\n\n const exhibit$3 = () => nu$8({});\n const events$a = (toggleConfig, toggleState) => {\n const execute = executeEvent(toggleConfig, toggleState, toggle$2);\n const load = loadEvent(toggleConfig, toggleState, onLoad);\n return derive$2(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$a\n });\n\n const updatePressed = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n const updateSelected = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-selected', status);\n };\n const updateChecked = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-checked', status);\n };\n const updateExpanded = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option$3('toggleClass'),\n defaulted('toggleOnExecute', true),\n onHandler('onToggled'),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted('syncWithExpanded', false),\n output$1('update', updatePressed)\n ],\n checked: [output$1('update', updateChecked)],\n expanded: [output$1('update', updateExpanded)],\n selected: [output$1('update', updateSelected)],\n none: [output$1('update', noop)]\n }))\n ];\n\n const Toggling = create$4({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n const pointerEvents = () => {\n const onClick = (component, simulatedEvent) => {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run$1(click(), onClick),\n run$1(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n const events$9 = optAction => {\n const executeHandler = action => runOnExecute$1((component, simulatedEvent) => {\n action(component);\n simulatedEvent.stop();\n });\n return derive$2(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n const hoverEvent = 'alloy.item-hover';\n const focusEvent = 'alloy.item-focus';\n const toggledEvent = 'alloy.item-toggled';\n const onHover = item => {\n if (search(item.element).isNone() || Focusing.isFocused(item)) {\n if (!Focusing.isFocused(item)) {\n Focusing.focus(item);\n }\n emitWith(item, hoverEvent, { item });\n }\n };\n const onFocus$1 = item => {\n emitWith(item, focusEvent, { item });\n };\n const onToggled = (item, state) => {\n emitWith(item, toggledEvent, {\n item,\n state\n });\n };\n const hover = constant$1(hoverEvent);\n const focus$1 = constant$1(focusEvent);\n const toggled = constant$1(toggledEvent);\n\n const getItemRole = detail => detail.role.fold(() => detail.toggling.map(toggling => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox').getOr('menuitem'), identity);\n const getTogglingSpec = (tConfig, isOption) => ({\n aria: { mode: isOption ? 'selected' : 'checked' },\n ...filter$1(tConfig, (_value, name) => name !== 'exclusive'),\n onToggled: (component, state) => {\n if (isFunction(tConfig.onToggled)) {\n tConfig.onToggled(component, state);\n }\n onToggled(component, state);\n }\n });\n const builder$2 = detail => ({\n dom: detail.dom,\n domModification: {\n ...detail.domModification,\n attributes: {\n 'role': getItemRole(detail),\n ...detail.domModification.attributes,\n 'aria-haspopup': detail.hasSubmenu,\n ...detail.hasSubmenu ? { 'aria-expanded': false } : {}\n }\n },\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, tConfig => Toggling.config(getTogglingSpec(tConfig, detail.role.exists(role => role === 'option')))),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', [\n ...pointerEvents(),\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ])\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n });\n const schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option$3('toggling'),\n option$3('role'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted('ignoreFocus', false),\n defaulted('domModification', {}),\n output$1('builder', builder$2),\n defaulted('eventOrder', {})\n ];\n\n const builder$1 = detail => ({\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n });\n const schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n const owner$2 = constant$1('item-widget');\n const parts$h = constant$1([required({\n name: 'widget',\n overrides: detail => {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: _component => {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n const builder = detail => {\n const subs = substitutes(owner$2(), detail, parts$h());\n const components = components$1(owner$2(), detail, subs.internals());\n const focusWidget = component => getPart(component, detail, 'widget').map(widget => {\n Keying.focusIn(widget);\n return widget;\n });\n const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n })();\n return {\n dom: detail.dom,\n components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1((component, simulatedEvent) => {\n focusWidget(component).each(_widget => {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(focusItem(), (component, _simulatedEvent) => {\n if (detail.autofocus) {\n focusWidget(component);\n } else {\n Focusing.focus(component);\n }\n })\n ]),\n behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? component => {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: (component, simulatedEvent) => {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Optional.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }\n })\n ])\n };\n };\n const schema$n = [\n required$1('uid'),\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('autofocus', false),\n defaulted('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted('domModification', {}),\n defaultUidsSchema(parts$h()),\n output$1('builder', builder)\n ];\n\n const itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\n });\n const configureGrid = (detail, movementInfo) => ({\n mode: 'flatgrid',\n selector: '.' + detail.markers.item,\n initSize: {\n numColumns: movementInfo.initSize.numColumns,\n numRows: movementInfo.initSize.numRows\n },\n focusManager: detail.focusManager\n });\n const configureMatrix = (detail, movementInfo) => ({\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n previousSelector: movementInfo.previousSelector,\n focusManager: detail.focusManager\n });\n const configureMenu = (detail, movementInfo) => ({\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n });\n const parts$g = constant$1([group({\n factory: {\n sketch: spec => {\n const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: (detail, u) => {\n return has$2(u, 'uid') ? u : {\n ...u,\n uid: generate$5('item')\n };\n },\n overrides: (detail, u) => {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n const schema$m = constant$1([\n optionString('role'),\n required$1('value'),\n required$1('items'),\n required$1('dom'),\n required$1('components'),\n defaulted('eventOrder', {}),\n field('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output$1('config', configureGrid)\n ],\n matrix: [\n output$1('config', configureMatrix),\n required$1('rowSelector'),\n defaulted('previousSelector', Optional.none)\n ],\n menu: [\n defaulted('moveOnTab', true),\n output$1('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted('fakeFocus', false),\n defaulted('focusManager', dom$2()),\n onHandler('onHighlight'),\n onHandler('onDehighlight'),\n defaulted('showMenuRole', true)\n ]);\n\n const focus = constant$1('alloy.menu-focus');\n\n const deselectOtherRadioItems = (menu, item) => {\n const checkedRadioItems = descendants(menu.element, '[role=\"menuitemradio\"][aria-checked=\"true\"]');\n each$1(checkedRadioItems, ele => {\n if (!eq(ele, item.element)) {\n menu.getSystem().getByDom(ele).each(c => {\n Toggling.off(c);\n });\n }\n });\n };\n const make$7 = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight,\n onDehighlight: detail.onDehighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Optional.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive$2([\n run$1(focus$1(), (menu, simulatedEvent) => {\n const event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(item => {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus(), {\n menu,\n item\n });\n });\n }),\n run$1(hover(), (menu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n }),\n run$1(toggled(), (menu, simulatedEvent) => {\n const {item, state} = simulatedEvent.event;\n if (state && get$g(item.element, 'role') === 'menuitemradio') {\n deselectOtherRadioItems(menu, item);\n }\n })\n ]),\n components,\n eventOrder: detail.eventOrder,\n ...detail.showMenuRole ? { domModification: { attributes: { role: detail.role.getOr('menu') } } } : {}\n });\n\n const Menu = composite({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n const transpose$1 = obj => tupleMap(obj, (v, k) => ({\n k: v,\n v: k\n }));\n const trace = (items, byItem, byMenu, finish) => get$h(byMenu, finish).bind(triggerItem => get$h(items, triggerItem).bind(triggerMenu => {\n const rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n })).getOr([]);\n const generate$2 = (menus, expansions) => {\n const items = {};\n each(menus, (menuItems, menu) => {\n each$1(menuItems, item => {\n items[item] = menu;\n });\n });\n const byItem = expansions;\n const byMenu = transpose$1(expansions);\n const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n return map$1(items, menu => get$h(menuPaths, menu).getOr([menu]));\n };\n\n const init$b = () => {\n const expansions = Cell({});\n const menus = Cell({});\n const paths = Cell({});\n const primary = value$4();\n const directory = Cell({});\n const clear = () => {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\n };\n const isClear = () => primary.get().isNone();\n const setMenuBuilt = (menuName, built) => {\n menus.set({\n ...menus.get(),\n [menuName]: {\n type: 'prepared',\n menu: built\n }\n });\n };\n const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n primary.set(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n const sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n const getTriggeringItem = menuValue => find$4(expansions.get(), (v, _k) => v === menuValue);\n const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind(menu => getTriggeringItem(menuValue).bind(triggeringItemValue => getItemByValue(triggeringItemValue).map(triggeredItem => ({\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n }))));\n const getTriggeringPath = (itemValue, getItemByValue) => {\n const extraPath = filter$2(lookupItem(itemValue).toArray(), menuValue => getPreparedMenu(menuValue).isSome());\n return get$h(paths.get(), itemValue).bind(path => {\n const revPath = reverse(extraPath.concat(path));\n const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], data => [Optional.some(data)]));\n return sequence(triggers);\n });\n };\n const expand = itemValue => get$h(expansions.get(), itemValue).map(menu => {\n const current = get$h(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n const collapse = itemValue => get$h(paths.get(), itemValue).bind(path => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none());\n const refresh = itemValue => get$h(paths.get(), itemValue);\n const getPreparedMenu = menuValue => lookupMenu(menuValue).bind(extractPreparedMenu);\n const lookupMenu = menuValue => get$h(menus.get(), menuValue);\n const lookupItem = itemValue => get$h(expansions.get(), itemValue);\n const otherMenus = path => {\n const menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n const getPrimary = () => primary.get().bind(getPreparedMenu);\n const getMenus = () => menus.get();\n return {\n setMenuBuilt,\n setContents,\n expand,\n refresh,\n collapse,\n lookupMenu,\n lookupItem,\n otherMenus,\n getPrimary,\n getMenus,\n clear,\n isClear,\n getTriggeringPath\n };\n };\n const extractPreparedMenu = prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n const LayeredState = {\n init: init$b,\n extractPreparedMenu\n };\n\n const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight');\n const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight');\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightMenuAndItem'] = 0] = 'HighlightMenuAndItem';\n HighlightOnOpen[HighlightOnOpen['HighlightJustMenu'] = 1] = 'HighlightJustMenu';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 2] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n\n const make$6 = (detail, _rawUiSpec) => {\n const submenuParentItems = value$4();\n const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => {\n const makeSketch = () => Menu.sketch({\n ...spec,\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: (menuComp, itemComp) => {\n const highlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemHighlightedEvent, highlightData);\n },\n onDehighlight: (menuComp, itemComp) => {\n const dehighlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData);\n },\n focusManager: detail.fakeFocus ? highlights() : dom$2()\n });\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n const layeredState = LayeredState.init();\n const setup = container => {\n const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n const directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n const getItemValue = item => Representing.getValue(item).value;\n const getItemByValue = (_container, menus, itemValue) => findMap(menus, menu => {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n const candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, c => getItemValue(c) === itemValue);\n });\n const toDirectory = _container => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, item => item.type === 'separator' ? [] : [item.data.value]));\n const setActiveMenu = Highlighting.highlight;\n const setActiveMenuAndItem = (container, menu) => {\n setActiveMenu(container, menu);\n Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each(item => {\n if (detail.fakeFocus) {\n Highlighting.highlight(menu, item);\n } else {\n dispatch(container, item.element, focusItem());\n }\n });\n };\n const getMenus = (state, menuValues) => cat(map$2(menuValues, mv => state.lookupMenu(mv).bind(prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none())));\n const closeOthers = (container, state, path) => {\n const others = getMenus(state, state.otherMenus(path));\n each$1(others, o => {\n remove$2(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n const getSubmenuParents = container => submenuParentItems.get().getOrThunk(() => {\n const r = {};\n const items = descendants(container.element, `.${ detail.markers.item }`);\n const parentItems = filter$2(items, i => get$g(i, 'aria-haspopup') === 'true');\n each$1(parentItems, i => {\n container.getSystem().getByDom(i).each(itemComp => {\n const key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(r);\n return r;\n });\n const updateAriaExpansions = (container, path) => {\n const parentItems = getSubmenuParents(container);\n each(parentItems, (v, k) => {\n const expanded = contains$2(path, k);\n set$9(v.element, 'aria-expanded', expanded);\n });\n };\n const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind(latestMenuName => state.lookupMenu(latestMenuName).bind(menuPrep => {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n const activeMenu = menuPrep.menu;\n const rest = getMenus(state, path.slice(1));\n each$1(rest, r => {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$2(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenuAndItem(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n }));\n let ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n const buildIfRequired = (container, menuName, menuPrep) => {\n if (menuPrep.type === 'notbuilt') {\n const menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n const value = getItemValue(item);\n return layeredState.expand(value).bind(path => {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(menuName => layeredState.lookupMenu(menuName).bind(activeMenuPrep => {\n const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Optional.some(item);\n }\n }));\n });\n }\n };\n const collapseLeft = (container, item) => {\n const value = getItemValue(item);\n return layeredState.collapse(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(activeMenu => {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n const updateView = (container, item) => {\n const value = getItemValue(item);\n return layeredState.refresh(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n const onLeft = (container, item) => inside(item.element) ? Optional.none() : collapseLeft(container, item);\n const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container));\n const keyOnItem = f => (container, simulatedEvent) => {\n return closest$1(simulatedEvent.getSource(), `.${ detail.markers.item }`).bind(target => container.getSystem().getByDom(target).toOptional().bind(item => f(container, item).map(always)));\n };\n const events = derive$2([\n run$1(focus(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(() => {\n const menu = simulatedEvent.event.menu;\n Highlighting.highlight(tmenu, menu);\n const value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(path => closeOthers(tmenu, layeredState, path));\n });\n }),\n runOnExecute$1((component, simulatedEvent) => {\n const target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(item => {\n const itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached((container, _simulatedEvent) => {\n setup(container).each(primary => {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) {\n setActiveMenuAndItem(container, primary);\n } else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) {\n setActiveMenu(container, primary);\n }\n });\n }),\n run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => {\n detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => {\n detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n ...detail.navigateOnHover ? [run$1(hover(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n updateView(tmenu, item);\n expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(tmenu, item);\n })] : []\n ]);\n const getActiveItem = container => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n const collapseMenuApi = container => {\n getActiveItem(container).each(currentItem => {\n collapseLeft(container, currentItem);\n });\n };\n const highlightPrimary = container => {\n layeredState.getPrimary().each(primary => {\n setActiveMenuAndItem(container, primary);\n });\n };\n const extractMenuFromContainer = container => Optional.from(container.components()[0]).filter(comp => get$g(comp.element, 'role') === 'menu');\n const repositionMenus = container => {\n const maybeActivePrimary = layeredState.getPrimary().bind(primary => getActiveItem(container).bind(currentItem => {\n const itemValue = getItemValue(currentItem);\n const allMenus = values(layeredState.getMenus());\n const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, v => getItemByValue(container, preparedMenus, v));\n }).map(triggeringPath => ({\n primary,\n triggeringPath\n })));\n maybeActivePrimary.fold(() => {\n extractMenuFromContainer(container).each(primaryMenu => {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, ({primary, triggeringPath}) => {\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n const apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary,\n repositionMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.tmenuBehaviours, [\n Keying.config({\n mode: 'special',\n onRight: keyOnItem(onRight),\n onLeft: keyOnItem(onLeft),\n onEscape: keyOnItem(onEscape),\n focusIn: (container, _keyInfo) => {\n layeredState.getPrimary().each(primary => {\n dispatch(container, primary.element, focusItem());\n });\n }\n }),\n Highlighting.config({\n highlightClass: detail.markers.selectedMenu,\n itemClass: detail.markers.menu\n }),\n Composing.config({\n find: container => {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis,\n events\n };\n };\n const collapseItem$1 = constant$1('collapse-item');\n\n const tieredData = (primary, menus, expansions) => ({\n primary,\n menus,\n expansions\n });\n const singleData = (name, menu) => ({\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n });\n const collapseItem = text => ({\n value: generate$6(collapseItem$1()),\n meta: { text }\n });\n const tieredMenu = single({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlightItem'),\n onHandler('onDehighlightItem'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n required$1('dom'),\n defaulted('navigateOnHover', true),\n defaulted('stayInDom', false),\n field('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted('eventOrder', {})\n ],\n apis: {\n collapseMenu: (apis, tmenu) => {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: (apis, tmenu) => {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: (apis, tmenu) => {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$6,\n extraApis: {\n tieredData,\n singleData,\n collapseItem\n }\n });\n\n const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => {\n const lazySink = () => detail.lazySink(menuSandbox);\n const layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: () => belowOrAbove(),\n onRtl: () => belowOrAboveRtl()\n }\n } : {};\n const isFirstTierSubmenu = triggeringPaths => triggeringPaths.length === 2;\n const getSubmenuLayouts = triggeringPaths => isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightOnOpen: menuSpec.menu.highlightOnOpen,\n fakeFocus: menuSpec.menu.fakeFocus,\n onEscape: () => {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(handler => handler(menuSandbox));\n return Optional.some(true);\n },\n onExecute: () => {\n return Optional.some(true);\n },\n onOpenMenu: (tmenu, menu) => {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => {\n const sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item,\n ...getSubmenuLayouts(triggeringPaths)\n }\n });\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, st => {\n const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem,\n ...submenuLayouts\n }\n });\n });\n }\n });\n };\n const factory$o = (detail, spec) => {\n const isPartOfRelated = (sandbox, queryElem) => {\n const related = detail.getRelated(sandbox);\n return related.exists(rel => isPartOf$1(rel, queryElem));\n };\n const setContent = (sandbox, thing) => {\n Sandboxing.setContent(sandbox, thing);\n };\n const showAt = (sandbox, thing, placementSpec) => {\n const getBounds = Optional.none;\n showWithinBounds(sandbox, thing, placementSpec, getBounds);\n };\n const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => {\n const sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds()));\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds\n }));\n };\n const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => {\n const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu\n }));\n };\n const hide = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n const getContent = sandbox => Sandboxing.getState(sandbox);\n const reposition = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(state => {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n const sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n break;\n }\n });\n }\n };\n const apis = {\n setContent,\n showAt,\n showWithinBounds,\n showMenuAt,\n showMenuWithinBounds,\n hide,\n getContent,\n reposition,\n isOpen: Sandboxing.isOpen\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.inlineBehaviours, [\n Sandboxing.config({\n isPartOf: (sandbox, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: sandbox => {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: sandbox => {\n detail.onShow(sandbox);\n },\n onClose: sandbox => {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Optional.none()\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: spec.isExtraPart,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n ...detail.fireRepositionEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n doReposition: reposition\n })\n }\n })\n ]),\n eventOrder: detail.eventOrder,\n apis\n };\n };\n const InlineView = single({\n name: 'InlineView',\n configFields: [\n required$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n defaulted('getRelated', Optional.none),\n defaulted('isExtraPart', never),\n defaulted('eventOrder', Optional.none)\n ],\n factory: factory$o,\n apis: {\n showAt: (apis, component, anchor, thing) => {\n apis.showAt(component, anchor, thing);\n },\n showWithinBounds: (apis, component, anchor, thing, bounds) => {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: (apis, component, anchor, menuSpec) => {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: (apis, component) => {\n apis.hide(component);\n },\n isOpen: (apis, component) => apis.isOpen(component),\n getContent: (apis, component) => apis.getContent(component),\n setContent: (apis, component, thing) => {\n apis.setContent(component, thing);\n },\n reposition: (apis, component) => {\n apis.reposition(component);\n }\n }\n });\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var ToolbarMode$1;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode$1 || (ToolbarMode$1 = {})));\n var ToolbarLocation$1;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation$1 || (ToolbarLocation$1 = {})));\n const option$2 = name => editor => editor.options.get(name);\n const wrapOptional = fn => editor => Optional.from(fn(editor));\n const register$f = editor => {\n const isPhone = global$6.deviceType.isPhone();\n const isMobile = global$6.deviceType.isTablet() || isPhone;\n const registerOption = editor.options.register;\n const stringOrFalseProcessor = value => isString(value) || value === false;\n const stringOrNumberProcessor = value => isString(value) || isNumber(value);\n registerOption('skin', {\n processor: value => isString(value) || value === false,\n default: 'oxide'\n });\n registerOption('skin_url', { processor: 'string' });\n registerOption('height', {\n processor: stringOrNumberProcessor,\n default: Math.max(editor.getElement().offsetHeight, 400)\n });\n registerOption('width', {\n processor: stringOrNumberProcessor,\n default: global$8.DOM.getStyle(editor.getElement(), 'width')\n });\n registerOption('min_height', {\n processor: 'number',\n default: 100\n });\n registerOption('min_width', { processor: 'number' });\n registerOption('max_height', { processor: 'number' });\n registerOption('max_width', { processor: 'number' });\n registerOption('style_formats', { processor: 'object[]' });\n registerOption('style_formats_merge', {\n processor: 'boolean',\n default: false\n });\n registerOption('style_formats_autohide', {\n processor: 'boolean',\n default: false\n });\n registerOption('line_height_formats', {\n processor: 'string',\n default: '1 1.1 1.2 1.3 1.4 1.5 2'\n });\n registerOption('font_family_formats', {\n processor: 'string',\n default: 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'\n });\n registerOption('font_size_formats', {\n processor: 'string',\n default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt'\n });\n registerOption('font_size_input_default_unit', {\n processor: 'string',\n default: 'pt'\n });\n registerOption('block_formats', {\n processor: 'string',\n default: 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'\n });\n registerOption('content_langs', { processor: 'object[]' });\n registerOption('removed_menuitems', {\n processor: 'string',\n default: ''\n });\n registerOption('menubar', {\n processor: value => isString(value) || isBoolean(value),\n default: !isPhone\n });\n registerOption('menu', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar', {\n processor: value => {\n if (isBoolean(value) || isString(value) || isArray(value)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a boolean, string or array.'\n };\n }\n },\n default: true\n });\n range$2(9, num => {\n registerOption('toolbar' + (num + 1), { processor: 'string' });\n });\n registerOption('toolbar_mode', {\n processor: 'string',\n default: isMobile ? 'scrolling' : 'floating'\n });\n registerOption('toolbar_groups', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar_location', {\n processor: 'string',\n default: ToolbarLocation$1.auto\n });\n registerOption('toolbar_persist', {\n processor: 'boolean',\n default: false\n });\n registerOption('toolbar_sticky', {\n processor: 'boolean',\n default: editor.inline\n });\n registerOption('toolbar_sticky_offset', {\n processor: 'number',\n default: 0\n });\n registerOption('fixed_toolbar_container', {\n processor: 'string',\n default: ''\n });\n registerOption('fixed_toolbar_container_target', { processor: 'object' });\n registerOption('ui_mode', {\n processor: 'string',\n default: 'combined'\n });\n registerOption('file_picker_callback', { processor: 'function' });\n registerOption('file_picker_validator_handler', { processor: 'function' });\n registerOption('file_picker_types', { processor: 'string' });\n registerOption('typeahead_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('anchor_top', {\n processor: stringOrFalseProcessor,\n default: '#top'\n });\n registerOption('anchor_bottom', {\n processor: stringOrFalseProcessor,\n default: '#bottom'\n });\n registerOption('draggable_modal', {\n processor: 'boolean',\n default: false\n });\n registerOption('statusbar', {\n processor: 'boolean',\n default: true\n });\n registerOption('elementpath', {\n processor: 'boolean',\n default: true\n });\n registerOption('branding', {\n processor: 'boolean',\n default: true\n });\n registerOption('promotion', {\n processor: 'boolean',\n default: true\n });\n registerOption('resize', {\n processor: value => value === 'both' || isBoolean(value),\n default: !global$6.deviceType.isTouch()\n });\n registerOption('sidebar_show', { processor: 'string' });\n registerOption('help_accessibility', {\n processor: 'boolean',\n default: editor.hasPlugin('help')\n });\n registerOption('default_font_stack', {\n processor: 'string[]',\n default: []\n });\n };\n const isReadOnly = option$2('readonly');\n const getHeightOption = option$2('height');\n const getWidthOption = option$2('width');\n const getMinWidthOption = wrapOptional(option$2('min_width'));\n const getMinHeightOption = wrapOptional(option$2('min_height'));\n const getMaxWidthOption = wrapOptional(option$2('max_width'));\n const getMaxHeightOption = wrapOptional(option$2('max_height'));\n const getUserStyleFormats = wrapOptional(option$2('style_formats'));\n const shouldMergeStyleFormats = option$2('style_formats_merge');\n const shouldAutoHideStyleFormats = option$2('style_formats_autohide');\n const getContentLanguages = option$2('content_langs');\n const getRemovedMenuItems = option$2('removed_menuitems');\n const getToolbarMode = option$2('toolbar_mode');\n const getToolbarGroups = option$2('toolbar_groups');\n const getToolbarLocation = option$2('toolbar_location');\n const fixedContainerSelector = option$2('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target');\n const isToolbarPersist = option$2('toolbar_persist');\n const getStickyToolbarOffset = option$2('toolbar_sticky_offset');\n const getMenubar = option$2('menubar');\n const getToolbar = option$2('toolbar');\n const getFilePickerCallback = option$2('file_picker_callback');\n const getFilePickerValidatorHandler = option$2('file_picker_validator_handler');\n const getFontSizeInputDefaultUnit = option$2('font_size_input_default_unit');\n const getFilePickerTypes = option$2('file_picker_types');\n const useTypeaheadUrls = option$2('typeahead_urls');\n const getAnchorTop = option$2('anchor_top');\n const getAnchorBottom = option$2('anchor_bottom');\n const isDraggableModal$1 = option$2('draggable_modal');\n const useStatusBar = option$2('statusbar');\n const useElementPath = option$2('elementpath');\n const useBranding = option$2('branding');\n const getResize = option$2('resize');\n const getPasteAsText = option$2('paste_as_text');\n const getSidebarShow = option$2('sidebar_show');\n const promotionEnabled = option$2('promotion');\n const useHelpAccessibility = option$2('help_accessibility');\n const getDefaultFontStack = option$2('default_font_stack');\n const isSkinDisabled = editor => editor.options.get('skin') === false;\n const isMenubarEnabled = editor => editor.options.get('menubar') !== false;\n const getSkinUrl = editor => {\n const skinUrl = editor.options.get('skin_url');\n if (isSkinDisabled(editor)) {\n return skinUrl;\n } else {\n if (skinUrl) {\n return editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n const skin = editor.options.get('skin');\n return global$7.baseURL + '/skins/ui/' + skin;\n }\n }\n };\n const getSkinUrlOption = editor => Optional.from(editor.options.get('skin_url'));\n const getLineHeightFormats = editor => editor.options.get('line_height_formats').split(' ');\n const isToolbarEnabled = editor => {\n const toolbar = getToolbar(editor);\n const isToolbarString = isString(toolbar);\n const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n };\n const getMultipleToolbarsOption = editor => {\n const toolbars = range$2(9, num => editor.options.get('toolbar' + (num + 1)));\n const toolbarArray = filter$2(toolbars, isString);\n return someIf(toolbarArray.length > 0, toolbarArray);\n };\n const isMultipleToolbars = editor => getMultipleToolbarsOption(editor).fold(() => {\n const toolbar = getToolbar(editor);\n return isArrayOf(toolbar, isString) && toolbar.length > 0;\n }, always);\n const isToolbarLocationBottom = editor => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiContainer = editor => {\n const fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n };\n const isDistractionFree = editor => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n const isStickyToolbar = editor => {\n const isStickyToolbar = editor.options.get('toolbar_sticky');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n const isSplitUiMode = editor => !useFixedContainer(editor) && editor.options.get('ui_mode') === 'split';\n const getMenus = editor => {\n const menu = editor.options.get('menu');\n return map$1(menu, menu => ({\n ...menu,\n items: menu.items\n }));\n };\n\n var Options = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ToolbarMode () { return ToolbarMode$1; },\n get ToolbarLocation () { return ToolbarLocation$1; },\n register: register$f,\n getSkinUrl: getSkinUrl,\n getSkinUrlOption: getSkinUrlOption,\n isReadOnly: isReadOnly,\n isSkinDisabled: isSkinDisabled,\n getHeightOption: getHeightOption,\n getWidthOption: getWidthOption,\n getMinWidthOption: getMinWidthOption,\n getMinHeightOption: getMinHeightOption,\n getMaxWidthOption: getMaxWidthOption,\n getMaxHeightOption: getMaxHeightOption,\n getUserStyleFormats: getUserStyleFormats,\n shouldMergeStyleFormats: shouldMergeStyleFormats,\n shouldAutoHideStyleFormats: shouldAutoHideStyleFormats,\n getLineHeightFormats: getLineHeightFormats,\n getContentLanguages: getContentLanguages,\n getRemovedMenuItems: getRemovedMenuItems,\n isMenubarEnabled: isMenubarEnabled,\n isMultipleToolbars: isMultipleToolbars,\n isToolbarEnabled: isToolbarEnabled,\n isToolbarPersist: isToolbarPersist,\n getMultipleToolbarsOption: getMultipleToolbarsOption,\n getUiContainer: getUiContainer,\n useFixedContainer: useFixedContainer,\n isSplitUiMode: isSplitUiMode,\n getToolbarMode: getToolbarMode,\n isDraggableModal: isDraggableModal$1,\n isDistractionFree: isDistractionFree,\n isStickyToolbar: isStickyToolbar,\n getStickyToolbarOffset: getStickyToolbarOffset,\n getToolbarLocation: getToolbarLocation,\n isToolbarLocationBottom: isToolbarLocationBottom,\n getToolbarGroups: getToolbarGroups,\n getMenus: getMenus,\n getMenubar: getMenubar,\n getToolbar: getToolbar,\n getFilePickerCallback: getFilePickerCallback,\n getFilePickerTypes: getFilePickerTypes,\n useTypeaheadUrls: useTypeaheadUrls,\n getAnchorTop: getAnchorTop,\n getAnchorBottom: getAnchorBottom,\n getFilePickerValidatorHandler: getFilePickerValidatorHandler,\n getFontSizeInputDefaultUnit: getFontSizeInputDefaultUnit,\n useStatusBar: useStatusBar,\n useElementPath: useElementPath,\n promotionEnabled: promotionEnabled,\n useBranding: useBranding,\n getResize: getResize,\n getPasteAsText: getPasteAsText,\n getSidebarShow: getSidebarShow,\n useHelpAccessibility: useHelpAccessibility,\n getDefaultFontStack: getDefaultFontStack\n });\n\n const nonScrollingOverflows = [\n 'visible',\n 'hidden',\n 'clip'\n ];\n const isScrollingOverflowValue = value => trim$1(value).length > 0 && !contains$2(nonScrollingOverflows, value);\n const isScroller = elem => {\n if (isHTMLElement(elem)) {\n const overflowX = get$f(elem, 'overflow-x');\n const overflowY = get$f(elem, 'overflow-y');\n return isScrollingOverflowValue(overflowX) || isScrollingOverflowValue(overflowY);\n } else {\n return false;\n }\n };\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const detect = (editor, popupSinkElem) => {\n const ancestorsScrollers = ancestors(popupSinkElem, isScroller);\n const scrollers = ancestorsScrollers.length === 0 ? getShadowRoot(popupSinkElem).map(getShadowHost).map(x => ancestors(x, isScroller)).getOr([]) : ancestorsScrollers;\n return head(scrollers).map(element => ({\n element,\n others: scrollers.slice(1),\n isFullscreen: () => isFullscreen(editor)\n }));\n };\n const detectWhenSplitUiMode = (editor, popupSinkElem) => isSplitUiMode(editor) ? detect(editor, popupSinkElem) : Optional.none();\n const getBoundsFrom = sc => {\n const scrollableBoxes = [\n ...map$2(sc.others, box$1),\n win()\n ];\n return sc.isFullscreen() ? win() : constrainByMany(box$1(sc.element), scrollableBoxes);\n };\n\n const factory$n = detail => {\n const events = events$9(detail.action);\n const tag = detail.dom.tag;\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const getModAttributes = () => {\n if (tag === 'button') {\n const type = lookupAttr('type').getOr('button');\n const roleAttrs = lookupAttr('role').map(role => ({ role })).getOr({});\n return {\n type,\n ...roleAttrs\n };\n } else {\n const role = detail.role.getOr(lookupAttr('role').getOr('button'));\n return { role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events,\n behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n })\n ]),\n domModification: { attributes: getModAttributes() },\n eventOrder: detail.eventOrder\n };\n };\n const Button = single({\n name: 'Button',\n factory: factory$n,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option$3('action'),\n option$3('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n const getAttrs = elem => {\n const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, (b, attr) => {\n if (attr.name === 'class') {\n return b;\n } else {\n return {\n ...b,\n [attr.name]: attr.value\n };\n }\n }, {});\n };\n const getClasses = elem => Array.prototype.slice.call(elem.dom.classList, 0);\n const fromHtml = html => {\n const elem = SugarElement.fromHtml(html);\n const children$1 = children(elem);\n const attrs = getAttrs(elem);\n const classes = getClasses(elem);\n const contents = children$1.length === 0 ? {} : { innerHtml: get$8(elem) };\n return {\n tag: name$3(elem),\n classes,\n attributes: attrs,\n ...contents\n };\n };\n\n const record = spec => {\n const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n const get = anyInSystem => anyInSystem.getSystem().getByUid(uid).getOrDie();\n const getOpt = anyInSystem => anyInSystem.getSystem().getByUid(uid).toOptional();\n const asSpec = () => ({\n ...spec,\n uid\n });\n return {\n get,\n getOpt,\n asSpec\n };\n };\n\n const exhibit$2 = (base, tabConfig) => nu$8({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2\n });\n\n var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n const Tabstopping = create$4({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n const ExclusivityChannel = generate$6('tooltip.exclusive');\n const ShowTooltipEvent = generate$6('tooltip.show');\n const HideTooltipEvent = generate$6('tooltip.hide');\n const ImmediateHideTooltipEvent = generate$6('tooltip.immediateHide');\n const ImmediateShowTooltipEvent = generate$6('tooltip.immediateShow');\n\n const hideAllExclusive = (component, _tConfig, _tState) => {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n const setComponents = (_component, _tConfig, tState, specs) => {\n tState.getTooltip().each(tooltip => {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n const isEnabled = (_component, _tConfig, tState) => tState.isEnabled();\n const setEnabled = (_component, _tConfig, tState, enabled) => tState.setEnabled(enabled);\n const immediateOpenClose = (component, _tConfig, _tState, open) => emit(component, open ? ImmediateShowTooltipEvent : ImmediateHideTooltipEvent);\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n immediateOpenClose: immediateOpenClose,\n isEnabled: isEnabled,\n setComponents: setComponents,\n setEnabled: setEnabled\n });\n\n const events$8 = (tooltipConfig, state) => {\n const hide = comp => {\n state.getTooltip().each(p => {\n if (p.getSystem().isConnected()) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n }\n });\n state.clearTimer();\n };\n const show = comp => {\n if (!state.isShowing() && state.isEnabled()) {\n hideAllExclusive(comp);\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n const popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), _ => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), _ => {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n }\n };\n const reposition = comp => {\n state.getTooltip().each(tooltip => {\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n Positioning.position(sink, tooltip, { anchor: tooltipConfig.anchor(comp) });\n });\n };\n const getEvents = () => {\n switch (tooltipConfig.mode) {\n case 'normal':\n return [\n run$1(focusin(), comp => {\n emit(comp, ImmediateShowTooltipEvent);\n }),\n run$1(postBlur(), comp => {\n emit(comp, ImmediateHideTooltipEvent);\n }),\n run$1(mouseover(), comp => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'follow-highlight':\n return [\n run$1(highlight$1(), (comp, _se) => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'children-normal':\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n }),\n run$1(mouseover(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').each(_ => {\n state.getTooltip().fold(() => {\n emit(comp, ShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n });\n }),\n run$1(mouseout(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').fold(() => {\n emit(comp, HideTooltipEvent);\n }, noop);\n })\n ];\n default:\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n })\n ];\n }\n };\n return derive$2(flatten([\n [\n runOnInit(component => {\n tooltipConfig.onSetup(component);\n }),\n run$1(ShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, tooltipConfig.delayForShow());\n }),\n run$1(HideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, tooltipConfig.delayForHide());\n }),\n run$1(ImmediateShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, 0);\n }),\n run$1(ImmediateHideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, 0);\n }),\n run$1(receive(), (comp, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(comp => {\n hide(comp);\n })\n ],\n getEvents()\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaultedFunction('delayForShow', constant$1(300)),\n defaultedFunction('delayForHide', constant$1(300)),\n defaultedFunction('onSetup', noop),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight',\n 'children-keyboard-focus',\n 'children-normal'\n ]),\n defaulted('anchor', comp => ({\n type: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n const init$a = () => {\n const enabled = Cell(true);\n const timer = value$4();\n const popup = value$4();\n const clearTimer = () => {\n timer.on(clearTimeout);\n };\n const resetTimer = (f, delay) => {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n const readState = constant$1('not-implemented');\n return nu$7({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer,\n resetTimer,\n readState,\n isEnabled: () => enabled.get(),\n setEnabled: setToEnabled => enabled.set(setToEnabled)\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n const Tooltipping = create$4({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n /*! @license DOMPurify 3.1.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.7/LICENSE */\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create: create$1\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n\n /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n\n /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n\n /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n\n /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\n function clone(object) {\n const newObject = create$1(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text$1 = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.7';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text$1]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create$1(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text$1);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n const initValue = value;\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n const sanitizeHtmlString = html => purify().sanitize(html);\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n const rtlTransform = {\n 'indent': true,\n 'outdent': true,\n 'table-insert-column-after': true,\n 'table-insert-column-before': true,\n 'paste-column-after': true,\n 'paste-column-before': true,\n 'unordered-list': true,\n 'list-bull-circle': true,\n 'list-bull-default': true,\n 'list-bull-square': true\n };\n const defaultIconName = 'temporary-placeholder';\n const defaultIcon = icons => () => get$h(icons, defaultIconName).getOr('!not found!');\n const getIconName = (name, icons) => {\n const lcName = name.toLowerCase();\n if (global$5.isRtl()) {\n const rtlName = ensureTrailing(lcName, '-rtl');\n return has$2(icons, rtlName) ? rtlName : lcName;\n } else {\n return lcName;\n }\n };\n const lookupIcon = (name, icons) => get$h(icons, getIconName(name, icons));\n const get$3 = (name, iconProvider) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n };\n const getOr = (name, iconProvider, fallbackIcon) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n };\n const needsRtlTransform = iconName => global$5.isRtl() ? has$2(rtlTransform, iconName) : false;\n const addFocusableBehaviour = () => config('add-focusable', [runOnAttached(comp => {\n child(comp.element, 'svg').each(svg => set$9(svg, 'focusable', 'false'));\n })]);\n const renderIcon$3 = (spec, iconName, icons, fallbackIcon) => {\n var _a, _b;\n const rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n const iconHtml = get$h(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n return {\n dom: {\n tag: spec.tag,\n attributes: (_a = spec.attributes) !== null && _a !== void 0 ? _a : {},\n classes: spec.classes.concat(rtlIconClasses),\n innerHtml: iconHtml\n },\n behaviours: derive$1([\n ...(_b = spec.behaviours) !== null && _b !== void 0 ? _b : [],\n addFocusableBehaviour()\n ])\n };\n };\n const render$3 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$3(spec, iconName, iconProvider(), fallbackIcon);\n const renderFirst = (iconNames, spec, iconProvider) => {\n const icons = iconProvider();\n const iconName = find$5(iconNames, name => has$2(icons, getIconName(name, icons)));\n return renderIcon$3(spec, iconName.getOr(defaultIconName), icons, Optional.none());\n };\n\n const notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n const factory$m = detail => {\n const notificationTextId = generate$6('notification-text');\n const memBannerText = record({\n dom: fromHtml(`

${ sanitizeHtmlString(detail.backstageProvider.translate(detail.text)) }

`),\n behaviours: derive$1([Replacing.config({})])\n });\n const renderPercentBar = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n styles: { width: `${ percent }%` }\n }\n });\n const renderPercentText = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: `${ percent }%`\n }\n });\n const memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n const updateProgress = (comp, percent) => {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(progress => {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n const updateText = (comp, text) => {\n if (comp.getSystem().isConnected()) {\n const banner = memBannerText.get(comp);\n Replacing.set(banner, [text$2(text)]);\n }\n };\n const apis = {\n updateProgress,\n updateText\n };\n const iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(level => Optional.from(notificationIconMap[level])).toArray()\n ]);\n const memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: { 'aria-label': detail.backstageProvider.translate('Close') }\n },\n components: [render$3('close', {\n tag: 'span',\n classes: ['tox-icon']\n }, detail.iconProvider)],\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Tooltipping.config({ ...detail.backstageProvider.tooltips.getConfig({ tooltipText: detail.backstageProvider.translate('Close') }) })\n ]),\n action: comp => {\n detail.onAction(comp);\n }\n }));\n const notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n const notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n const components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'alert',\n 'aria-labelledby': notificationTextId\n },\n classes: detail.level.map(level => [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ level }`\n ]).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n detail.onAction(comp);\n return Optional.some(true);\n }\n })\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat([memButton.asSpec()]),\n apis\n };\n };\n const Notification = single({\n name: 'Notification',\n factory: factory$m,\n configFields: [\n option$3('level'),\n required$1('progress'),\n option$3('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('backstageProvider')\n ],\n apis: {\n updateProgress: (apis, comp, percent) => {\n apis.updateProgress(comp, percent);\n },\n updateText: (apis, comp, text) => {\n apis.updateText(comp, text);\n }\n }\n });\n\n var NotificationManagerImpl = (editor, extras, uiMothership, notificationRegion) => {\n const sharedBackstage = extras.backstage.shared;\n const getBoundsContainer = () => SugarElement.fromDom(editor.queryCommandValue('ToggleView') === '' ? editor.getContentAreaContainer() : editor.getContainer());\n const getBounds = () => {\n const contentArea = box$1(getBoundsContainer());\n return Optional.some(contentArea);\n };\n const clampComponentsToBounds = components => {\n getBounds().each(bounds => {\n each$1(components, comp => {\n remove$7(comp.element, 'width');\n if (get$d(comp.element) > bounds.width) {\n set$8(comp.element, 'width', bounds.width + 'px');\n }\n });\n });\n };\n const open = (settings, closeCallback, isEditorOrUIFocused) => {\n const close = () => {\n const removeNotificationAndReposition = region => {\n Replacing.remove(region, notification);\n reposition();\n };\n const manageRegionVisibility = (region, editorOrUiFocused) => {\n if (children(region.element).length === 0) {\n handleEmptyRegion(region, editorOrUiFocused);\n } else {\n handleRegionWithChildren(region, editorOrUiFocused);\n }\n };\n const handleEmptyRegion = (region, editorOrUIFocused) => {\n InlineView.hide(region);\n notificationRegion.clear();\n if (editorOrUIFocused) {\n editor.focus();\n }\n };\n const handleRegionWithChildren = (region, editorOrUIFocused) => {\n if (editorOrUIFocused) {\n Keying.focusIn(region);\n }\n };\n notificationRegion.on(region => {\n closeCallback();\n const editorOrUIFocused = isEditorOrUIFocused();\n removeNotificationAndReposition(region);\n manageRegionVisibility(region, editorOrUIFocused);\n });\n };\n const notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains$2([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: settings.icon,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n backstageProvider: sharedBackstage.providers\n }));\n if (!notificationRegion.isSet()) {\n const notificationWrapper = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container'],\n attributes: {\n 'aria-label': 'Notifications',\n 'role': 'region'\n }\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {},\n ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-notification, .tox-notification a, .tox-notification button'\n }),\n Replacing.config({}),\n ...isStickyToolbar(editor) && !sharedBackstage.header.isPositionedAtTop() ? [] : [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(getBoundsContainer())),\n fadeInClass: 'tox-notification-container-dock-fadein',\n fadeOutClass: 'tox-notification-container-dock-fadeout',\n transitionClass: 'tox-notification-container-dock-transition'\n },\n modes: ['top'],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })]\n ])\n }));\n const notificationSpec = premade(notification);\n const anchorOverrides = { maxHeightFunction: expandable$1() };\n const anchor = {\n ...sharedBackstage.anchors.banner(),\n overrides: anchorOverrides\n };\n notificationRegion.set(notificationWrapper);\n uiMothership.add(notificationWrapper);\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds);\n } else {\n const notificationSpec = premade(notification);\n notificationRegion.on(notificationWrapper => {\n Replacing.append(notificationWrapper, notificationSpec);\n InlineView.reposition(notificationWrapper);\n Docking.refresh(notificationWrapper);\n clampComponentsToBounds(notificationWrapper.components());\n });\n }\n if (isNumber(settings.timeout) && settings.timeout > 0) {\n global$9.setEditorTimeout(editor, () => {\n close();\n }, settings.timeout);\n }\n const reposition = () => {\n notificationRegion.on(region => {\n InlineView.reposition(region);\n Docking.refresh(region);\n clampComponentsToBounds(region.components());\n });\n };\n const thisNotification = {\n close,\n reposition,\n text: nuText => {\n Notification.updateText(notification, nuText);\n },\n settings,\n getEl: () => notification.element.dom,\n progressBar: {\n value: percent => {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n return thisNotification;\n };\n const close = notification => {\n notification.close();\n };\n const getArgs = notification => {\n return notification.settings;\n };\n return {\n open,\n close,\n getArgs\n };\n };\n\n const setup$e = (api, editor) => {\n const redirectKeyToItem = (item, e) => {\n emitWith(item, keydown(), { raw: e });\n };\n const getItem = () => api.getMenu().bind(Highlighting.getHighlighted);\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (!api.isActive()) {\n return;\n }\n if (api.isMenuOpen()) {\n if (keyCode === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (keyCode === 40) {\n getItem().fold(() => {\n api.getMenu().each(Highlighting.highlightFirst);\n }, item => {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n getItem().each(item => {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n api.cancelIfNecessary();\n }\n }\n });\n editor.on('NodeChange', () => {\n if (api.isActive() && !api.isProcessingAction() && !editor.queryCommandState('mceAutoCompleterInRange')) {\n api.cancelIfNecessary();\n }\n });\n };\n const AutocompleterEditorEvents = { setup: setup$e };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n const navClass = 'tox-menu-nav__js';\n const selectableClass = 'tox-collection__item';\n const colorClass = 'tox-swatch';\n const presetClasses = {\n normal: navClass,\n color: colorClass\n };\n const tickedClass = 'tox-collection__item--enabled';\n const groupHeadingClass = 'tox-collection__group-heading';\n const iconClass = 'tox-collection__item-icon';\n const textClass = 'tox-collection__item-label';\n const accessoryClass = 'tox-collection__item-accessory';\n const caretClass = 'tox-collection__item-caret';\n const checkmarkClass = 'tox-collection__item-checkmark';\n const activeClass = 'tox-collection__item--active';\n const containerClass = 'tox-collection__item-container';\n const containerColumnClass = 'tox-collection__item-container--column';\n const containerRowClass = 'tox-collection__item-container--row';\n const containerAlignRightClass = 'tox-collection__item-container--align-right';\n const containerAlignLeftClass = 'tox-collection__item-container--align-left';\n const containerValignTopClass = 'tox-collection__item-container--valign-top';\n const containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n const containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n const classForPreset = presets => get$h(presetClasses, presets).getOr(navClass);\n\n const forMenu = presets => {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n const classes = presets => ({\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n });\n\n const markers = presets => {\n const menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n const dom$1 = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n `tox-menu-${ columns }-column`\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n const components = [Menu.parts.items({})];\n const part = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n const d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers(presets)\n };\n };\n\n const schema$l = constant$1([\n option$3('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n const focusBehaviours = detail => derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : component => {\n const input = component.element;\n const value = get$7(input);\n input.dom.setSelectionRange(0, value.length);\n }\n })]);\n const behaviours = detail => ({\n ...focusBehaviours(detail),\n ...augment(detail.inputBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n ...detail.data.map(data => ({ initialValue: data })).getOr({}),\n getValue: input => {\n return get$7(input.element);\n },\n setValue: (input, data) => {\n const current = get$7(input.element);\n if (current !== data) {\n set$5(input.element, data);\n }\n }\n },\n onSetValue: detail.onSetValue\n })])\n });\n const dom = detail => ({\n tag: detail.tag,\n attributes: {\n type: 'text',\n ...detail.inputAttributes\n },\n styles: detail.inputStyles,\n classes: detail.inputClasses\n });\n\n const factory$l = (detail, _spec) => ({\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n });\n const Input = single({\n name: 'Input',\n configFields: schema$l(),\n factory: factory$l\n });\n\n const refetchTriggerEvent = generate$6('refetch-trigger-event');\n const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction');\n\n const menuSearcherClass = 'tox-menu__searcher';\n const findWithinSandbox = sandboxComp => {\n return descendant(sandboxComp.element, `.${ menuSearcherClass }`).bind(inputElem => sandboxComp.getSystem().getByDom(inputElem).toOptional());\n };\n const findWithinMenu = findWithinSandbox;\n const restoreState = (inputComp, searcherState) => {\n Representing.setValue(inputComp, searcherState.fetchPattern);\n inputComp.element.dom.selectionStart = searcherState.selectionStart;\n inputComp.element.dom.selectionEnd = searcherState.selectionEnd;\n };\n const saveState = inputComp => {\n const fetchPattern = Representing.getValue(inputComp);\n const selectionStart = inputComp.element.dom.selectionStart;\n const selectionEnd = inputComp.element.dom.selectionEnd;\n return {\n fetchPattern,\n selectionStart,\n selectionEnd\n };\n };\n const setActiveDescendant = (inputComp, active) => {\n getOpt(active.element, 'id').each(id => set$9(inputComp.element, 'aria-activedescendant', id));\n };\n const renderMenuSearcher = spec => {\n const handleByBrowser = (comp, se) => {\n se.cut();\n return Optional.none();\n };\n const handleByHighlightedItem = (comp, se) => {\n const eventData = {\n interactionEvent: se.event,\n eventType: se.event.raw.type\n };\n emitWith(comp, redirectMenuItemInteractionEvent, eventData);\n return Optional.some(true);\n };\n const customSearcherEventsName = 'searcher-events';\n return {\n dom: {\n tag: 'div',\n classes: [selectableClass]\n },\n components: [Input.sketch({\n inputClasses: [\n menuSearcherClass,\n 'tox-textfield'\n ],\n inputAttributes: {\n ...spec.placeholder.map(placeholder => ({ placeholder: spec.i18n(placeholder) })).getOr({}),\n 'type': 'search',\n 'aria-autocomplete': 'list'\n },\n inputBehaviours: derive$1([\n config(customSearcherEventsName, [\n run$1(input(), inputComp => {\n emit(inputComp, refetchTriggerEvent);\n }),\n run$1(keydown(), (inputComp, se) => {\n if (se.event.raw.key === 'Escape') {\n se.stop();\n }\n })\n ]),\n Keying.config({\n mode: 'special',\n onLeft: handleByBrowser,\n onRight: handleByBrowser,\n onSpace: handleByBrowser,\n onEnter: handleByHighlightedItem,\n onEscape: handleByHighlightedItem,\n onUp: handleByHighlightedItem,\n onDown: handleByHighlightedItem\n })\n ]),\n eventOrder: {\n keydown: [\n customSearcherEventsName,\n Keying.name()\n ]\n }\n })]\n };\n };\n\n const searchResultsClass = 'tox-collection--results__js';\n const augmentWithAria = item => {\n var _a;\n if (item.dom) {\n return {\n ...item,\n dom: {\n ...item.dom,\n attributes: {\n ...(_a = item.dom.attributes) !== null && _a !== void 0 ? _a : {},\n 'id': generate$6('aria-item-search-result-id'),\n 'aria-selected': 'false'\n }\n }\n };\n } else {\n return item;\n }\n };\n\n const chunk = (rowDom, numColumns) => items => {\n const chunks = chunk$1(items, numColumns);\n return map$2(chunks, c => ({\n dom: rowDom,\n components: c\n }));\n };\n const forSwatch = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts.items({\n preprocess: columns !== 'auto' ? chunk({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n });\n const forToolbar = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts.items({\n preprocess: chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n });\n const preprocessCollection = (items, isSeparator) => {\n const allSplits = [];\n let currentSplit = [];\n each$1(items, (item, i) => {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map$2(allSplits, s => ({\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n }));\n };\n const insertItemsPlaceholder = (columns, initItems, onItem) => {\n return Menu.parts.items({\n preprocess: rawItems => {\n const enrichedItems = map$2(rawItems, onItem);\n if (columns !== 'auto' && columns > 1) {\n return chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(enrichedItems);\n } else {\n return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator');\n }\n }\n });\n };\n const forCollection = (columns, initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [insertItemsPlaceholder(columns, initItems, identity)]\n });\n const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n searchResultsClass\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']),\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n };\n };\n const forCollectionWithSearchField = (columns, initItems, searchField) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [\n renderMenuSearcher({\n i18n: global$5.translate,\n placeholder: searchField.placeholder\n }),\n {\n dom: {\n tag: 'div',\n classes: [\n ...columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'],\n searchResultsClass\n ],\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n }\n ]\n };\n };\n const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({ preprocess: items => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') })]\n });\n\n const menuHasIcons = xs => exists(xs, item => 'icon' in item && item.icon !== undefined);\n const handleError = error => {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => {\n const structure = forHorizontalCollection(items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n };\n const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => {\n const getNormalStructure = () => {\n if (menuLayout.menuType !== 'searchable') {\n return forCollection(columns, items);\n } else {\n return menuLayout.searchMode.searchMode === 'search-with-field' ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) : forCollectionWithSearchResults(columns, items);\n }\n };\n if (menuLayout.menuType === 'color') {\n const structure = forSwatch(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' && columns === 'auto') {\n const structure = forCollection(columns, items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') {\n const structure = getNormalStructure();\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') {\n const structure = forToolbar(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else {\n return {\n value,\n dom: dom$1(hasIcons, columns, menuLayout.menuType),\n components: components,\n items\n };\n }\n };\n\n const type = requiredString('type');\n const name$1 = requiredString('name');\n const label = requiredString('label');\n const text = requiredString('text');\n const title = requiredString('title');\n const icon = requiredString('icon');\n const value$1 = requiredString('value');\n const fetch$1 = requiredFunction('fetch');\n const getSubmenuItems = requiredFunction('getSubmenuItems');\n const onAction = requiredFunction('onAction');\n const onItemAction = requiredFunction('onItemAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalName = optionString('name');\n const optionalText = optionString('text');\n const optionalRole = optionString('role');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const optionalShortcut = optionString('shortcut');\n const optionalSelect = optionFunction('select');\n const active = defaultedBoolean('active', false);\n const borderless = defaultedBoolean('borderless', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedMeta = defaulted('meta', {});\n const defaultedOnAction = defaultedFunction('onAction', noop);\n const defaultedType = type => defaultedString('type', type);\n const generatedName = namePrefix => field$1('name', 'name', defaultedThunk(() => generate$6(`${ namePrefix }-name`)), string);\n const generatedValue = valuePrefix => field$1('value', 'value', defaultedThunk(() => generate$6(`${ valuePrefix }-value`)), anyValue());\n\n const separatorMenuItemSchema = objOf([\n type,\n optionalText\n ]);\n const createSeparatorMenuItem = spec => asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n\n const autocompleterItemSchema = objOf([\n defaultedType('autocompleteitem'),\n active,\n enabled,\n defaultedMeta,\n value$1,\n optionalText,\n optionalIcon\n ]);\n const createSeparatorItem = spec => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n const createAutocompleterItem = spec => asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\n ];\n const toolbarButtonSchema = objOf([\n type,\n onAction,\n optionalShortcut\n ].concat(baseToolbarButtonFields));\n const createToolbarButton = spec => asRaw('toolbarbutton', toolbarButtonSchema, spec);\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n type,\n onAction,\n optionalShortcut\n ]));\n const createToggleButton = spec => asRaw('ToggleButton', toggleButtonSchema, spec);\n\n const contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n const contextFormSchema = objOf([\n defaultedType('contextform'),\n defaultedFunction('initValue', constant$1('')),\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n const createContextForm = spec => asRaw('ContextForm', contextFormSchema, spec);\n\n const contextToolbarSchema = objOf([\n defaultedType('contexttoolbar'),\n requiredString('items')\n ].concat(contextBarFields));\n const createContextToolbar = spec => asRaw('ContextToolbar', contextToolbarSchema, spec);\n\n const cardImageFields = [\n type,\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n const cardImageSchema = objOf(cardImageFields);\n\n const cardTextFields = [\n type,\n text,\n optionalName,\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n const cardTextSchema = objOf(cardTextFields);\n\n const itemSchema$1 = valueThunk(() => choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n }));\n const cardContainerSchema = objOf([\n type,\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n const commonMenuItemFields = [\n enabled,\n optionalText,\n optionalRole,\n optionalShortcut,\n generatedValue('menuitem'),\n defaultedMeta,\n defaultedString('context', 'mode:design')\n ];\n\n const cardMenuItemSchema = objOf([\n type,\n optionalLabel,\n requiredArrayOf('items', itemSchema$1),\n onSetup,\n defaultedOnAction\n ].concat(commonMenuItemFields));\n const createCardMenuItem = spec => asRaw('cardmenuitem', cardMenuItemSchema, spec);\n\n const choiceMenuItemSchema = objOf([\n type,\n active,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createChoiceMenuItem = spec => asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n\n const baseFields = [\n type,\n requiredString('fancytype'),\n defaultedOnAction\n ];\n const insertTableFields = [defaulted('initData', {})].concat(baseFields);\n const colorSwatchFields = [\n optionFunction('select'),\n defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n defaultedString('storageKey', 'default'),\n optionArrayOf('colors', anyValue())\n ])\n ].concat(baseFields);\n const fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n const createFancyMenuItem = spec => asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n\n const menuItemSchema = objOf([\n type,\n onSetup,\n defaultedOnAction,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createMenuItem = spec => asRaw('menuitem', menuItemSchema, spec);\n\n const nestedMenuItemSchema = objOf([\n type,\n getSubmenuItems,\n onSetup,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createNestedMenuItem = spec => asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n\n const toggleMenuItemSchema = objOf([\n type,\n optionalIcon,\n active,\n onSetup,\n onAction\n ].concat(commonMenuItemFields));\n const createToggleMenuItem = spec => asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n\n const detectSize = (comp, margin, selectorClass) => {\n const descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n const columnLength = findIndex$1(descendants$1, c => {\n const thisTop = c.dom.getBoundingClientRect().top;\n const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Optional.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Optional.none();\n }\n };\n\n const namedEvents = (name, handlers) => derive$1([config(name, handlers)]);\n const unnamedEvents = handlers => namedEvents(generate$6('unnamed-events'), handlers);\n const SimpleBehaviours = {\n namedEvents,\n unnamedEvents\n };\n\n const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const item = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n const button = disabled => Disabling.config({ disabled });\n const splitButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n const toolbarButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n const DisablingConfigs = {\n item,\n button,\n splitButton,\n toolbarButton\n };\n\n const runWithApi = (info, comp) => {\n const api = info.getApi(comp);\n return f => {\n f(api);\n };\n };\n const onControlAttached = (info, editorOffCell) => runOnAttached(comp => {\n const run = runWithApi(info, comp);\n run(api => {\n const onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n const onControlDetached = (getApi, editorOffCell) => runOnDetached(comp => runWithApi(getApi, comp)(editorOffCell.get()));\n\n const UiStateChannel = 'silver.uistate';\n const broadcastEvents = (uiRefs, data) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const target = outerContainer.element;\n const motherships = [\n uiRefs.mainUi.mothership,\n ...uiRefs.uiMotherships\n ];\n if (data === 'setDisabled') {\n each$1(motherships, m => {\n m.broadcastOn([dismissPopups()], { target });\n });\n }\n each$1(motherships, m => {\n m.broadcastOn([UiStateChannel], data);\n });\n };\n const setupEventsForUi = (editor, uiRefs) => {\n editor.on('init SwitchMode', e => {\n broadcastEvents(uiRefs, e.type);\n });\n editor.on('NodeChange', e => {\n if (!editor.ui.isEnabled()) {\n broadcastEvents(uiRefs, 'setDisabled');\n } else {\n broadcastEvents(uiRefs, e.type);\n }\n });\n if (isReadOnly(editor)) {\n editor.mode.set('readonly');\n }\n };\n const toggleOnReceive = getContext => Receiving.config({\n channels: {\n [UiStateChannel]: {\n onReceive: (comp, buttonStateData) => {\n if (buttonStateData === 'setDisabled' || buttonStateData === 'setEnabled') {\n Disabling.set(comp, buttonStateData === 'setDisabled');\n return;\n }\n const {\n contextType,\n shouldDisable: contextShouldDisable\n } = getContext();\n if (contextType === 'mode' && !contains$2([\n 'switchmode',\n 'init'\n ], buttonStateData)) {\n return;\n }\n Disabling.set(comp, contextShouldDisable);\n }\n }\n }\n });\n\n const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n if (comp.getSystem().isConnected()) {\n emit(comp, sandboxClose());\n }\n simulatedEvent.stop();\n }\n });\n const menuItemEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\n\n const componentRenderPipeline = cat;\n const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => {\n const editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n const buildData = source => ({\n value: source.value,\n meta: {\n text: source.text.getOr(''),\n ...source.meta\n }\n });\n\n const convertText = source => {\n const isMac = global$6.os.isMacOS() || global$6.os.isiOS();\n const mac = {\n alt: '\\u2325',\n ctrl: '\\u2303',\n shift: '\\u21E7',\n meta: '\\u2318',\n access: '\\u2303\\u2325'\n };\n const other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n const replace = isMac ? mac : other;\n const shortcut = source.split('+');\n const updated = map$2(shortcut, segment => {\n const search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return isMac ? updated.join('') : updated.join('+');\n };\n\n const renderIcon$2 = (name, icons, classes = [iconClass]) => render$3(name, {\n tag: 'div',\n classes\n }, icons);\n const renderText = text => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text$2(global$5.translate(text))]\n });\n const renderHtml = (html, classes) => ({\n dom: {\n tag: 'div',\n classes,\n innerHtml: html\n }\n });\n const renderStyledText = (style, text) => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text$2(global$5.translate(text))]\n }]\n });\n const renderShortcut = shortcut => ({\n dom: {\n tag: 'div',\n classes: [accessoryClass]\n },\n components: [text$2(convertText(shortcut))]\n });\n const renderCheckmark = icons => renderIcon$2('checkmark', icons, [checkmarkClass]);\n const renderSubmenuCaret = icons => renderIcon$2('chevron-right', icons, [caretClass]);\n const renderDownwardsCaret = icons => renderIcon$2('chevron-down', icons, [caretClass]);\n const renderContainer = (container, components) => {\n const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n const getValignClass = () => {\n switch (container.valign) {\n case 'top':\n return containerValignTopClass;\n case 'middle':\n return containerValignMiddleClass;\n case 'bottom':\n return containerValignBottomClass;\n }\n };\n return {\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n directionClass,\n alignClass,\n getValignClass()\n ]\n },\n components\n };\n };\n const renderImage = (src, classes, alt) => ({\n dom: {\n tag: 'img',\n classes,\n attributes: {\n src,\n alt: alt.getOr('')\n }\n }\n });\n\n const renderColorStructure = (item, providerBackstage, fallbackIcon) => {\n const colorPickerCommand = 'custom';\n const removeColorCommand = 'remove';\n const itemValue = item.value;\n const iconSvg = item.iconContent.map(name => getOr(name, providerBackstage.icons, fallbackIcon));\n const attributes = item.ariaLabel.map(al => ({\n 'aria-label': providerBackstage.translate(al),\n 'data-mce-name': al\n })).getOr({});\n const getDom = () => {\n const common = colorClass;\n const icon = iconSvg.getOr('');\n const baseDom = {\n tag: 'div',\n attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return {\n ...baseDom,\n tag: 'button',\n classes: [\n ...baseDom.classes,\n 'tox-swatches__picker-btn'\n ],\n innerHtml: icon\n };\n } else if (itemValue === removeColorCommand) {\n return {\n ...baseDom,\n classes: [\n ...baseDom.classes,\n 'tox-swatch--remove'\n ],\n innerHtml: icon\n };\n } else if (isNonNullable(itemValue)) {\n return {\n ...baseDom,\n attributes: {\n ...baseDom.attributes,\n 'data-mce-color': itemValue\n },\n styles: { 'background-color': itemValue },\n innerHtml: icon\n };\n } else {\n return baseDom;\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n const renderItemDomStructure = ariaLabel => {\n const domTitle = ariaLabel.map(label => ({\n attributes: {\n 'id': generate$6('menu-item'),\n 'aria-label': global$5.translate(label)\n }\n })).getOr({});\n return {\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ],\n ...domTitle\n };\n };\n const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n const iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n const renderIcon = iconName => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n const checkmark = info.checkMark;\n const textRender = Optional.from(info.meta).fold(() => renderText, meta => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText);\n const content = info.htmlContent.fold(() => info.textContent.map(textRender), html => Optional.some(renderHtml(html, [textClass])));\n const menuItem = {\n dom: renderItemDomStructure(info.ariaLabel),\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n const tooltipBehaviour = (meta, sharedBackstage, tooltipText) => get$h(meta, 'tooltipWorker').map(tooltipWorker => [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: comp => ({\n type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n }),\n mode: 'follow-highlight',\n onShow: (component, _tooltip) => {\n tooltipWorker(elm => {\n Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })]).getOrThunk(() => {\n return tooltipText.map(text => [Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({ tooltipText: text }),\n mode: 'follow-highlight'\n })]).getOr([]);\n });\n const encodeText = text => global$8.DOM.encode(text);\n const replaceText = (text, matchText) => {\n const translated = global$5.translate(text);\n const encoded = encodeText(translated);\n if (matchText.length > 0) {\n const escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, match => `${ match }`);\n } else {\n return encoded;\n }\n };\n const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n const structure = renderItemStructure({\n presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(text => replaceText(text, matchText)) : Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Optional.none(),\n checkMark: Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n const tooltipString = spec.text.filter(text => !useText && text !== '');\n return renderCommonItem({\n context: 'mode:design',\n data: buildData(spec),\n enabled: spec.enabled,\n getApi: constant$1({}),\n onAction: _api => onItemValueHandler(spec.value, spec.meta),\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec, sharedBackstage, tooltipString)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const render$2 = (items, extras) => map$2(items, item => {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render$2(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n const shouldHighlight = item.name.exists(name => contains$2(extras.cardText.highlightOn, name));\n const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => {\n Disabling.set(component, !state);\n each$1(descendants(component.element, '*'), elm => {\n component.getSystem().getByDom(elm).each(comp => {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, !state);\n }\n });\n });\n }\n });\n const structure = {\n dom: renderItemDomStructure(spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render$2(spec.items, extras)\n })]\n };\n return renderCommonItem({\n context: 'mode:design',\n data: buildData({\n text: Optional.none(),\n ...spec\n }),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets,\n textContent: useText ? spec.text : Optional.none(),\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Optional.none(),\n checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, providersBackstage, renderIcons);\n const optTooltipping = spec.text.filter(constant$1(!useText)).map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) })));\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: _api => onItemValueHandler(spec.value),\n onSetup: api => {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: [...optTooltipping.toArray()]\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active,\n exclusive: true\n }\n });\n };\n\n const parts$f = generate$3(owner$2(), parts$h());\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n const getLongForm = hex => {\n const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n return { value: hexString };\n };\n const extractValues = hex => {\n const longForm = getLongForm(hex);\n const splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const min = Math.min;\n const max = Math.max;\n const round$1 = Math.round;\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\d+|\\d+)%?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const isRgbaComponent = value => {\n const num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n const fromHsv = hsv => {\n let r;\n let g;\n let b;\n const hue = (hsv.hue || 0) % 360;\n let saturation = hsv.saturation / 100;\n let brightness = hsv.value / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$1(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n const side = hue / 60;\n const chroma = brightness * saturation;\n const x = chroma * (1 - Math.abs(side % 2 - 1));\n const match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$1(255 * (r + match));\n g = round$1(255 * (g + match));\n b = round$1(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n const fromHex = hexColour => {\n const result = extractValues(hexColour);\n const red = parseInt(result[1], 16);\n const green = parseInt(result[2], 16);\n const blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n const red = rgbaColour(255, 0, 0, 1);\n\n const fireSkinLoaded$1 = editor => {\n editor.dispatch('SkinLoaded');\n };\n const fireSkinLoadError$1 = (editor, error) => {\n editor.dispatch('SkinLoadError', error);\n };\n const fireResizeEditor = editor => {\n editor.dispatch('ResizeEditor');\n };\n const fireResizeContent = (editor, e) => {\n editor.dispatch('ResizeContent', e);\n };\n const fireScrollContent = (editor, e) => {\n editor.dispatch('ScrollContent', e);\n };\n const fireTextColorChange = (editor, data) => {\n editor.dispatch('TextColorChange', data);\n };\n const fireAfterProgressState = (editor, state) => {\n editor.dispatch('AfterProgressState', { state });\n };\n const fireResolveName = (editor, node) => editor.dispatch('ResolveName', {\n name: node.nodeName.toLowerCase(),\n target: node\n });\n const fireToggleToolbarDrawer = (editor, state) => {\n editor.dispatch('ToggleToolbarDrawer', { state });\n };\n const fireStylesTextUpdate = (editor, data) => {\n editor.dispatch('StylesTextUpdate', data);\n };\n const fireAlignTextUpdate = (editor, data) => {\n editor.dispatch('AlignTextUpdate', data);\n };\n const fireFontSizeTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeTextUpdate', data);\n };\n const fireFontSizeInputTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeInputTextUpdate', data);\n };\n const fireBlocksTextUpdate = (editor, data) => {\n editor.dispatch('BlocksTextUpdate', data);\n };\n const fireFontFamilyTextUpdate = (editor, data) => {\n editor.dispatch('FontFamilyTextUpdate', data);\n };\n const fireToggleSidebar = editor => {\n editor.dispatch('ToggleSidebar');\n };\n const fireToggleView = editor => {\n editor.dispatch('ToggleView');\n };\n\n const composeUnbinders = (f, g) => () => {\n f();\n g();\n };\n const onSetupEditableToggle = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.selection.isEditable());\n });\n const onSetupFormatToggle = (editor, name) => api => {\n const boundFormatChangeCallback = unbindable();\n const init = () => {\n api.setActive(editor.formatter.match(name));\n const binding = editor.formatter.formatChanged(name, api.setActive);\n boundFormatChangeCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n boundFormatChangeCallback.clear();\n };\n };\n const onSetupStateToggle = (editor, name) => api => {\n const unbindEditableToogle = onSetupEditableToggle(editor)(api);\n const unbindFormatToggle = onSetupFormatToggle(editor, name)(api);\n return () => {\n unbindEditableToogle();\n unbindFormatToggle();\n };\n };\n const onSetupEvent = (editor, event, f) => api => {\n const handleEvent = () => f(api);\n const init = () => {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n const onActionToggleFormat$1 = editor => rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n const cacheStorage = {};\n const ColorCache = (storageId, max = 10) => {\n const storageString = global$4.getItem(storageId);\n const localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n const prune = list => {\n const diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n const cache = prune(localstorage);\n const add = key => {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$4.setItem(storageId, JSON.stringify(cache));\n };\n const remove = idx => {\n cache.splice(idx, 1);\n };\n const state = () => cache.slice(0);\n return {\n add,\n state\n };\n };\n const getCacheForId = id => get$h(cacheStorage, id).getOrThunk(() => {\n const storageId = `tinymce-custom-colors-${ id }`;\n const currentData = global$4.getItem(storageId);\n if (isNullable(currentData)) {\n const legacyDefault = global$4.getItem('tinymce-custom-colors');\n global$4.setItem(storageId, isNonNullable(legacyDefault) ? legacyDefault : '[]');\n }\n const storage = ColorCache(storageId, 10);\n cacheStorage[id] = storage;\n return storage;\n });\n const getCurrentColors = id => map$2(getCacheForId(id).state(), color => ({\n type: 'choiceitem',\n text: color,\n icon: 'checkmark',\n value: color\n }));\n const addColor = (id, color) => {\n getCacheForId(id).add(color);\n };\n\n const hsvColour = (hue, saturation, value) => ({\n hue,\n saturation,\n value\n });\n const fromRgb = rgbaColour => {\n let h = 0;\n let s = 0;\n let v = 0;\n const r = rgbaColour.red / 255;\n const g = rgbaColour.green / 255;\n const b = rgbaColour.blue / 255;\n const minRGB = Math.min(r, Math.min(g, b));\n const maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n const d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n const hexToHsv = hex => fromRgb(fromHex(hex));\n const hsvToHex = hsv => fromRgba(fromHsv(hsv));\n const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n const canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n const canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n const r = rgba[0];\n const g = rgba[1];\n const b = rgba[2];\n const a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n\n const foregroundId = 'forecolor';\n const backgroundId = 'hilitecolor';\n const fallbackCols = 5;\n const mapColors = colorMap => {\n const colors = [];\n for (let i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: '#' + anyToHex(colorMap[i]).value,\n icon: 'checkmark',\n type: 'choiceitem'\n });\n }\n return colors;\n };\n const option$1 = name => editor => editor.options.get(name);\n const fallbackColor = '#000000';\n const register$e = editor => {\n const registerOption = editor.options.register;\n const colorProcessor = value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColors(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n };\n const colorColsProcessor = value => {\n if (isNumber(value) && value > 0) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a positive number.'\n };\n }\n };\n registerOption('color_map', {\n processor: colorProcessor,\n default: [\n '#BFEDD2',\n 'Light Green',\n '#FBEEB8',\n 'Light Yellow',\n '#F8CAC6',\n 'Light Red',\n '#ECCAFA',\n 'Light Purple',\n '#C2E0F4',\n 'Light Blue',\n '#2DC26B',\n 'Green',\n '#F1C40F',\n 'Yellow',\n '#E03E2D',\n 'Red',\n '#B96AD9',\n 'Purple',\n '#3598DB',\n 'Blue',\n '#169179',\n 'Dark Turquoise',\n '#E67E23',\n 'Orange',\n '#BA372A',\n 'Dark Red',\n '#843FA1',\n 'Dark Purple',\n '#236FA1',\n 'Dark Blue',\n '#ECF0F1',\n 'Light Gray',\n '#CED4D9',\n 'Medium Gray',\n '#95A5A6',\n 'Gray',\n '#7E8C8D',\n 'Dark Gray',\n '#34495E',\n 'Navy Blue',\n '#000000',\n 'Black',\n '#ffffff',\n 'White'\n ]\n });\n registerOption('color_map_background', { processor: colorProcessor });\n registerOption('color_map_foreground', { processor: colorProcessor });\n registerOption('color_cols', {\n processor: colorColsProcessor,\n default: calcCols(editor)\n });\n registerOption('color_cols_foreground', {\n processor: colorColsProcessor,\n default: defaultCols(editor, foregroundId)\n });\n registerOption('color_cols_background', {\n processor: colorColsProcessor,\n default: defaultCols(editor, backgroundId)\n });\n registerOption('custom_colors', {\n processor: 'boolean',\n default: true\n });\n registerOption('color_default_foreground', {\n processor: 'string',\n default: fallbackColor\n });\n registerOption('color_default_background', {\n processor: 'string',\n default: fallbackColor\n });\n };\n const getColors$2 = (editor, id) => {\n if (id === foregroundId && editor.options.isSet('color_map_foreground')) {\n return option$1('color_map_foreground')(editor);\n } else if (id === backgroundId && editor.options.isSet('color_map_background')) {\n return option$1('color_map_background')(editor);\n } else {\n return option$1('color_map')(editor);\n }\n };\n const calcCols = (editor, id = 'default') => Math.max(fallbackCols, Math.ceil(Math.sqrt(getColors$2(editor, id).length)));\n const defaultCols = (editor, id) => {\n const defaultCols = option$1('color_cols')(editor);\n const calculatedCols = calcCols(editor, id);\n if (defaultCols === calcCols(editor)) {\n return calculatedCols;\n } else {\n return defaultCols;\n }\n };\n const getColorCols$1 = (editor, id = 'default') => {\n const getCols = () => {\n if (id === foregroundId) {\n return option$1('color_cols_foreground')(editor);\n } else if (id === backgroundId) {\n return option$1('color_cols_background')(editor);\n } else {\n return option$1('color_cols')(editor);\n }\n };\n return Math.round(getCols());\n };\n const hasCustomColors$1 = option$1('custom_colors');\n const getDefaultForegroundColor = option$1('color_default_foreground');\n const getDefaultBackgroundColor = option$1('color_default_background');\n\n const defaultBackgroundColor = 'rgba(0, 0, 0, 0)';\n const isValidBackgroundColor = value => fromString(value).exists(c => c.alpha !== 0);\n const getClosestCssBackgroundColorValue = scope => {\n return closest$4(scope, node => {\n if (isElement$1(node)) {\n const color = get$f(node, 'background-color');\n return someIf(isValidBackgroundColor(color), color);\n } else {\n return Optional.none();\n }\n }).getOr(defaultBackgroundColor);\n };\n const getCurrentColor = (editor, format) => {\n const node = SugarElement.fromDom(editor.selection.getStart());\n const cssRgbValue = format === 'hilitecolor' ? getClosestCssBackgroundColorValue(node) : get$f(node, 'color');\n return fromString(cssRgbValue).map(rgba => '#' + fromRgba(rgba).value);\n };\n const applyFormat = (editor, format, value) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.apply(format, { value });\n editor.nodeChanged();\n });\n };\n const removeFormat = (editor, format) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.remove(format, { value: null }, undefined, true);\n editor.nodeChanged();\n });\n };\n const registerCommands = editor => {\n editor.addCommand('mceApplyTextcolor', (format, value) => {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', format => {\n removeFormat(editor, format);\n });\n };\n const getAdditionalColors = hasCustom => {\n const type = 'choiceitem';\n const remove = {\n type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n const custom = {\n type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n const applyColor = (editor, format, value, onChoice) => {\n if (value === 'custom') {\n const dialog = colorPickerDialog(editor);\n dialog(colorOpt => {\n colorOpt.each(color => {\n addColor(format, color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, getCurrentColor(editor, format).getOr(fallbackColor));\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n const getColors$1 = (colors, id, hasCustom) => colors.concat(getCurrentColors(id).concat(getAdditionalColors(hasCustom)));\n const getFetch$1 = (colors, id, hasCustom) => callback => {\n callback(getColors$1(colors, id, hasCustom));\n };\n const setIconColor = (splitButtonApi, name, newColor) => {\n const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n const setTooltip = (buttonApi, tooltip) => {\n buttonApi.setTooltip(tooltip);\n };\n const select$1 = (editor, format) => value => {\n const optCurrentHex = getCurrentColor(editor, format);\n return is$1(optCurrentHex, value.toUpperCase());\n };\n const getToolTipText = (editor, format, lastColor) => {\n if (isEmpty(lastColor)) {\n return format === 'forecolor' ? 'Text color' : 'Background color';\n }\n const tooltipPrefix = format === 'forecolor' ? 'Text color {0}' : 'Background color {0}';\n const colors = getColors$1(getColors$2(editor, format), format, false);\n const colorText = find$5(colors, c => c.value === lastColor).getOr({ text: '' }).text;\n return editor.translate([\n tooltipPrefix,\n editor.translate(colorText)\n ]);\n };\n const registerTextColorButton = (editor, name, format, lastColor) => {\n editor.ui.registry.addSplitButton(name, {\n tooltip: getToolTipText(editor, format, lastColor.get()),\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: select$1(editor, format),\n columns: getColorCols$1(editor, format),\n fetch: getFetch$1(getColors$2(editor, format), format, hasCustomColors$1(editor)),\n onAction: _splitButtonApi => {\n applyColor(editor, format, lastColor.get(), noop);\n },\n onItemAction: (_splitButtonApi, value) => {\n applyColor(editor, format, value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n },\n onSetup: splitButtonApi => {\n setIconColor(splitButtonApi, name, lastColor.get());\n const handler = e => {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n setTooltip(splitButtonApi, getToolTipText(editor, format, e.color));\n }\n };\n editor.on('TextColorChange', handler);\n return composeUnbinders(onSetupEditableToggle(editor)(splitButtonApi), () => {\n editor.off('TextColorChange', handler);\n });\n }\n });\n };\n const registerTextColorMenuItem = (editor, name, format, text, lastColor) => {\n editor.ui.registry.addNestedMenuItem(name, {\n text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n onSetup: api => {\n setTooltip(api, getToolTipText(editor, format, lastColor.get()));\n setIconColor(api, name, lastColor.get());\n return onSetupEditableToggle(editor)(api);\n },\n getSubmenuItems: () => [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n select: select$1(editor, format),\n initData: { storageKey: format },\n onAction: data => {\n applyColor(editor, format, data.value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n }\n }]\n });\n };\n const colorPickerDialog = editor => (callback, value) => {\n let isValid = false;\n const onSubmit = api => {\n const data = api.getData();\n const hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n const onAction = (_api, details) => {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n const initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onAction,\n onSubmit,\n onClose: noop,\n onCancel: () => {\n callback(Optional.none());\n }\n });\n };\n const register$d = editor => {\n registerCommands(editor);\n const fallbackColorForeground = getDefaultForegroundColor(editor);\n const fallbackColorBackground = getDefaultBackgroundColor(editor);\n const lastForeColor = Cell(fallbackColorForeground);\n const lastBackColor = Cell(fallbackColorBackground);\n registerTextColorButton(editor, 'forecolor', 'forecolor', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n };\n\n const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => {\n const hasIcons = menuHasIcons(items);\n const presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n const menuLayout = { menuType: presets };\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout);\n };\n const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, item => {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, d => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items))));\n } else {\n return Optional.none();\n }\n }));\n\n const deriveMenuMovement = (columns, presets) => {\n const menuMarkers = markers(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n const rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass,\n previousSelector: menu => {\n return presets === 'color' ? descendant(menu.element, '[aria-checked=true]') : Optional.none();\n }\n };\n }\n };\n const deriveCollectionMovement = (columns, presets) => {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? `.${ colorClass }` : `.${ selectableClass }`\n }\n };\n }\n };\n\n const renderColorSwatchItem = (spec, backstage) => {\n const items = getColorItems(spec, backstage);\n const columns = backstage.colorinput.getColorCols(spec.initData.storageKey);\n const presets = 'color';\n const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onAction({ value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), backstage.shared.providers);\n const widgetSpec = {\n ...menuSpec,\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets),\n showMenuRole: false\n };\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget(Menu.sketch(widgetSpec))]\n };\n };\n const getColorItems = (spec, backstage) => {\n const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(spec.initData.storageKey), spec.initData.storageKey, useCustomColors), colors => colors.concat(getAdditionalColors(useCustomColors)));\n };\n\n const cellOverEvent = generate$6('cell-over');\n const cellExecuteEvent = generate$6('cell-execute');\n const makeAnnouncementText = backstage => (row, col) => backstage.shared.providers.translate([\n '{0} columns, {1} rows',\n col,\n row\n ]);\n const makeCell = (row, col, label) => {\n const emitCellOver = c => emitWith(c, cellOverEvent, {\n row,\n col\n });\n const emitExecute = c => emitWith(c, cellExecuteEvent, {\n row,\n col\n });\n const onClick = (c, se) => {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: {\n role: 'button',\n ['aria-label']: label\n }\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run$1(mouseover(), Focusing.focus),\n run$1(execute$5(), emitExecute),\n run$1(click(), onClick),\n run$1(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n const makeCells = (getCellLabel, numRows, numCols) => {\n const cells = [];\n for (let i = 0; i < numRows; i++) {\n const row = [];\n for (let j = 0; j < numCols; j++) {\n const label = getCellLabel(i + 1, j + 1);\n row.push(makeCell(i, j, label));\n }\n cells.push(row);\n }\n return cells;\n };\n const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade));\n const makeLabelText = (row, col) => text$2(`${ col }x${ row }`);\n const renderInsertTableMenuItem = (spec, backstage) => {\n const numRows = 10;\n const numColumns = 10;\n const getCellLabel = makeAnnouncementText(backstage);\n const cells = makeCells(getCellLabel, numRows, numColumns);\n const emptyLabelText = makeLabelText(0, 0);\n const memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label']\n },\n components: [emptyLabelText],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runOnAttached(c => {\n Replacing.set(memLabel.get(c), [emptyLabelText]);\n }),\n runWithTarget(cellOverEvent, (c, t, e) => {\n const {row, col} = e.event;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n }),\n runWithTarget(cellExecuteEvent, (c, _, e) => {\n const {row, col} = e.event;\n emit(c, sandboxClose());\n spec.onAction({\n numRows: row + 1,\n numColumns: col + 1\n });\n })\n ]),\n Keying.config({\n initSize: {\n numRows,\n numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n const fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n const renderFancyMenuItem = (spec, backstage) => get$h(fancyMenuItems, spec.fancytype).map(render => render(spec, backstage));\n\n const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setIconFill: (id, value) => {\n descendant(component.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setTooltip: tooltip => {\n const translatedTooltip = providersBackstage.translate(tooltip);\n set$9(component.element, 'aria-label', translatedTooltip);\n }\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.some(caret),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.none(),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderSeparatorItem = spec => ({\n type: 'separator',\n dom: {\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n },\n components: spec.text.map(text$2).toArray()\n });\n\n const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n caret: Optional.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n },\n role: spec.role.getOrUndefined()\n });\n };\n\n const autocomplete = renderAutocompleteItem;\n const separator$3 = renderSeparatorItem;\n const normal = renderNormalItem;\n const nested = renderNestedItem;\n const toggle$1 = renderToggleMenuItem;\n const fancy = renderFancyMenuItem;\n const card = renderCardMenuItem;\n\n const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name);\n const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name);\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled,\n getExistingCoupled: getExistingCoupled\n });\n\n var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n const init$9 = () => {\n const coupled = {};\n const lookupCoupled = (coupleConfig, coupledName) => {\n const available = keys(coupleConfig.others);\n if (available.length === 0) {\n throw new Error('Cannot find any known coupled components');\n } else {\n return get$h(coupled, coupledName);\n }\n };\n const getOrCreate = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).getOrThunk(() => {\n const builder = get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n const spec = builder(component);\n const built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n };\n const getExisting = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).orThunk(() => {\n get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n return Optional.none();\n });\n };\n const readState = constant$1({});\n return nu$7({\n readState,\n getExisting,\n getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$9\n });\n\n const Coupling = create$4({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n const nu$3 = baseFn => {\n let data = Optional.none();\n let callbacks = [];\n const map = f => nu$3(nCallback => {\n get(data => {\n nCallback(f(data));\n });\n });\n const get = nCallback => {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n const set = x => {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n const isReady = () => data.isSome();\n const run = cbs => {\n each$1(cbs, call);\n };\n const call = cb => {\n data.each(x => {\n setTimeout(() => {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get,\n map,\n isReady\n };\n };\n const pure$1 = a => nu$3(callback => {\n callback(a);\n });\n const LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n const errorReporter = err => {\n setTimeout(() => {\n throw err;\n }, 0);\n };\n const make$5 = run => {\n const get = callback => {\n run().then(callback, errorReporter);\n };\n const map = fab => {\n return make$5(() => run().then(fab));\n };\n const bind = aFutureB => {\n return make$5(() => run().then(v => aFutureB(v).toPromise()));\n };\n const anonBind = futureB => {\n return make$5(() => run().then(() => futureB.toPromise()));\n };\n const toLazy = () => {\n return LazyValue.nu(get);\n };\n const toCached = () => {\n let cache = null;\n return make$5(() => {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n const toPromise = run;\n return {\n map,\n bind,\n anonBind,\n toLazy,\n toCached,\n toPromise,\n get\n };\n };\n const nu$2 = baseFn => {\n return make$5(() => new Promise(baseFn));\n };\n const pure = a => {\n return make$5(() => Promise.resolve(a));\n };\n const Future = {\n nu: nu$2,\n pure\n };\n\n const suffix = constant$1('sink');\n const partType$1 = constant$1(optional({\n name: suffix(),\n overrides: constant$1({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive$2([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n const getAnchor = (detail, component) => {\n const hotspot = detail.getHotspot(component).getOr(component);\n const type = 'hotspot';\n const overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(() => ({\n type,\n hotspot,\n overrides\n }), layouts => ({\n type,\n hotspot,\n overrides,\n layouts\n }));\n };\n const fetch = (detail, mapFetch, component) => {\n const fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => {\n const futureData = fetch(detail, mapFetch, component);\n const getLazySink = getSink(component, detail);\n return futureData.map(tdata => tdata.bind(data => {\n const primaryMenu = data.menus[data.primary];\n Optional.from(primaryMenu).each(menu => {\n detail.listRole.each(listRole => {\n menu.role = listRole;\n });\n });\n return Optional.from(tieredMenu.sketch({\n ...externals.menu(),\n uid: generate$5(''),\n data,\n highlightOnOpen,\n onOpenMenu: (tmenu, menu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: (tmenu, item, submenu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor });\n each$1(submenuTriggers, st => {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: () => {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n }));\n }));\n };\n const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n const anchor = getAnchor(detail, hotspot);\n const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(tdata => {\n tdata.fold(() => {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, data => {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n const sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n const showing = Sandboxing.isOpen(sandbox);\n const action = showing ? close : open;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n const matchWidth = (hotspot, container, useMinWidth) => {\n const menu = Composing.getCurrent(container).getOr(container);\n const buttonWidth = get$d(hotspot.element);\n if (useMinWidth) {\n set$8(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$7(menu.element, buttonWidth);\n }\n };\n const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(internalSink => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), lazySinkFn => () => lazySinkFn(anyInSystem)));\n const doRepositionMenus = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n const makeSandbox$1 = (detail, hotspot, extras) => {\n const ariaControls = manager();\n const onOpen = (component, menu) => {\n const anchor = getAnchor(detail, hotspot);\n ariaControls.link(hotspot.element);\n if (detail.matchWidth) {\n matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n }\n detail.onOpen(anchor, component, menu);\n if (extras !== undefined && extras.onOpen !== undefined) {\n extras.onOpen(component, menu);\n }\n };\n const onClose = (component, menu) => {\n ariaControls.unlink(hotspot.element);\n lazySink().getOr(menu).element.dom.dispatchEvent(new window.FocusEvent('focusout'));\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n const lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: { id: ariaControls.id }\n },\n behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: hotspot\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n },\n getAttachPoint: () => {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: sandbox => {\n return Sandboxing.getState(sandbox).bind(menu => Composing.getCurrent(menu));\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({ isExtraPart: never }),\n ...receivingChannel({ doReposition: doRepositionMenus })\n }\n })\n ])\n };\n };\n const repositionMenus = comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n const sandboxFields = () => [\n defaulted('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n\n const schema$k = constant$1([\n required$1('dom'),\n required$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n field('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n required$1('toggleClass'),\n defaulted('eventOrder', {}),\n option$3('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const parts$e = constant$1([\n external({\n schema: [\n tieredMenuMarkers(),\n defaulted('fakeFocus', false)\n ],\n name: 'menu',\n defaults: detail => {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n const factory$k = (detail, components, _spec, externals) => {\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const switchToMenu = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => {\n return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen);\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const apis = {\n expand: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n refetch: comp => {\n const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox');\n return optSandbox.fold(() => {\n return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n }, sandboxComp => {\n return open(detail, identity, comp, sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n });\n },\n isOpen: Toggling.isOn,\n close: comp => {\n if (Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n const triggerExecute = (comp, _se) => {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => Toggling.off(hotspot)\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$9(Optional.some(action)),\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n apis,\n domModification: {\n attributes: {\n 'aria-haspopup': detail.listRole.getOr('true'),\n ...detail.role.fold(() => ({}), role => ({ role })),\n ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {}\n }\n }\n };\n };\n const Dropdown = composite({\n name: 'Dropdown',\n configFields: schema$k(),\n partFields: parts$e(),\n factory: factory$k,\n apis: {\n open: (apis, comp) => apis.open(comp),\n refetch: (apis, comp) => apis.refetch(comp),\n expand: (apis, comp) => apis.expand(comp),\n close: (apis, comp) => apis.close(comp),\n isOpen: (apis, comp) => apis.isOpen(comp),\n repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n }\n });\n\n const identifyMenuLayout = searchMode => {\n switch (searchMode.searchMode) {\n case 'no-search': {\n return { menuType: 'normal' };\n }\n default: {\n return {\n menuType: 'searchable',\n searchMode\n };\n }\n }\n };\n const handleRefetchTrigger = originalSandboxComp => {\n const dropdown = Representing.getValue(originalSandboxComp);\n const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState);\n Dropdown.refetch(dropdown).get(() => {\n const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox');\n optSearcherState.each(searcherState => findWithinSandbox(newSandboxComp).each(inputComp => restoreState(inputComp, searcherState)));\n });\n };\n const handleRedirectToMenuItem = (sandboxComp, se) => {\n getActiveMenuItemFrom(sandboxComp).each(activeItem => {\n retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent);\n });\n };\n const getActiveMenuItemFrom = sandboxComp => {\n return Sandboxing.getState(sandboxComp).bind(Highlighting.getHighlighted).bind(Highlighting.getHighlighted);\n };\n const getSearchResults = activeMenuComp => {\n return has(activeMenuComp.element, searchResultsClass) ? Optional.some(activeMenuComp.element) : descendant(activeMenuComp.element, '.' + searchResultsClass);\n };\n const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => {\n findWithinMenu(tmenuComp).each(inputComp => {\n setActiveDescendant(inputComp, itemComp);\n const optActiveResults = getSearchResults(menuComp);\n optActiveResults.each(resultsElem => {\n getOpt(resultsElem, 'id').each(controlledId => set$9(inputComp.element, 'aria-controls', controlledId));\n });\n });\n set$9(itemComp.element, 'aria-selected', 'true');\n };\n const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => {\n set$9(itemComp.element, 'aria-selected', 'false');\n };\n const focusSearchField = tmenuComp => {\n findWithinMenu(tmenuComp).each(searcherComp => Focusing.focus(searcherComp));\n };\n const getSearchPattern = dropdownComp => {\n const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox');\n return optSandboxComp.bind(findWithinSandbox).map(saveState).map(state => state.fetchPattern).getOr('');\n };\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => {\n const providersBackstage = backstage.shared.providers;\n const parseForHorizontalMenu = menuitem => !isHorizontalMenu ? menuitem : {\n ...menuitem,\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, d => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, d => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu)));\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, d => Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, d => fancy(d, backstage));\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n const renderText = columns === 1;\n const renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, item => {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, d => Optional.some(card({\n ...d,\n onAction: api => {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }, itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage, Optional.none()),\n cardText: {\n matchText,\n highlightOn\n }\n })));\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, d => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n }\n }));\n };\n const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => {\n const hasIcons = menuHasIcons(items);\n const alloyItems = cat(map$2(items, item => {\n const itemHasIcon = i => isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n const createItem = i => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem({\n ...item,\n enabled: false\n });\n } else {\n return createItem(item);\n }\n }));\n const menuLayout = identifyMenuLayout(searchMode);\n const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, menuLayout);\n };\n const createTieredDataFrom = partialMenu => tieredMenu.singleData(partialMenu.value, partialMenu);\n const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => {\n const movement = deriveMenuMovement(columns, presets);\n const menuMarkers = markers(presets);\n return {\n data: createTieredDataFrom({\n ...partialMenu,\n movement,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, menuMarkers.item).each(({numColumns, numRows}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }),\n menu: {\n markers: markers(presets),\n fakeFocus: focusMode === FocusMode.ContentFocus\n }\n };\n };\n\n const rangeToSimRange = r => SimRange.create(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const register$c = (editor, sharedBackstage) => {\n const autocompleterId = generate$6('autocompleter');\n const processingAction = Cell(false);\n const activeState = Cell(false);\n const activeRange = value$4();\n const autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter'],\n attributes: { id: autocompleterId }\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [\n run$1(dismissRequested(), () => cancelIfNecessary()),\n run$1(highlight$1(), (_, se) => {\n getOpt(se.event.target, 'id').each(id => set$9(SugarElement.fromDom(editor.getBody()), 'aria-activedescendant', id));\n })\n ])]),\n lazySink: sharedBackstage.getSink\n }));\n const isMenuOpen = () => InlineView.isOpen(autocompleter);\n const isActive = activeState.get;\n const hideIfNecessary = () => {\n if (isMenuOpen()) {\n InlineView.hide(autocompleter);\n editor.dom.remove(autocompleterId, false);\n const editorBody = SugarElement.fromDom(editor.getBody());\n getOpt(editorBody, 'aria-owns').filter(ariaOwnsAttr => ariaOwnsAttr === autocompleterId).each(() => {\n remove$8(editorBody, 'aria-owns');\n remove$8(editorBody, 'aria-activedescendant');\n });\n }\n };\n const getMenu = () => InlineView.getContent(autocompleter).bind(tmenu => {\n return get$i(tmenu.components(), 0);\n });\n const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose');\n const getCombinedItems = matches => {\n const columns = findMap(matches, m => Optional.from(m.columns)).getOr(1);\n return bind$3(matches, match => {\n const choices = match.items;\n return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => {\n const autocompleterApi = {\n hide: () => cancelIfNecessary(),\n reload: fetchOptions => {\n hideIfNecessary();\n editor.execCommand('mceAutocompleterReload', false, { fetchOptions });\n }\n };\n editor.execCommand('mceAutocompleterRefreshActiveRange');\n activeRange.get().each(range => {\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n });\n };\n const display = (lookupData, items) => {\n const columns = findMap(lookupData, ld => Optional.from(ld.columns)).getOr(1);\n InlineView.showMenuAt(autocompleter, {\n anchor: {\n type: 'selection',\n getSelection: () => activeRange.get().map(rangeToSimRange),\n root: SugarElement.fromDom(editor.getBody())\n }\n }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, 'normal'));\n getMenu().each(Highlighting.highlightFirst);\n };\n const updateDisplay = lookupData => {\n const combinedItems = getCombinedItems(lookupData);\n if (combinedItems.length > 0) {\n display(lookupData, combinedItems);\n set$9(SugarElement.fromDom(editor.getBody()), 'aria-owns', autocompleterId);\n if (!editor.inline) {\n cloneAutocompleterToEditorDoc();\n }\n } else {\n hideIfNecessary();\n }\n };\n const cloneAutocompleterToEditorDoc = () => {\n if (editor.dom.get(autocompleterId)) {\n editor.dom.remove(autocompleterId, false);\n }\n const docElm = editor.getDoc().documentElement;\n const selection = editor.selection.getNode();\n const newElm = deep(autocompleter.element);\n setAll(newElm, {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n width: '1px',\n top: `${ selection.offsetTop }px`,\n left: `${ selection.offsetLeft }px`\n });\n editor.dom.add(docElm, newElm.dom);\n descendant(newElm, '[role=\"menu\"]').each(child => {\n remove$7(child, 'position');\n remove$7(child, 'max-height');\n });\n };\n editor.on('AutocompleterStart', ({lookupData}) => {\n activeState.set(true);\n processingAction.set(false);\n updateDisplay(lookupData);\n });\n editor.on('AutocompleterUpdate', ({lookupData}) => updateDisplay(lookupData));\n editor.on('AutocompleterUpdateActiveRange', ({range}) => activeRange.set(range));\n editor.on('AutocompleterEnd', () => {\n hideIfNecessary();\n activeState.set(false);\n processingAction.set(false);\n activeRange.clear();\n });\n const autocompleterUiApi = {\n cancelIfNecessary,\n isMenuOpen,\n isActive,\n isProcessingAction: processingAction.get,\n getMenu\n };\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n const Autocompleter = { register: register$c };\n\n const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n\n const DelayedFunction = (fun, delay) => {\n let ref = null;\n const schedule = (...args) => {\n ref = setTimeout(() => {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n const cancel = () => {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel,\n schedule\n };\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n const raw = event.raw;\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(raw.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const monitor = settings => {\n const startData = value$4();\n const longpressFired = Cell(false);\n const longpress$1 = DelayedFunction(event => {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n const handleTouchstart = event => {\n getTouch(event).each(touch => {\n longpress$1.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(data);\n });\n return Optional.none();\n };\n const handleTouchmove = event => {\n longpress$1.cancel();\n getTouch(event).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n const handleTouchend = event => {\n longpress$1.cancel();\n const isSame = data => eq(data.target, event.target);\n return startData.get().filter(isSame).map(_data => {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n const handlers = wrapAll([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n const fireIfReady = (event, type) => get$h(handlers, type).bind(handler => handler(event));\n return { fireIfReady };\n };\n\n const isDangerous = event => {\n const keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains$2([\n 'input',\n 'textarea'\n ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n const setup$d = (container, rawSettings) => {\n const settings = {\n stopBackspace: true,\n ...rawSettings\n };\n const pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n const tapEvent = monitor(settings);\n const simpleEvents = map$2(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'transitioncancel',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), type => bind(container, type, event => {\n tapEvent.fireIfReady(event, type).each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n }));\n const pasteTimeout = value$4();\n const onPaste = bind(container, 'paste', event => {\n tapEvent.fireIfReady(event, 'paste').each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(setTimeout(() => {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n const onKeydown = bind(container, 'keydown', event => {\n const stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace && isDangerous(event)) {\n event.prevent();\n }\n });\n const onFocusIn = bind(container, 'focusin', event => {\n const stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n const focusoutTimeout = value$4();\n const onFocusOut = bind(container, 'focusout', event => {\n const stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(() => {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n const unbind = () => {\n each$1(simpleEvents, e => {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.on(clearTimeout);\n focusoutTimeout.on(clearTimeout);\n };\n return { unbind };\n };\n\n const derive = (rawEvent, rawTarget) => {\n const source = get$h(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n const fromSource = (event, source) => {\n const stopper = Cell(false);\n const cutter = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n const cut = () => {\n cutter.set(true);\n };\n return {\n stop,\n cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event,\n setSource: source.set,\n getSource: source.get\n };\n };\n const fromExternal = event => {\n const stopper = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n return {\n stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event,\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n const adt$1 = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => {\n const handler = lookup(eventType, target);\n const simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(() => {\n logger.logEventNoHandlers(eventType, target);\n return adt$1.complete();\n }, handlerInfo => {\n const descHandler = handlerInfo.descHandler;\n const eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n } else {\n return parent(handlerInfo.element).fold(() => {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, parent => {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, parent => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), never);\n const triggerHandler = (lookup, eventType, rawEvent, target, logger) => {\n const source = derive(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n const broadcast = (listeners, rawEvent, _logger) => {\n const simulatedEvent = fromExternal(rawEvent);\n each$1(listeners, listener => {\n const descHandler = listener.descHandler;\n const handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => {\n const source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n const eventHandler = (element, descHandler) => ({\n element,\n descHandler\n });\n const broadcastHandler = (id, handler) => ({\n id,\n descHandler: handler\n });\n const EventRegistry = () => {\n const registry = {};\n const registerId = (extraArgs, id, events) => {\n each(events, (v, k) => {\n const handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n const findHandler = (handlers, elem) => read(elem).bind(id => get$h(handlers, id)).map(descHandler => eventHandler(elem, descHandler));\n const filterByType = type => get$h(registry, type).map(handlers => mapToArray(handlers, (f, id) => broadcastHandler(id, f))).getOr([]);\n const find = (isAboveRoot, type, target) => get$h(registry, type).bind(handlers => closest$4(target, elem => findHandler(handlers, elem), isAboveRoot));\n const unregisterId = id => {\n each(registry, (handlersById, _eventName) => {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId,\n unregisterId,\n filterByType,\n find\n };\n };\n\n const Registry = () => {\n const events = EventRegistry();\n const components = {};\n const readOrTag = component => {\n const elem = component.element;\n return read(elem).getOrThunk(() => write('uid-', component.element));\n };\n const failOnDuplicate = (component, tagId) => {\n const conflict = components[tagId];\n if (conflict === component) {\n unregister(component);\n } else {\n throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + '\\nCannot use it for: ' + element(component.element) + '\\n' + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM');\n }\n };\n const register = component => {\n const tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n const extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n const unregister = component => {\n read(component.element).each(tagId => {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n const filter = type => events.filterByType(type);\n const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target);\n const getById = id => get$h(components, id);\n return {\n find,\n filter,\n register,\n unregister,\n getById\n };\n };\n\n const factory$j = detail => {\n const {attributes, ...domWithoutAttributes} = detail.dom;\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n role: 'presentation',\n ...attributes\n },\n ...domWithoutAttributes\n },\n components: detail.components,\n behaviours: get$4(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n const Container = single({\n name: 'Container',\n factory: factory$j,\n configFields: [\n defaulted('components', []),\n field('containerBehaviours', []),\n defaulted('events', {}),\n defaulted('domModification', {}),\n defaulted('eventOrder', {})\n ]\n });\n\n const takeover = root => {\n const isAboveRoot = el => parent(root.element).fold(always, parent => eq(el, parent));\n const registry = Registry();\n const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n const domEvents = setup$d(root.element, {\n triggerEvent: (eventName, event) => {\n return monitorEvent(eventName, event.target, logger => triggerUntilStopped(lookup, eventName, event, logger));\n }\n });\n const systemApi = {\n debugInfo: constant$1('real'),\n triggerEvent: (eventName, target, data) => {\n monitorEvent(eventName, target, logger => triggerOnUntilStopped(lookup, eventName, data, target, logger));\n },\n triggerFocus: (target, originator) => {\n read(target).fold(() => {\n focus$3(target);\n }, _alloyId => {\n monitorEvent(focus$4(), target, logger => {\n triggerHandler(lookup, focus$4(), {\n originator,\n kill: noop,\n prevent: noop,\n target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: (comp, simulatedEvent) => {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: uid => {\n return getByUid(uid);\n },\n getByDom: elem => {\n return getByDom(elem);\n },\n build: build$1,\n buildOrPatch: buildOrPatch,\n addToGui: c => {\n add(c);\n },\n removeFromGui: c => {\n remove(c);\n },\n addToWorld: c => {\n addToWorld(c);\n },\n removeFromWorld: c => {\n removeFromWorld(c);\n },\n broadcast: message => {\n broadcast$1(message);\n },\n broadcastOn: (channels, message) => {\n broadcastOn(channels, message);\n },\n broadcastEvent: (eventName, event) => {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n const addToWorld = component => {\n component.connect(systemApi);\n if (!isText(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n const removeFromWorld = component => {\n if (!isText(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n const add = component => {\n attach(root, component);\n };\n const remove = component => {\n detach(component);\n };\n const destroy = () => {\n domEvents.unbind();\n remove$6(root.element);\n };\n const broadcastData = data => {\n const receivers = registry.filter(receive());\n each$1(receivers, receiver => {\n const descHandler = receiver.descHandler;\n const handler = getCurried(descHandler);\n handler(data);\n });\n };\n const broadcast$1 = message => {\n broadcastData({\n universal: true,\n data: message\n });\n };\n const broadcastOn = (channels, message) => {\n broadcastData({\n universal: false,\n channels,\n data: message\n });\n };\n const broadcastEvent = (eventName, event) => {\n const listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n const getByUid = uid => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n const getByDom = elem => {\n const uid = read(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root,\n element: root.element,\n destroy,\n add,\n remove,\n getByUid,\n getByDom,\n addToWorld,\n removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn,\n broadcastEvent\n };\n };\n\n const renderBar = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const schema$j = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const parts$d = constant$1([\n optional({\n schema: [required$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: spec => {\n const excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n const factory$i = (detail, components, _spec, _externals) => {\n const behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: container => {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: field => {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: (field, value) => {\n Composing.getCurrent(field).each(current => {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n const events = derive$2([runOnAttached((component, _simulatedEvent) => {\n const ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(field => {\n const id = generate$6(detail.prefix);\n ps.label().each(label => {\n set$9(label.element, 'for', id);\n set$9(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(descriptor => {\n const descriptorId = generate$6(detail.prefix);\n set$9(descriptor.element, 'id', descriptorId);\n set$9(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n const apis = {\n getField: container => getPart(container, detail, 'field'),\n getLabel: container => getPart(container, detail, 'label')\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours,\n events,\n apis\n };\n };\n const FormField = composite({\n name: 'FormField',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$i,\n apis: {\n getField: (apis, comp) => apis.getField(comp),\n getLabel: (apis, comp) => apis.getLabel(comp)\n }\n });\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n });\n const renderFormFieldDom = () => renderFormFieldDomWith([]);\n const renderFormFieldDomWith = extraClasses => ({\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n });\n const renderLabel$3 = (label, providersBackstage) => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n\n const formChangeEvent = generate$6('form-component-change');\n const formCloseEvent = generate$6('form-close');\n const formCancelEvent = generate$6('form-cancel');\n const formActionEvent = generate$6('form-action');\n const formSubmitEvent = generate$6('form-submit');\n const formBlockEvent = generate$6('form-block');\n const formUnblockEvent = generate$6('form-unblock');\n const formTabChangeEvent = generate$6('form-tabchange');\n const formResizeEvent = generate$6('form-resize');\n\n const renderCollection = (spec, providersBackstage, initialData) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const icons = providersBackstage.icons();\n const getIcon = icon => {\n var _a;\n return (_a = icons[icon]) !== null && _a !== void 0 ? _a : icon;\n };\n const runOnItem = f => (comp, se) => {\n closest$1(se.event.target, '[data-collection-item-value]').each(target => {\n f(comp, se, target, get$g(target, 'data-collection-item-value'));\n });\n };\n const setContents = (comp, items) => {\n const disabled = providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled();\n const disabledClass = disabled ? ' tox-collection__item--state-disabled' : '';\n const htmlLines = map$2(items, item => {\n const itemText = global$5.translate(item.text);\n const textContent = spec.columns === 1 ? `
${ itemText }
` : '';\n const iconContent = `
${ getIcon(item.icon) }
`;\n const mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, match => mapItemName[match]);\n return `
${ iconContent }${ textContent }
`;\n });\n const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n const html = map$2(chunks, ch => `
${ ch.join('') }
`);\n set$6(comp.element, html.join(''));\n };\n const onClick = runOnItem((comp, se, tgt, itemValue) => {\n se.stop();\n if (!(providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled())) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n const collectionEvents = [\n run$1(mouseover(), runOnItem((comp, se, tgt) => {\n focus$3(tgt, true);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem((comp, se, tgt) => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(comp => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n blur$1(currentActive);\n });\n })),\n runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n const pField = FormField.parts.field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Disabling.config({\n disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n iterCollectionItems(comp, childElm => {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$9(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: comp => {\n iterCollectionItems(comp, childElm => {\n remove$3(childElm, 'tox-collection__item--state-disabled');\n remove$8(childElm, 'aria-disabled');\n });\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({}),\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '.' + activeClass + '[data-mce-tooltip]').each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-keyboard-focus',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '.' + activeClass).orThunk(() => first$1('.tox-collection__item')),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialData.getOr([])\n },\n onSetValue: (comp, items) => {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ],\n [focusin()]: [\n 'collection-events',\n 'tooltipping'\n ]\n }\n });\n const extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n const ariaElements = [\n 'input',\n 'textarea'\n ];\n const isAriaElement = elem => {\n const name = name$3(elem);\n return contains$2(ariaElements, name);\n };\n const markValid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$3(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n const markInvalid = (component, invalidConfig, invalidState, text) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), validatorInfo => validatorInfo.validate(component));\n const run = (component, invalidConfig, invalidState) => {\n invalidConfig.notify.each(notifyInfo => {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(valid => {\n if (component.getSystem().isConnected()) {\n return valid.fold(err => {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, v => {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n const isInvalid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n return has(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run,\n isInvalid: isInvalid\n });\n\n const events$7 = (invalidConfig, invalidState) => invalidConfig.validator.map(validatorInfo => derive$2([run$1(validatorInfo.onEvent, component => {\n run(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(component => {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []))).getOr({});\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7\n });\n\n var InvalidateSchema = [\n required$1('invalidClass'),\n defaulted('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted('aria', 'alert'),\n defaulted('getContainer', Optional.none),\n defaulted('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n required$1('validate'),\n defaulted('onEvent', 'input'),\n defaulted('validateOnLoad', true)\n ])\n ];\n\n const Invalidating = create$4({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: validator => {\n return component => {\n const v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n const exhibit$1 = () => nu$8({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n const events$6 = () => derive$2([abort(selectstart(), always)]);\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6,\n exhibit: exhibit$1\n });\n\n const Unselecting = create$4({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n parts: { menu: part(false, 1, spec.presets) }\n });\n\n const colorInputChangeEvent = generate$6('color-input-change');\n const colorSwatchChangeEvent = generate$6('color-swatch-change');\n const colorPickerCancelEvent = generate$6('color-picker-cancel');\n const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n data: initialData,\n onSetValue: c => Invalidating.run(c).get(noop),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: comp => parentElement(comp.element),\n notify: {\n onValid: comp => {\n const val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: input => {\n const inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n const span = SugarElement.fromTag('span');\n set$8(span, 'background-color', inputValue);\n const res = getRaw(span, 'background-color').fold(() => Result.error('blah'), _ => Result.value(inputValue));\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, sharedBackstage.providers));\n const emitSwatchChange = (colorBit, value) => {\n emitWith(colorBit, colorSwatchChangeEvent, { value });\n };\n const onItemAction = (comp, value) => {\n memColorButton.getOpt(comp).each(colorBit => {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(valueOpt => {\n valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), value => {\n emitSwatchChange(colorBit, value);\n addColor(spec.storageKey, value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n const memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: () => [\n southwest$2,\n southeast$2,\n south$2\n ],\n onLtr: () => [\n southeast$2,\n southwest$2,\n south$2\n ]\n },\n components: [],\n fetch: getFetch$1(colorInputBackstage.getColors(spec.storageKey), spec.storageKey, colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(spec.storageKey),\n presets: 'color',\n onItemAction,\n context: spec.context\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run$1(colorInputChangeEvent, (comp, se) => {\n memColorButton.getOpt(comp).each(colorButton => {\n set$8(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(colorSwatchChangeEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run$1(colorPickerCancelEvent, (comp, _se) => {\n FormField.getField(comp).each(_field => {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n const labelPart = optional({\n schema: [required$1('dom')],\n name: 'label'\n });\n const edgePart = name => optional({\n name: '' + name + '-edge',\n overrides: detail => {\n const action = detail.model.manager.edgeActions[name];\n return action.fold(() => ({}), a => ({\n events: derive$2([\n runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousemove(), (comp, se, det) => {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n }));\n }\n });\n const tlEdgePart = edgePart('top-left');\n const tedgePart = edgePart('top');\n const trEdgePart = edgePart('top-right');\n const redgePart = edgePart('right');\n const brEdgePart = edgePart('bottom-right');\n const bedgePart = edgePart('bottom');\n const blEdgePart = edgePart('bottom-left');\n const ledgePart = edgePart('left');\n const thumbPart = required({\n name: 'thumb',\n defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: detail => {\n return {\n events: derive$2([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n const isShift = event => isShift$1(event.event);\n const spectrumPart = required({\n schema: [customField('mouseIsDown', () => Cell(false))],\n name: 'spectrum',\n overrides: detail => {\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map(value => model.setValueFrom(component, detail, value));\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: (spectrum, event) => model.onLeft(spectrum, detail, isShift(event)),\n onRight: (spectrum, event) => model.onRight(spectrum, detail, isShift(event)),\n onUp: (spectrum, event) => model.onUp(spectrum, detail, isShift(event)),\n onDown: (spectrum, event) => model.onDown(spectrum, detail, isShift(event))\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]),\n events: derive$2([\n run$1(touchstart(), setValueFrom),\n run$1(touchmove(), setValueFrom),\n run$1(mousedown(), setValueFrom),\n run$1(mousemove(), (spectrum, se) => {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n const _sliderChangeEvent = 'slider.change.value';\n const sliderChangeEvent = constant$1(_sliderChangeEvent);\n const isTouchEvent$2 = evt => evt.type.indexOf('touch') !== -1;\n const getEventSource = simulatedEvent => {\n const evt = simulatedEvent.event.raw;\n if (isTouchEvent$2(evt)) {\n const touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(t => SugarPosition(t.clientX, t.clientY)) : Optional.none();\n } else {\n const mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(me => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n }\n };\n\n const t = 'top', r = 'right', b = 'bottom', l = 'left';\n const minX = detail => detail.model.minX;\n const minY = detail => detail.model.minY;\n const min1X = detail => detail.model.minX - 1;\n const min1Y = detail => detail.model.minY - 1;\n const maxX = detail => detail.model.maxX;\n const maxY = detail => detail.model.maxY;\n const max1X = detail => detail.model.maxX + 1;\n const max1Y = detail => detail.model.maxY + 1;\n const range = (detail, max, min) => max(detail) - min(detail);\n const xRange = detail => range(detail, maxX, minX);\n const yRange = detail => range(detail, maxY, minY);\n const halfX = detail => xRange(detail) / 2;\n const halfY = detail => yRange(detail) / 2;\n const step = (detail, useMultiplier) => useMultiplier ? detail.stepSize * detail.speedMultiplier : detail.stepSize;\n const snap = detail => detail.snapToGrid;\n const snapStart = detail => detail.snapStart;\n const rounded = detail => detail.rounded;\n const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined;\n const hasLEdge = detail => hasEdge(detail, l);\n const hasREdge = detail => hasEdge(detail, r);\n const hasTEdge = detail => hasEdge(detail, t);\n const hasBEdge = detail => hasEdge(detail, b);\n const currentValue = detail => detail.model.value.get();\n\n const xyValue = (x, y) => ({\n x,\n y\n });\n const fireSliderChange$3 = (component, value) => {\n emitWith(component, sliderChangeEvent(), { value });\n };\n const setToTLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n const setToTEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1Y(detail));\n };\n const setToTEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n const setToTREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n const setToREdge = (edge, detail) => {\n fireSliderChange$3(edge, max1X(detail));\n };\n const setToREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n const setToBREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n const setToBEdge = (edge, detail) => {\n fireSliderChange$3(edge, max1Y(detail));\n };\n const setToBEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n const setToBLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n const setToLEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1X(detail));\n };\n const setToLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n const reduceBy = (value, min, max, step) => {\n if (value < min) {\n return value;\n } else if (value > max) {\n return max;\n } else if (value === min) {\n return min - 1;\n } else {\n return Math.max(min, value - step);\n }\n };\n const increaseBy = (value, min, max, step) => {\n if (value > max) {\n return value;\n } else if (value < min) {\n return min;\n } else if (value === max) {\n return max + 1;\n } else {\n return Math.min(max, value + step);\n }\n };\n const capValue = (value, min, max) => Math.max(min, Math.min(max, value));\n const snapValueOf = (value, min, max, step, snapStart) => snapStart.fold(() => {\n const initValue = value - min;\n const extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, start => {\n const remainder = (value - start) % step;\n const adjustment = Math.round(remainder / step);\n const rawSteps = Math.floor((value - start) / step);\n const maxSteps = Math.floor((max - start) / step);\n const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n const r = start + numSteps * step;\n return Math.max(start, r);\n });\n const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min;\n const findValueOf = args => {\n const {min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange} = args;\n const capMin = hasMinEdge ? min - 1 : min;\n const capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n const offset = findOffsetOf(value, minBound, maxBound);\n const newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n if (snap && newValue >= min && newValue <= max) {\n return snapValueOf(newValue, min, max, step, snapStart);\n } else if (rounded) {\n return Math.round(newValue);\n } else {\n return newValue;\n }\n }\n };\n const findOffsetOfValue$2 = args => {\n const {min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge} = args;\n if (value < min) {\n return hasMinEdge ? 0 : centerMinEdge;\n } else if (value > max) {\n return hasMaxEdge ? maxBound : centerMaxEdge;\n } else {\n return (value - min) / range * maxOffset;\n }\n };\n\n const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n const getBounds = component => component.element.dom.getBoundingClientRect();\n const getBoundsProperty = (bounds, property) => bounds[property];\n const getMinXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, left);\n };\n const getMaxXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n const getMinYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n const getMaxYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n const getXScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n const getYScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, height);\n };\n const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n const getXCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, left);\n const componentMaxEdge = getBoundsProperty(componentBounds, right);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n const getYCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, top);\n const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n const fireSliderChange$2 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset$1 = (spectrum, detail, left) => {\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: left,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n maxBound: getMaxXBounds(spectrum),\n screenRange: getXScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$2 = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value);\n const sliderVal = xValue;\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n const setToMin$2 = (spectrum, detail) => {\n const min = minX(detail);\n fireSliderChange$2(spectrum, min);\n };\n const setToMax$2 = (spectrum, detail) => {\n const max = maxX(detail);\n fireSliderChange$2(spectrum, max);\n };\n const moveBy$2 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail, useMultiplier));\n fireSliderChange$2(spectrum, xValue);\n return Optional.some(xValue);\n };\n const handleMovement$2 = direction => (spectrum, detail, useMultiplier) => moveBy$2(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$2 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => p.left);\n };\n const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getXScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const thumbRadius = get$d(thumb.element) / 2;\n set$8(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n const onLeft$2 = handleMovement$2(-1);\n const onRight$2 = handleMovement$2(1);\n const onUp$2 = Optional.none;\n const onDown$2 = Optional.none;\n const edgeActions$2 = {\n 'top-left': Optional.none(),\n 'top': Optional.none(),\n 'top-right': Optional.none(),\n 'right': Optional.some(setToREdge),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.none(),\n 'bottom-left': Optional.none(),\n 'left': Optional.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$2,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n const fireSliderChange$1 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset = (spectrum, detail, top) => {\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: top,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n maxBound: getMaxYBounds(spectrum),\n screenRange: getYScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$1 = (spectrum, detail, value) => {\n const yValue = findValueOfOffset(spectrum, detail, value);\n const sliderVal = yValue;\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n const setToMin$1 = (spectrum, detail) => {\n const min = minY(detail);\n fireSliderChange$1(spectrum, min);\n };\n const setToMax$1 = (spectrum, detail) => {\n const max = maxY(detail);\n fireSliderChange$1(spectrum, max);\n };\n const moveBy$1 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange$1(spectrum, yValue);\n return Optional.some(yValue);\n };\n const handleMovement$1 = direction => (spectrum, detail, useMultiplier) => moveBy$1(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$1 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => {\n return p.top;\n });\n };\n const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getYScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n const onLeft$1 = Optional.none;\n const onRight$1 = Optional.none;\n const onUp$1 = handleMovement$1(-1);\n const onDown$1 = handleMovement$1(1);\n const edgeActions$1 = {\n 'top-left': Optional.none(),\n 'top': Optional.some(setToTEdge),\n 'top-right': Optional.none(),\n 'right': Optional.none(),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.some(setToBEdge),\n 'bottom-left': Optional.none(),\n 'left': Optional.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n const fireSliderChange = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const sliderValue = (x, y) => ({\n x,\n y\n });\n const setValueFrom = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value.left);\n const yValue = findValueOfOffset(spectrum, detail, value.top);\n const val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n const moveBy = (direction, isVerticalMovement, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail, useMultiplier));\n const yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n const handleMovement = (direction, isVerticalMovement) => (spectrum, detail, useMultiplier) => moveBy(direction, isVerticalMovement, spectrum, detail, useMultiplier).map(always);\n const setToMin = (spectrum, detail) => {\n const mX = minX(detail);\n const mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const setToMax = (spectrum, detail) => {\n const mX = maxX(detail);\n const mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const getValueFromEvent = simulatedEvent => getEventSource(simulatedEvent);\n const setPositionFromValue = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbXRadius = get$d(thumb.element) / 2;\n const thumbYRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$8(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n const onLeft = handleMovement(-1, false);\n const onRight = handleMovement(1, false);\n const onUp = handleMovement(-1, true);\n const onDown = handleMovement(1, true);\n const edgeActions = {\n 'top-left': Optional.some(setToTLEdgeXY),\n 'top': Optional.some(setToTEdgeXY),\n 'top-right': Optional.some(setToTREdgeXY),\n 'right': Optional.some(setToREdgeXY),\n 'bottom-right': Optional.some(setToBREdgeXY),\n 'bottom': Optional.some(setToBEdgeXY),\n 'bottom-left': Optional.some(setToBLEdgeXY),\n 'left': Optional.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n getValueFromEvent: getValueFromEvent,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n const SliderSchema = [\n defaulted('stepSize', 1),\n defaulted('speedMultiplier', 10),\n defaulted('onChange', noop),\n defaulted('onChoose', noop),\n defaulted('onInit', noop),\n defaulted('onDragStart', noop),\n defaulted('onDragEnd', noop),\n defaulted('snapToGrid', false),\n defaulted('rounded', true),\n option$3('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', spec => Cell(spec.mode.minX)),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell(spec.mode.minY)),\n required$1('getInitialValue'),\n output$1('manager', VerticalModel)\n ],\n xy: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n })),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', () => Cell(false))\n ];\n\n const sketch$2 = (detail, components, _spec, _externals) => {\n const getThumb = component => getPartOrDie(component, detail, 'thumb');\n const getSpectrum = component => getPartOrDie(component, detail, 'spectrum');\n const getLeftEdge = component => getPart(component, detail, 'left-edge');\n const getRightEdge = component => getPart(component, detail, 'right-edge');\n const getTopEdge = component => getPart(component, detail, 'top-edge');\n const getBottomEdge = component => getPart(component, detail, 'bottom-edge');\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const refresh = (slider, thumb) => {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge,\n getRightEdge,\n getTopEdge,\n getBottomEdge,\n getSpectrum\n });\n };\n const setValue = (slider, newValue) => {\n modelDetail.value.set(newValue);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n const changeValue = (slider, newValue) => {\n setValue(slider, newValue);\n const thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n const resetToMin = slider => {\n model.setToMin(slider, detail);\n };\n const resetToMax = slider => {\n model.setToMax(slider, detail);\n };\n const choose = slider => {\n const fireOnChoose = () => {\n getPart(slider, detail, 'thumb').each(thumb => {\n const value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n const wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n const onDragStart = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n const onDragEnd = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n const focusWidget = component => {\n getPart(component, detail, 'spectrum').map(Keying.focusIn);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: focusWidget\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: _ => {\n return modelDetail.value.get();\n },\n setValue\n }\n }),\n Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose } } })\n ]),\n events: derive$2([\n run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached((slider, _simulatedEvent) => {\n const getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n const spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run$1(touchstart(), onDragStart),\n run$1(touchend(), onDragEnd),\n run$1(mousedown(), (component, event) => {\n focusWidget(component);\n onDragStart(component, event);\n }),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin,\n resetToMax,\n setValue,\n refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n const Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: (apis, slider, value) => {\n apis.setValue(slider, value);\n },\n resetToMin: (apis, slider) => {\n apis.resetToMin(slider);\n },\n resetToMax: (apis, slider) => {\n apis.resetToMax(slider);\n },\n refresh: (apis, slider) => {\n apis.refresh(slider);\n }\n }\n });\n\n const fieldsUpdate = generate$6('rgb-hex-update');\n const sliderUpdate = generate$6('slider-update');\n const paletteUpdate = generate$6('palette-update');\n\n const sliderFactory = (translate, getClass) => {\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: {\n 'role': 'slider',\n 'aria-valuemin': 0,\n 'aria-valuemax': 360,\n 'aria-valuenow': 120\n }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1(0)\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: (slider, _thumb, value) => {\n set$9(slider.element, 'aria-valuenow', Math.floor(360 - value * 3.6));\n emitWith(slider, sliderUpdate, { value });\n }\n });\n };\n\n const owner$1 = 'form';\n const schema$i = [field('formBehaviours', [Representing])];\n const getPartName$1 = name => '';\n const sketch$1 = fSpec => {\n const parts = (() => {\n const record = [];\n const field = (name, config) => {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field,\n record: constant$1(record)\n };\n })();\n const spec = fSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName$1(n)\n }));\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n const toResult = (o, e) => o.fold(() => Result.error(e), Result.value);\n const make$4 = (detail, components) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: form => {\n const resPs = getAllParts(form, detail);\n return map$1(resPs, (resPThunk, pName) => resPThunk().bind(v => {\n const opt = Composing.getCurrent(v);\n return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${ pName }': ` + element(v.element)));\n }).map(Representing.getValue));\n },\n setValue: (form, values) => {\n each(values, (newValue, key) => {\n getPart(form, detail, key).each(wrapper => {\n Composing.getCurrent(wrapper).each(field => {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: (form, key) => {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n });\n const Form = {\n getField: makeApi((apis, component, key) => apis.getField(component, key)),\n sketch: sketch$1\n };\n\n const validInput = generate$6('valid-input');\n const invalidInput = generate$6('invalid-input');\n const validatingInput = generate$6('validating-input');\n const translatePrefix = 'colorcustom.rgb.';\n const uninitiatedTooltipApi = {\n isEnabled: always,\n setEnabled: noop,\n immediatelyShow: noop,\n immediatelyHide: noop\n };\n const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx, tooltipGetConfig, makeIcon) => {\n const setTooltipEnabled = (enabled, tooltipApi) => {\n const api = tooltipApi.get();\n if (enabled === api.isEnabled()) {\n return;\n }\n api.setEnabled(enabled);\n if (enabled) {\n api.immediatelyShow();\n } else {\n api.immediatelyHide();\n }\n };\n const invalidation = (label, isValid, tooltipApi) => Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: comp => {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: comp => {\n setTooltipEnabled(false, tooltipApi);\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: comp => {\n setTooltipEnabled(true, tooltipApi);\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: comp => {\n const value = Representing.getValue(comp);\n const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n const renderTextField = (isValid, name, label, description, data) => {\n const tooltipApi = Cell(uninitiatedTooltipApi);\n const helptext = translate(translatePrefix + 'range');\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'label',\n attributes: { 'aria-label': description }\n },\n components: [text$2(label)]\n });\n const pField = FormField.parts.field({\n data,\n factory: Input,\n inputAttributes: {\n type: 'text',\n ...name === 'hex' ? { 'aria-live': 'polite' } : {}\n },\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid, tooltipApi),\n Tabstopping.config({}),\n Tooltipping.config({\n ...tooltipGetConfig({\n tooltipText: '',\n onSetup: comp => {\n tooltipApi.set({\n isEnabled: () => {\n return Tooltipping.isEnabled(comp);\n },\n setEnabled: enabled => {\n return Tooltipping.setEnabled(comp, enabled);\n },\n immediatelyShow: () => {\n return Tooltipping.immediateOpenClose(comp, true);\n },\n immediatelyHide: () => {\n return Tooltipping.immediateOpenClose(comp, false);\n }\n });\n Tooltipping.setEnabled(comp, false);\n },\n onShow: (component, _tooltip) => {\n Tooltipping.setComponents(component, [{\n dom: {\n tag: 'p',\n classes: [getClass('rgb-warning-note')]\n },\n components: [text$2(translate(name === 'hex' ? 'colorcustom.rgb.invalidHex' : 'colorcustom.rgb.invalid'))]\n }]);\n }\n })\n })\n ]),\n onSetValue: input => {\n if (Invalidating.isInvalid(input)) {\n const run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n const errorId = generate$6('aria-invalid');\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: [getClass('invalid-icon')]\n },\n components: [memInvalidIcon.asSpec()]\n });\n const comps = [\n pLabel,\n pField,\n memStatus.asSpec()\n ];\n const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n const components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('rgb-container')]\n },\n components\n };\n };\n const copyRgbToHex = (form, rgba) => {\n const hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(hexField => {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n const copyRgbToForm = (form, rgb) => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n Representing.setValue(form, {\n red,\n green,\n blue\n });\n };\n const memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n const updatePreview = (anyInSystem, hex) => {\n memPreview.getOpt(anyInSystem).each(preview => {\n set$8(preview.element, 'background-color', '#' + hex.value);\n });\n };\n const factory = () => {\n const state = {\n red: Cell(Optional.some(255)),\n green: Cell(Optional.some(255)),\n blue: Cell(Optional.some(255)),\n hex: Cell(Optional.some('ffffff'))\n };\n const copyHexToRgb = (form, hex) => {\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n const get = prop => state[prop].get();\n const set = (prop, value) => {\n state[prop].set(value);\n };\n const getValueRgb = () => get('red').bind(red => get('green').bind(green => get('blue').map(blue => rgbaColour(red, green, blue, 1))));\n const setValueRgb = rgb => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n const onInvalidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n const onValidHex = (form, value) => {\n onValidHexx(form);\n const hex = hexColour(value);\n set('hex', Optional.some(hex.value));\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n };\n const onValidRgb = (form, prop, value) => {\n const val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(rgb => {\n const hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n });\n };\n const isHexInputEvent = data => data.type === 'hex';\n const onValidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n const formPartStrings = key => ({\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n });\n const redStrings = formPartStrings('red');\n const greenStrings = formPartStrings('green');\n const blueStrings = formPartStrings('blue');\n const hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(parts => ({\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run$1(validInput, onValidInput),\n run$1(invalidInput, onInvalidInput),\n run$1(validatingInput, onInvalidInput)\n ])\n ])\n })), {\n apis: {\n updateHex: (form, hex) => {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n const rgbFormSketcher = single({\n factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: (apis, form, hex) => {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n const paletteFactory = (translate, getClass) => {\n const spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n const thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: `
`\n }\n });\n const setColour = (canvas, rgba) => {\n const {width, height} = canvas;\n const ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n const grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n const grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n const setPaletteHue = (slider, hue) => {\n const canvas = slider.components()[0].element.dom;\n const hsv = hsvColour(hue, 100, 100);\n const rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n const setPaletteThumb = (slider, hex) => {\n const hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n hsv.saturation,\n hsv.value\n ]));\n };\n const factory = _detail => {\n const getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n const onChange = (slider, _thumb, value) => {\n if (!isNumber(value)) {\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n Math.floor(value.x),\n Math.floor(100 - value.y)\n ]));\n }\n emitWith(slider, paletteUpdate, { value });\n };\n const onInit = (_slider, _thumb, spectrum, _value) => {\n setColour(spectrum.element.dom, toString(red));\n };\n const sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'slider',\n 'aria-valuetext': translate([\n 'Saturation {0}%, Brightness {1}%',\n 0,\n 0\n ])\n },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange,\n onInit,\n sliderBehaviours\n });\n };\n const saturationBrightnessPaletteSketcher = single({\n factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: (_apis, slider, hue) => {\n setPaletteHue(slider, hue);\n },\n setThumb: (_apis, slider, hex) => {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n const makeFactory = (translate, getClass, tooltipConfig, makeIcon) => {\n const factory = detail => {\n const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex, tooltipConfig, makeIcon);\n const sbPalette = paletteFactory(translate, getClass);\n const hueSliderToDegrees = hue => (100 - hue) / 100 * 360;\n const hueDegreesToSlider = hue => 100 - hue / 360 * 100;\n const state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n const memSlider = record(sliderFactory(translate, getClass));\n const memPalette = record(sbPalette.sketch({}));\n const memRgb = record(rgbForm.sketch({}));\n const updatePalette = (anyInSystem, _hex, hue) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setHue(palette, hue);\n });\n };\n const updateFields = (anyInSystem, hex) => {\n memRgb.getOpt(anyInSystem).each(form => {\n rgbForm.updateHex(form, hex);\n });\n };\n const updateSlider = (anyInSystem, _hex, hue) => {\n memSlider.getOpt(anyInSystem).each(slider => {\n Slider.setValue(slider, hueDegreesToSlider(hue));\n });\n };\n const updatePaletteThumb = (anyInSystem, hex) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setThumb(palette, hex);\n });\n };\n const updateState = (hex, hue) => {\n const rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n const runUpdates = (anyInSystem, hex, hue, updates) => {\n updateState(hex, hue);\n each$1(updates, update => {\n update(anyInSystem, hex, hue);\n });\n };\n const onPaletteUpdate = () => {\n const updates = [updateFields];\n return (form, simulatedEvent) => {\n const value = simulatedEvent.event.value;\n const oldHue = state.paletteHue.get();\n const newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n const onSliderUpdate = () => {\n const updates = [\n updatePalette,\n updateFields\n ];\n return (form, simulatedEvent) => {\n const hue = hueSliderToDegrees(simulatedEvent.event.value);\n const oldRgb = state.paletteRgba.get();\n const oldHsv = fromRgb(oldRgb);\n const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n const onFieldsUpdate = () => {\n const updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return (form, simulatedEvent) => {\n const hex = simulatedEvent.event.hex;\n const hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run$1(fieldsUpdate, onFieldsUpdate()),\n run$1(paletteUpdate, onPaletteUpdate()),\n run$1(sliderUpdate, onSliderUpdate())\n ]),\n Composing.config({ find: comp => memRgb.getOpt(comp) }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n const colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory\n });\n return colourPickerSketcher;\n };\n\n const self = () => Composing.config({ find: Optional.some });\n const memento$1 = mem => Composing.config({ find: mem.getOpt });\n const childAt = index => Composing.config({ find: comp => child$2(comp.element, index).bind(element => comp.getSystem().getByDom(element).toOptional()) });\n const ComposingConfigs = {\n self,\n memento: memento$1,\n childAt\n };\n\n const processors = objOf([\n defaulted('preprocess', identity),\n defaulted('postprocess', identity)\n ]);\n const memento = (mem, rawProcessors) => {\n const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const other = mem.get(comp);\n const rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: (comp, rawValue) => {\n const newValue = ps.preprocess(rawValue);\n const other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n const withComp = (optInitialValue, getter, setter) => Representing.config({\n store: {\n mode: 'manual',\n ...optInitialValue.map(initialValue => ({ initialValue })).getOr({}),\n getValue: getter,\n setValue: setter\n }\n });\n const withElement = (initialValue, getter, setter) => withComp(initialValue, c => getter(c.element), (c, v) => setter(c.element, v));\n const domHtml = optInitialValue => withElement(optInitialValue, get$8, set$6);\n const memory = initialValue => Representing.config({\n store: {\n mode: 'memory',\n initialValue\n }\n });\n\n const english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red component',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green component',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue component',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.rgb.invalid': 'Numbers only, 0 to 255',\n 'colorcustom.rgb.invalidHex': 'Hexadecimal only, 000000 to FFFFFF',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n const translate$1 = providerBackstage => key => {\n if (isString(key)) {\n return providerBackstage.translate(english[key]);\n } else {\n return providerBackstage.translate(key);\n }\n };\n const renderColorPicker = (_spec, providerBackstage, initialData) => {\n const getClass = key => 'tox-' + key;\n const renderIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providerBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providerBackstage.icons);\n const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass, providerBackstage.tooltips.getConfig, renderIcon);\n const onValidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n const onInvalidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n const memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex,\n onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n withComp(initialData, comp => {\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n const optHex = optRgbForm.bind(rgbForm => {\n const formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(hex => '#' + removeLeading(hex, '#')).getOr('');\n }, (comp, newValue) => {\n const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n const valOpt = Optional.from(pattern.exec(newValue)).bind(matches => get$i(matches, 1));\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(() => {\n console.log('Can not find form');\n }, rgbForm => {\n Representing.setValue(rgbForm, { hex: valOpt.getOr('') });\n Form.getField(rgbForm, 'hex').each(hexField => {\n emit(hexField, input());\n });\n });\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n const isOldCustomEditor = spec => has$2(spec, 'init');\n const renderCustomEditor = spec => {\n const editorApi = value$4();\n const memReplaced = record({ dom: { tag: spec.tag } });\n const initialValue = value$4();\n const focusBehaviour = !isOldCustomEditor(spec) && spec.onFocus.isSome() ? [\n Focusing.config({\n onFocus: comp => {\n spec.onFocus.each(onFocusFn => {\n onFocusFn(comp.element.dom);\n });\n }\n }),\n Tabstopping.config({})\n ] : [];\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(component => {\n memReplaced.getOpt(component).each(ta => {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then(init => init(ta.element.dom, spec.settings))).then(ea => {\n initialValue.on(cvalue => {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(ea);\n });\n });\n })]),\n withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), ed => ed.getValue()), (_component, value) => {\n editorApi.get().fold(() => initialValue.set(value), ed => ed.setValue(value));\n }),\n ComposingConfigs.self()\n ].concat(focusBehaviour)),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const browseFilesEvent = generate$6('browse.files.event');\n const filterByExtension = (files, providersBackstage) => {\n const allowedImageFileTypes = global$1.explode(providersBackstage.getOption('images_file_types'));\n const isFileInAllowedTypes = file => exists(allowedImageFileTypes, type => endsWith(file.name.toLowerCase(), `.${ type.toLowerCase() }`));\n return filter$2(from(files), isFileInAllowedTypes);\n };\n const renderDropZone = (spec, providersBackstage, initialData) => {\n const stopper = (_, se) => {\n se.stop();\n };\n const sequence = actions => (comp, se) => {\n each$1(actions, a => {\n a(comp, se);\n });\n };\n const onDrop = (comp, se) => {\n var _a;\n if (!Disabling.isDisabled(comp)) {\n const transferEvent = se.event.raw;\n emitWith(comp, browseFilesEvent, { files: (_a = transferEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.files });\n }\n };\n const onSelect = (component, simulatedEvent) => {\n const input = simulatedEvent.event.raw.target;\n emitWith(component, browseFilesEvent, { files: input.files });\n };\n const handleFiles = (component, files) => {\n if (files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n }\n };\n const memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n factory: Button,\n dom: {\n tag: 'button',\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [\n text$2(providersBackstage.translate('Browse for an image')),\n memInput.asSpec()\n ],\n action: comp => {\n const inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n ComposingConfigs.self(),\n memory(initialData.getOr([])),\n Tabstopping.config({}),\n DisablingConfigs.button(() => providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n const wrapper = {\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n Disabling.config({ disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run$1('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragover', stopper),\n run$1('drop', sequence([\n stopper,\n onDrop\n ])),\n run$1(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: { tag: 'p' },\n components: [text$2(providersBackstage.translate('Drop an image here'))]\n },\n pField\n ]\n }]\n };\n return renderFormFieldWith(pLabel, wrapper, ['tox-form__group--stretched'], [config('handle-files', [run$1(browseFilesEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n handleFiles(field, se.event.files);\n });\n })])]);\n };\n\n const renderGrid = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n `tox-form__grid--${ spec.columns }col`\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const adaptable = (fn, rate) => {\n let timer = null;\n let args = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n args = null;\n }\n };\n const throttle = (...newArgs) => {\n args = newArgs;\n if (isNull(timer)) {\n timer = setTimeout(() => {\n const tempArgs = args;\n timer = null;\n args = null;\n fn.apply(null, tempArgs);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const first = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const beforeObject = generate$6('alloy-fake-before-tabstop');\n const afterObject = generate$6('alloy-fake-after-tabstop');\n const craftWithClasses = classes => {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n const craft = (containerClasses, spec) => {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-navobj',\n ...containerClasses.getOr([])\n ]\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n const triggerTab = (placeholder, shiftKey) => {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey\n }\n });\n };\n const onFocus = (container, targetComp) => {\n const target = targetComp.element;\n if (has(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n const isPseudoStop = element => {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n const dialogChannel = generate$6('update-dialog');\n const titleChannel = generate$6('update-title');\n const bodyChannel = generate$6('update-body');\n const footerChannel = generate$6('update-footer');\n const bodySendMessageChannel = generate$6('body-send-message');\n const dialogFocusShiftedChannel = generate$6('dialog-focus-shifted');\n\n const browser = detect$1().browser;\n const isSafari = browser.isSafari();\n const isFirefox = browser.isFirefox();\n const isSafariOrFirefox = isSafari || isFirefox;\n const isChromium = browser.isChromium();\n const isElementScrollAtBottom = ({scrollTop, scrollHeight, clientHeight}) => Math.ceil(scrollTop) + clientHeight >= scrollHeight;\n const scrollToY = (win, y) => win.scrollTo(0, y === 'bottom' ? 99999999 : y);\n const getScrollingElement = (doc, html) => {\n const body = doc.body;\n return Optional.from(!/^ 1)) ? body : doc.documentElement);\n };\n const writeValue = (iframeElement, html, fallbackFn) => {\n const iframe = iframeElement.dom;\n Optional.from(iframe.contentDocument).fold(fallbackFn, doc => {\n let lastScrollTop = 0;\n const isScrollAtBottom = getScrollingElement(doc, html).map(el => {\n lastScrollTop = el.scrollTop;\n return el;\n }).forall(isElementScrollAtBottom);\n const scrollAfterWrite = () => {\n const win = iframe.contentWindow;\n if (isNonNullable(win)) {\n if (isScrollAtBottom) {\n scrollToY(win, 'bottom');\n } else if (!isScrollAtBottom && isSafariOrFirefox && lastScrollTop !== 0) {\n scrollToY(win, lastScrollTop);\n }\n }\n };\n if (isSafari) {\n iframe.addEventListener('load', scrollAfterWrite, { once: true });\n }\n doc.open();\n doc.write(html);\n doc.close();\n if (!isSafari) {\n scrollAfterWrite();\n }\n });\n };\n const throttleInterval = someIf(isSafariOrFirefox, isSafari ? 500 : 200);\n const writeValueThrottler = throttleInterval.map(interval => adaptable(writeValue, interval));\n const getDynamicSource = (initialData, stream) => {\n const cachedValue = Cell(initialData.getOr(''));\n return {\n getValue: _frameComponent => cachedValue.get(),\n setValue: (frameComponent, html) => {\n if (cachedValue.get() !== html) {\n const iframeElement = frameComponent.element;\n const setSrcdocValue = () => set$9(iframeElement, 'srcdoc', html);\n if (stream) {\n writeValueThrottler.fold(constant$1(writeValue), throttler => throttler.throttle)(iframeElement, html, setSrcdocValue);\n } else {\n setSrcdocValue();\n }\n }\n cachedValue.set(html);\n }\n };\n };\n const renderIFrame = (spec, providersBackstage, initialData) => {\n const baseClass = 'tox-dialog__iframe';\n const opaqueClass = spec.transparent ? [] : [`${ baseClass }--opaque`];\n const containerBorderedClass = spec.border ? [`tox-navobj-bordered`] : [];\n const attributes = {\n ...spec.label.map(title => ({ title })).getOr({}),\n ...initialData.map(html => ({ srcdoc: html })).getOr({}),\n ...spec.sandboxed ? { sandbox: 'allow-scripts allow-same-origin' } : {}\n };\n const sourcing = getDynamicSource(initialData, spec.streamContent);\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const factory = newSpec => craft(Optional.from(containerBorderedClass), {\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes,\n classes: [\n baseClass,\n ...opaqueClass\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n withComp(initialData, sourcing.getValue, sourcing.setValue),\n Receiving.config({\n channels: {\n [dialogFocusShiftedChannel]: {\n onReceive: (comp, message) => {\n message.newFocus.each(newFocus => {\n parentElement(comp.element).each(parent => {\n const f = eq(comp.element, newFocus) ? add$2 : remove$3;\n f(parent, 'tox-navobj-bordered-focus');\n });\n });\n }\n }\n }\n })\n ])\n });\n const pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n const image = image => new Promise((resolve, reject) => {\n const loaded = () => {\n destroy();\n resolve(image);\n };\n const listeners = [\n bind(image, 'load', loaded),\n bind(image, 'error', () => {\n destroy();\n reject('Unable to load data from image: ' + image.dom.src);\n })\n ];\n const destroy = () => each$1(listeners, l => l.unbind());\n if (image.dom.complete) {\n loaded();\n }\n });\n\n const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n const width = imageWidth * zoom;\n const height = imageHeight * zoom;\n const left = Math.max(0, panelWidth / 2 - width / 2);\n const top = Math.max(0, panelHeight / 2 - height / 2);\n return {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px'\n };\n };\n const zoomToFit = (panel, width, height) => {\n const panelW = get$d(panel);\n const panelH = get$e(panel);\n return Math.min(panelW / width, panelH / height, 1);\n };\n const renderImagePreview = (spec, initialData) => {\n const cachedData = Cell(initialData.getOr({ url: '' }));\n const memImage = record({\n dom: {\n tag: 'img',\n classes: ['tox-imagepreview__image'],\n attributes: initialData.map(data => ({ src: data.url })).getOr({})\n }\n });\n const memContainer = record({\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview__container'],\n attributes: { role: 'presentation' }\n },\n components: [memImage.asSpec()]\n });\n const setValue = (frameComponent, data) => {\n const translatedData = { url: data.url };\n data.zoom.each(z => translatedData.zoom = z);\n data.cachedWidth.each(z => translatedData.cachedWidth = z);\n data.cachedHeight.each(z => translatedData.cachedHeight = z);\n cachedData.set(translatedData);\n const applyFramePositioning = () => {\n const {cachedWidth, cachedHeight, zoom} = translatedData;\n if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) {\n if (isUndefined(zoom)) {\n const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight);\n translatedData.zoom = z;\n }\n const position = calculateImagePosition(get$d(frameComponent.element), get$e(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom);\n memContainer.getOpt(frameComponent).each(container => {\n setAll(container.element, position);\n });\n }\n };\n memImage.getOpt(frameComponent).each(imageComponent => {\n const img = imageComponent.element;\n if (data.url !== get$g(img, 'src')) {\n set$9(img, 'src', data.url);\n remove$3(frameComponent.element, 'tox-imagepreview__loaded');\n }\n applyFramePositioning();\n image(img).then(img => {\n if (frameComponent.getSystem().isConnected()) {\n add$2(frameComponent.element, 'tox-imagepreview__loaded');\n translatedData.cachedWidth = img.dom.naturalWidth;\n translatedData.cachedHeight = img.dom.naturalHeight;\n applyFramePositioning();\n }\n });\n });\n };\n const styles = {};\n spec.height.each(h => styles.height = h);\n const fakeValidatedData = initialData.map(d => ({\n url: d.url,\n zoom: Optional.from(d.zoom),\n cachedWidth: Optional.from(d.cachedWidth),\n cachedHeight: Optional.from(d.cachedHeight)\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview'],\n styles,\n attributes: { role: 'presentation' }\n },\n components: [memContainer.asSpec()],\n behaviours: derive$1([\n ComposingConfigs.self(),\n withComp(fakeValidatedData, () => cachedData.get(), setValue)\n ])\n };\n };\n\n const renderLabel$2 = (spec, backstageShared, getCompByName) => {\n const baseClass = 'tox-label';\n const centerClass = spec.align === 'center' ? [`${ baseClass }--center`] : [];\n const endClass = spec.align === 'end' ? [`${ baseClass }--end`] : [];\n const label = record({\n dom: {\n tag: 'label',\n classes: [\n baseClass,\n ...centerClass,\n ...endClass\n ]\n },\n components: [text$2(backstageShared.providers.translate(spec.label))]\n });\n const comps = map$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [\n label.asSpec(),\n ...comps\n ],\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' }),\n config('label', [runOnAttached(comp => {\n spec.for.each(name => {\n getCompByName(name).each(target => {\n label.getOpt(comp).each(labelComp => {\n var _a;\n const id = (_a = get$g(target.element, 'id')) !== null && _a !== void 0 ? _a : generate$6('form-field');\n set$9(target.element, 'id', id);\n set$9(labelComp.element, 'for', id);\n });\n });\n });\n })])\n ])\n };\n };\n\n const internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n const onToolbarButtonExecute = info => runOnExecute$1((comp, _simulatedEvent) => {\n runWithApi(info, comp)(itemApi => {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n const commonButtonDisplayEvent = generate$6('common-button-display-events');\n const toolbarButtonEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n commonButtonDisplayEvent\n ],\n [detachedFromDom()]: [\n 'toolbar-button-events',\n 'dropdown-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ]\n };\n\n const forceInitialSize = comp => set$8(comp.element, 'width', get$f(comp.element, 'width'));\n\n const renderIcon$1 = (iconName, iconsProvider, behaviours) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours\n }, iconsProvider);\n const renderIconFromPack$1 = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, []);\n const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, [Replacing.config({})]);\n const renderLabel$1 = (text, prefix, providersBackstage) => ({\n dom: {\n tag: 'span',\n classes: [`${ prefix }__select-label`]\n },\n components: [text$2(providersBackstage.translate(text))],\n behaviours: derive$1([Replacing.config({})])\n });\n\n const updateMenuText = generate$6('update-menu-text');\n const updateMenuIcon = generate$6('update-menu-icon');\n const renderCommonDropdown = (spec, prefix, sharedBackstage, btnName) => {\n const editorOffCell = Cell(noop);\n const optMemDisplayText = spec.text.map(text => record(renderLabel$1(text, prefix, sharedBackstage.providers)));\n const optMemDisplayIcon = spec.icon.map(iconName => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons)));\n const onLeftOrRightInMenu = (comp, se) => {\n const dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event.raw });\n Dropdown.close(dropdown);\n return Optional.some(true);\n };\n const role = spec.role.fold(() => ({}), role => ({ role }));\n const listRole = Optional.from(spec.listRole).map(listRole => ({ listRole })).getOr({});\n const ariaLabelAttribute = spec.ariaLabel.fold(() => ({}), ariaLabel => {\n const translatedAriaLabel = sharedBackstage.providers.translate(ariaLabel);\n return { 'aria-label': translatedAriaLabel };\n });\n const iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [`${ prefix }__select-chevron`]\n }, sharedBackstage.providers.icons);\n const fixWidthBehaviourName = generate$6('common-button-display-events');\n const customEventsName = 'dropdown-events';\n const memDropdown = record(Dropdown.sketch({\n ...spec.uid ? { uid: spec.uid } : {},\n ...role,\n ...listRole,\n dom: {\n tag: 'button',\n classes: [\n prefix,\n `${ prefix }--select`\n ].concat(map$2(spec.classes, c => `${ prefix }--${ c }`)),\n attributes: {\n ...ariaLabelAttribute,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec()),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n onOpen: (anchor, dropdownComp, tmenuComp) => {\n if (spec.searchable) {\n focusSearchField(tmenuComp);\n }\n },\n dropdownBehaviours: derive$1([\n ...spec.dropdownBehaviours,\n DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Replacing.config({}),\n ...spec.tooltip.map(t => Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ tooltipText: sharedBackstage.providers.translate(t) }))).toArray(),\n config(customEventsName, [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config(fixWidthBehaviourName, [runOnAttached((comp, _se) => {\n if (spec.listRole !== 'listbox') {\n forceInitialSize(comp);\n }\n })]),\n config('update-dropdown-width-variable', [run$1(windowResize(), (comp, _se) => Dropdown.close(comp))]),\n config('menubutton-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ]),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n Tooltipping.name(),\n customEventsName,\n fixWidthBehaviourName\n ]\n }),\n sandboxBehaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n }),\n config('dropdown-sandbox-events', [\n run$1(refetchTriggerEvent, (originalSandboxComp, se) => {\n handleRefetchTrigger(originalSandboxComp);\n se.stop();\n }),\n run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => {\n handleRedirectToMenuItem(sandboxComp, se);\n se.stop();\n })\n ])\n ]),\n lazySink: sharedBackstage.getSink,\n toggleClass: `${ prefix }--active`,\n parts: {\n menu: {\n ...part(false, spec.columns, spec.presets),\n fakeFocus: spec.searchable,\n ...spec.listRole === 'listbox' ? {} : {\n onHighlightItem: updateAriaOnHighlight,\n onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => {\n Highlighting.getHighlighted(nowActiveMenuComp).each(itemComp => {\n updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp);\n });\n },\n onDehighlightItem: updateAriaOnDehighlight\n }\n }\n },\n getAnchorOverrides: () => {\n return {\n maxHeightFunction: (element, available) => {\n anchored()(element, available - 10);\n }\n };\n },\n fetch: comp => Future.nu(curry(spec.fetch, comp))\n }));\n return memDropdown.asSpec();\n };\n\n const isMenuItemReference = item => isString(item);\n const isSeparator$2 = item => item.type === 'separator';\n const isExpandingMenuItem = item => has$2(item, 'getSubmenuItems');\n const separator$2 = { type: 'separator' };\n const unwrapReferences = (items, menuItems) => {\n const realItems = foldl(items, (acc, item) => {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n } else if (has$2(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n const getFromExpandingItem = (item, menuItems) => {\n const submenuItems = item.getSubmenuItems();\n const rest = expand(submenuItems, menuItems);\n const newMenus = deepMerge(rest.menus, { [item.value]: rest.items });\n const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value });\n return {\n item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n const generateValueIfRequired = item => {\n const itemValue = get$h(item, 'value').getOrThunk(() => generate$6('generated-menu-item'));\n return deepMerge({ value: itemValue }, item);\n };\n const expand = (items, menuItems) => {\n const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, (acc, item) => {\n if (isExpandingMenuItem(item)) {\n const itemWithValue = generateValueIfRequired(item);\n const newData = getFromExpandingItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [\n newData.item,\n ...acc.items\n ],\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n } else {\n return {\n ...acc,\n items: [\n item,\n ...acc.items\n ]\n };\n }\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n const getSearchModeForField = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), searchSettings => ({\n searchMode: 'search-with-field',\n placeholder: searchSettings.placeholder\n }));\n };\n const getSearchModeForResults = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), _ => ({ searchMode: 'search-with-results' }));\n };\n const build = (items, itemResponse, backstage, settings) => {\n const primary = generate$6('primary-menu');\n const data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n const mainMenuSearchMode = getSearchModeForField(settings);\n const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode);\n const submenuSearchMode = getSearchModeForResults(settings);\n const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false, submenuSearchMode));\n const menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n const isSingleListItem = item => !has$2(item, 'items');\n const dataAttribute = 'data-value';\n const fetchItems = (dropdownComp, name, items, selectedValue, hasNestedItems) => map$2(items, item => {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue, hasNestedItems)\n };\n } else {\n return {\n type: 'togglemenuitem',\n ...hasNestedItems ? {} : { role: 'option' },\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: () => {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n const findItemByValue = (items, value) => findMap(items, item => {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const renderListBox = (spec, backstage, initialData) => {\n const hasNestedItems = exists(spec.items, item => !isSingleListItem(item));\n const providersBackstage = backstage.shared.providers;\n const initialItem = initialData.bind(value => findItemByValue(spec.items, value)).orThunk(() => head(spec.items).filter(isSingleListItem));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: sketchSpec => renderCommonDropdown({\n context: spec.context,\n uid: sketchSpec.uid,\n text: initialItem.map(item => item.text),\n icon: Optional.none(),\n tooltip: Optional.none(),\n role: someIf(!hasNestedItems, 'combobox'),\n ...hasNestedItems ? {} : { listRole: 'listbox' },\n ariaLabel: spec.label,\n fetch: (comp, callback) => {\n const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp), hasNestedItems);\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n withComp(initialItem.map(item => item.value), comp => get$g(comp.element, dataAttribute), (comp, data) => {\n findItemByValue(spec.items, data).each(item => {\n set$9(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n })\n ]\n }, 'tox-listbox', backstage.shared)\n }\n });\n const listBoxWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-listboxfield']\n },\n components: [pField]\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [listBoxWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n const renderPanel = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n });\n\n const factory$h = (detail, _spec) => {\n const options = map$2(detail.options, option => ({\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n }));\n const initialValues = detail.data.map(v => wrap$1('initialValue', v)).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: select => {\n return get$7(select.element);\n },\n setValue: (select, newValue) => {\n const firstOption = head(detail.options);\n const found = find$5(detail.options, opt => opt.value === newValue);\n if (found.isSome()) {\n set$5(select.element, newValue);\n } else if (select.element.dom.selectedIndex === -1 && newValue === '') {\n firstOption.each(value => set$5(select.element, value.value));\n }\n },\n ...initialValues\n }\n })\n ])\n };\n };\n const HtmlSelect = single({\n name: 'HtmlSelect',\n configFields: [\n required$1('options'),\n field('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted('selectClasses', []),\n defaulted('selectAttributes', {}),\n option$3('data')\n ],\n factory: factory$h\n });\n\n const renderSelectBox = (spec, providersBackstage, initialData) => {\n const translatedOptions = map$2(spec.items, item => ({\n text: providersBackstage.translate(item.text),\n value: item.value\n }));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n ...initialData.map(data => ({ data })).getOr({}),\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n tag: 'div',\n classes: ['tox-selectfield__icon-js']\n }, providersBackstage.icons));\n const selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const schema$h = constant$1([\n defaulted('field1Name', 'field1'),\n defaulted('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers$1(['lockClass']),\n defaulted('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n const coupledPart = (selfName, otherName) => required({\n factory: FormField,\n name: selfName,\n overrides: detail => {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), me => {\n getField(me, detail, otherName).each(other => {\n getPart(me, detail, 'lock').each(lock => {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n });\n });\n })])])\n };\n }\n });\n const parts$c = constant$1([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'lock',\n overrides: detail => {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n selected: detail.locked,\n toggleClass: detail.markers.lockClass,\n aria: { mode: 'pressed' }\n })])\n };\n }\n })\n ]);\n\n const factory$g = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return {\n [detail.field1Name]: Representing.getValue(parts.field1()),\n [detail.field2Name]: Representing.getValue(parts.field2())\n };\n },\n setValue: (comp, value) => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: component => getPart(component, detail, 'field1'),\n getField2: component => getPart(component, detail, 'field2'),\n getLock: component => getPart(component, detail, 'lock')\n }\n });\n const FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$g,\n apis: {\n getField1: (apis, component) => apis.getField1(component),\n getField2: (apis, component) => apis.getField2(component),\n getLock: (apis, component) => apis.getLock(component)\n }\n });\n\n const formatSize = size => {\n const unitDec = {\n '': 0,\n 'px': 0,\n 'pt': 1,\n 'mm': 1,\n 'pc': 2,\n 'ex': 2,\n 'em': 2,\n 'ch': 2,\n 'rem': 2,\n 'cm': 3,\n 'in': 4,\n '%': 4\n };\n const maxDecimal = unit => unit in unitDec ? unitDec[unit] : 1;\n let numText = size.value.toFixed(maxDecimal(size.unit));\n if (numText.indexOf('.') !== -1) {\n numText = numText.replace(/\\.?0*$/, '');\n }\n return numText + size.unit;\n };\n const parseSize = sizeText => {\n const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n const match = numPattern.exec(sizeText);\n if (match !== null) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n return Result.value({\n value,\n unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n const convertUnit = (size, unit) => {\n const inInch = {\n '': 96,\n 'px': 96,\n 'pt': 72,\n 'cm': 2.54,\n 'pc': 12,\n 'mm': 25.4,\n 'in': 1\n };\n const supported = u => has$2(inInch, u);\n if (size.unit === unit) {\n return Optional.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Optional.some(size.value);\n } else {\n return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Optional.none();\n }\n };\n const noSizeConversion = _input => Optional.none();\n const ratioSizeConversion = (scale, unit) => size => convertUnit(size, unit).map(value => ({\n value: value * scale,\n unit\n }));\n const makeRatioConverter = (currentFieldText, otherFieldText) => {\n const cValue = parseSize(currentFieldText).toOptional();\n const oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map(val => oSize.value / val).map(r => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n };\n\n const renderSizeInput = (spec, providersBackstage) => {\n let converter = noSizeConversion;\n const ratioEvent = generate$6('ratio-event');\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const label = spec.label.getOr('Constrain proportions');\n const translatedLabel = providersBackstage.translate(label);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: {\n 'aria-label': translatedLabel,\n 'data-mce-name': label\n }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components\n });\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n }),\n run$1(change(), (component, _simulatedEvent) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n const widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n const heightField = FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')),\n config('size-input-events2', [run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n const renderSlider = (spec, providerBackstage, initialData) => {\n const labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providerBackstage.translate(spec.label))]\n });\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: spec.min,\n maxX: spec.max,\n getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([\n ComposingConfigs.self(),\n Focusing.config({})\n ]),\n onChoose: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n },\n onChange: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n }\n });\n };\n\n const renderTable = (spec, providersBackstage) => {\n const renderTh = text => ({\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderHeader = header => ({\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(header, renderTh)\n }]\n });\n const renderTd = text => ({\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderTr = row => ({\n dom: { tag: 'tr' },\n components: map$2(row, renderTd)\n });\n const renderRows = rows => ({\n dom: { tag: 'tbody' },\n components: map$2(rows, renderTr)\n });\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n const renderTextField = (spec, providersBackstage) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const baseInputBehaviours = [\n Disabling.config({ disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: comp => {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(postPaste(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n const validatingBehaviours = spec.validation.map(vl => Invalidating.config({\n getRoot: input => {\n return parentElement(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: input => {\n const v = Representing.getValue(input);\n const result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n })).toArray();\n const placeholder = spec.placeholder.fold(constant$1({}), p => ({ placeholder: providersBackstage.translate(p) }));\n const inputMode = spec.inputMode.fold(constant$1({}), mode => ({ inputmode: mode }));\n const inputAttributes = {\n ...placeholder,\n ...inputMode,\n 'data-mce-name': spec.name\n };\n const pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n ...spec.data.map(data => ({ data })).getOr({}),\n inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n const pTextField = spec.multiline ? {\n dom: {\n tag: 'div',\n classes: ['tox-textarea-wrap']\n },\n components: [pField]\n } : pField;\n const extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n const extraBehaviours = [\n Disabling.config({\n disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ];\n return renderFormFieldWith(pLabel, pTextField, extraClasses2, extraBehaviours);\n };\n const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: !spec.enabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Optional.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: !spec.enabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n\n const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, get => get(component));\n\n const getDimensionProperty = slideConfig => slideConfig.dimension.property;\n const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n const disableTransitions = (component, slideConfig) => {\n const root = getAnimationRoot(component, slideConfig);\n remove$2(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n const setShrunk = (component, slideConfig) => {\n remove$3(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$8(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n const setGrown = (component, slideConfig) => {\n remove$3(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$7(component.element, getDimensionProperty(slideConfig));\n };\n const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n const root = getAnimationRoot(component, slideConfig);\n remove$3(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n const doStartSmartShrink = (component, slideConfig, slideState) => {\n const size = getDimension(slideConfig, component.element);\n const shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n const doStartGrow = (component, slideConfig, slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n const wasShrinking = has(root, slideConfig.shrinkingClass);\n const beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n const fullSize = getDimension(slideConfig, component.element);\n const startPartialGrow = () => {\n set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n const startCompleteGrow = () => {\n setShrunk(component, slideConfig);\n };\n const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$3(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n const refresh$3 = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n remove$7(component.element, getDimensionProperty(slideConfig));\n const fullSize = getDimension(slideConfig, component.element);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n const grow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n const shrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n const immediateShrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState);\n }\n };\n const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n const isGrowing = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.growingClass) === true;\n };\n const isShrinking = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n const toggleGrow = (component, slideConfig, slideState) => {\n const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n const immediateGrow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n slideConfig.onGrown(component);\n }\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$3,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions,\n immediateGrow: immediateGrow\n });\n\n const exhibit = (base, slideConfig, _slideState) => {\n const expanded = slideConfig.expanded;\n return expanded ? nu$8({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$8({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n const events$5 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$7(component.element, slideConfig.dimension.property);\n }\n const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit,\n events: events$5\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option$3('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted('expanded', false),\n requiredOf('dimension', choose$1('property', {\n width: [\n output$1('property', 'width'),\n output$1('getDimension', elem => get$d(elem) + 'px')\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', elem => get$e(elem) + 'px')\n ]\n }))\n ];\n\n const init$8 = spec => {\n const state = Cell(spec.expanded);\n const readState = () => 'expanded: ' + state.get();\n return nu$7({\n isExpanded: () => state.get() === true,\n isCollapsed: () => state.get() === false,\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$8\n });\n\n const Sliding = create$4({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n const getMenuButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setActive: state => {\n const elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-tbtn--enabled');\n remove$8(elm, 'aria-pressed');\n }\n },\n isActive: () => has(component.element, 'tox-tbtn--enabled'),\n setText: text => {\n emitWith(component, updateMenuText, { text });\n },\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const renderMenuButton = (spec, prefix, backstage, role, tabstopping = true, btnName) => {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n ariaLabel: spec.tooltip,\n searchable: spec.search.isSome(),\n role,\n fetch: (dropdownComp, callback) => {\n const fetchContext = { pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' };\n spec.fetch(items => {\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: spec.search\n }));\n }, fetchContext, getMenuButtonApi(dropdownComp));\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [...tabstopping ? [Tabstopping.config({})] : []],\n context: spec.context\n }, prefix, backstage.shared, btnName);\n };\n const getFetch = (items, getButton, backstage) => {\n const getMenuItemAction = item => api => {\n const newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(sink => {\n getButton().getOpt(sink).each(orig => {\n focus$3(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n const getMenuItemSetup = item => api => {\n api.setActive(item.storage.get());\n };\n return success => {\n success(map$2(items, item => {\n const text = item.text.fold(() => ({}), text => ({ text }));\n return {\n type: item.type,\n active: false,\n ...text,\n context: item.context,\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n };\n }));\n };\n };\n\n const renderLabel = text => ({\n dom: {\n tag: 'span',\n classes: ['tox-tree__label'],\n attributes: { 'aria-label': text }\n },\n components: [text$2(text)]\n });\n const renderCustomStateIcon = (container, components, backstage) => {\n container.customStateIcon.each(icon => components.push(renderIcon(icon, backstage.shared.providers.icons, container.customStateIconTooltip.fold(() => [], tooltip => [Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: tooltip }))]), ['tox-icon-custom-state'], container.customStateIconTooltip.fold(() => ({}), tooltip => ({ title: tooltip })))));\n };\n const leafLabelEventsId = generate$6('leaf-label-event-id');\n const renderLeafLabel = ({leaf, onLeafAction, visible, treeId, selectedId, backstage}) => {\n const internalMenuButton = leaf.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none(), visible));\n const components = [renderLabel(leaf.title)];\n renderCustomStateIcon(leaf, components, backstage);\n internalMenuButton.each(btn => components.push(btn));\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--leaf__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--leaf__label--visible'] : [])\n },\n components,\n role: 'treeitem',\n action: button => {\n onLeafAction(leaf.id);\n button.getSystem().broadcastOn([`update-active-item-${ treeId }`], { value: leaf.id });\n },\n eventOrder: {\n [keydown()]: [\n leafLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n Toggling.config({\n toggleClass: 'tox-trbtn--enabled',\n toggleOnExecute: false,\n aria: { mode: 'selected' }\n }),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n (message.value === leaf.id ? Toggling.on : Toggling.off)(comp);\n }\n }\n }\n }),\n config(leafLabelEventsId, [\n runOnAttached((comp, _se) => {\n selectedId.each(id => {\n const toggle = id === leaf.id ? Toggling.on : Toggling.off;\n toggle(comp);\n });\n }),\n run$1(keydown(), (comp, se) => {\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n if (isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(dirElement => {\n comp.getSystem().getByDom(dirElement).each(dirComp => {\n child(dirElement, '.tox-tree--directory__label').each(dirLabelElement => {\n dirComp.getSystem().getByDom(dirLabelElement).each(Focusing.focus);\n });\n });\n });\n se.stop();\n } else if (isRightArrowKey) {\n se.stop();\n }\n })\n ])\n ])\n });\n };\n const renderIcon = (iconName, iconsProvider, behaviours, extraClasses, extraAttributes) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-tree__icon-wrap',\n 'tox-icon'\n ].concat(extraClasses || []),\n behaviours,\n attributes: extraAttributes\n }, iconsProvider);\n const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n const directoryLabelEventsId = generate$6('directory-label-event-id');\n const renderDirectoryLabel = ({directory, visible, noChildren, backstage}) => {\n const internalMenuButton = directory.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none()));\n const components = [\n {\n dom: {\n tag: 'div',\n classes: ['tox-chevron']\n },\n components: [renderIconFromPack('chevron-right', backstage.shared.providers.icons)]\n },\n renderLabel(directory.title)\n ];\n renderCustomStateIcon(directory, components, backstage);\n internalMenuButton.each(btn => {\n components.push(btn);\n });\n const toggleExpandChildren = button => {\n ancestor(button.element, '.tox-tree--directory').each(directoryEle => {\n button.getSystem().getByDom(directoryEle).each(directoryComp => {\n const willExpand = !Toggling.isOn(directoryComp);\n Toggling.toggle(directoryComp);\n emitWith(button, 'expand-tree-node', {\n expanded: willExpand,\n node: directory.id\n });\n });\n });\n };\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--directory__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--directory__label--visible'] : [])\n },\n components,\n action: toggleExpandChildren,\n eventOrder: {\n [keydown()]: [\n directoryLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n config(directoryLabelEventsId, [run$1(keydown(), (comp, se) => {\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n if (isRightArrowKey && noChildren) {\n se.stop();\n }\n if (isRightArrowKey || isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(directoryEle => {\n comp.getSystem().getByDom(directoryEle).each(directoryComp => {\n if (!Toggling.isOn(directoryComp) && isRightArrowKey || Toggling.isOn(directoryComp) && isLeftArrowKey) {\n toggleExpandChildren(comp);\n se.stop();\n } else if (isLeftArrowKey && !Toggling.isOn(directoryComp)) {\n ancestor(directoryComp.element, '.tox-tree--directory').each(parentDirElement => {\n child(parentDirElement, '.tox-tree--directory__label').each(parentDirLabelElement => {\n directoryComp.getSystem().getByDom(parentDirLabelElement).each(Focusing.focus);\n });\n });\n se.stop();\n }\n });\n });\n }\n })])\n ])\n });\n };\n const renderDirectoryChildren = ({children, onLeafAction, visible, treeId, expandedIds, selectedId, backstage}) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory__children']\n },\n components: children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds,\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n }),\n behaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: 'tox-tree--directory__children--closed',\n openClass: 'tox-tree--directory__children--open',\n growingClass: 'tox-tree--directory__children--growing',\n shrinkingClass: 'tox-tree--directory__children--shrinking',\n expanded: visible\n }),\n Replacing.config({})\n ])\n };\n };\n const directoryEventsId = generate$6('directory-event-id');\n const renderDirectory = ({directory, onLeafAction, labelTabstopping, treeId, backstage, expandedIds, selectedId}) => {\n const {children} = directory;\n const expandedIdsCell = Cell(expandedIds);\n const computedChildrenComponents = visible => children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds: expandedIdsCell.get(),\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n });\n const childrenVisible = expandedIds.includes(directory.id);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory'],\n attributes: { role: 'treeitem' }\n },\n components: [\n renderDirectoryLabel({\n directory,\n visible: labelTabstopping,\n noChildren: directory.children.length === 0,\n backstage\n }),\n renderDirectoryChildren({\n children,\n expandedIds,\n selectedId,\n onLeafAction,\n visible: childrenVisible,\n treeId,\n backstage\n })\n ],\n behaviours: derive$1([\n config(directoryEventsId, [\n runOnAttached((comp, _se) => {\n Toggling.set(comp, childrenVisible);\n }),\n run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIdsCell.set(expanded ? [\n ...expandedIdsCell.get(),\n node\n ] : expandedIdsCell.get().filter(id => id !== node));\n })\n ]),\n Toggling.config({\n ...directory.children.length > 0 ? { aria: { mode: 'expanded' } } : {},\n toggleClass: 'tox-tree--directory--expanded',\n onToggled: (comp, childrenVisible) => {\n const childrenComp = comp.components()[1];\n const newChildren = computedChildrenComponents(childrenVisible);\n if (childrenVisible) {\n Sliding.grow(childrenComp);\n } else {\n Sliding.shrink(childrenComp);\n }\n Replacing.set(childrenComp, newChildren);\n }\n })\n ])\n };\n };\n const treeEventsId = generate$6('tree-event-id');\n const renderTree = (spec, backstage) => {\n const onLeafAction = spec.onLeafAction.getOr(noop);\n const onToggleExpand = spec.onToggleExpand.getOr(noop);\n const defaultExpandedIds = spec.defaultExpandedIds;\n const expandedIds = Cell(defaultExpandedIds);\n const selectedIdCell = Cell(spec.defaultSelectedId);\n const treeId = generate$6('tree-id');\n const children = (selectedId, expandedIds) => spec.items.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible: true,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n selectedId,\n onLeafAction,\n expandedIds,\n labelTabstopping: true,\n treeId,\n backstage\n });\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree'],\n attributes: { role: 'tree' }\n },\n components: children(selectedIdCell.get(), expandedIds.get()),\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: '.tox-tree--leaf__label--visible, .tox-tree--directory__label--visible',\n cycles: false\n }),\n config(treeEventsId, [run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIds.set(expanded ? [\n ...expandedIds.get(),\n node\n ] : expandedIds.get().filter(id => id !== node));\n onToggleExpand(expandedIds.get(), {\n expanded,\n node\n });\n })]),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n selectedIdCell.set(Optional.some(message.value));\n Replacing.set(comp, children(Optional.some(message.value), expandedIds.get()));\n }\n }\n }\n }),\n Replacing.config({})\n ])\n };\n };\n\n const events$4 = (streamConfig, streamState) => {\n const streams = streamConfig.stream.streams;\n const processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(() => streamState.cancel())\n ].concat(streamConfig.cancelEvent.map(e => [run$1(e, () => streamState.cancel())]).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$4\n });\n\n const throttle = _config => {\n const state = Cell(null);\n const readState = () => ({ timer: state.get() !== null ? 'set' : 'unset' });\n const setTimer = t => {\n state.set(t);\n };\n const cancel = () => {\n const t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$7({\n readState,\n setTimer,\n cancel\n });\n };\n const init$7 = spec => spec.stream.streams.state(spec);\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$7\n });\n\n const setup$c = (streamInfo, streamState) => {\n const sInfo = streamInfo.stream;\n const throttler = last(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return (component, simulatedEvent) => {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n requiredOf('stream', choose$1('mode', {\n throttle: [\n required$1('delay'),\n defaulted('stopEvent', true),\n output$1('streams', {\n setup: setup$c,\n state: throttle\n })\n ]\n })),\n defaulted('event', 'input'),\n option$3('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n const Streaming = create$4({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n const setValueFromItem = (model, input, item) => {\n const itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n const setSelectionOn = (input, f) => {\n const el = input.element;\n const value = get$7(el);\n const node = el.dom;\n if (get$g(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n const setCursorAtEnd = input => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length));\n };\n const setSelectionToEnd = (input, startOffset) => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length));\n };\n const attemptSelectOver = (model, input, item) => {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n const currentValue = Representing.getValue(input);\n const inputDisplay = model.getDisplayText(currentValue);\n const itemValue = Representing.getValue(item);\n const itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay.length);\n }) : Optional.none();\n }\n };\n\n const itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n const make$3 = (detail, components, spec, externals) => {\n const navigateList = (comp, simulatedEvent, highlighter) => {\n detail.previewing.set(false);\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(menu => {\n Highlighting.getHighlighted(menu).fold(() => {\n highlighter(menu);\n }, () => {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n const onOpenSync = sandbox => {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n };\n const focusBehaviours$1 = focusBehaviours(detail);\n const mapFetch = comp => tdata => tdata.map(data => {\n const menus = values(data.menus);\n const items = bind$3(menus, menu => filter$2(menu.items, item => item.type === 'item'));\n const repState = Representing.getState(comp);\n repState.update(map$2(items, item => item.data));\n return data;\n });\n const getActiveMenu = sandboxComp => Composing.getCurrent(sandboxComp);\n const typeaheadCustomEvents = 'typeaheadevents';\n const behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: {\n mode: 'dataset',\n getDataKey: comp => get$7(comp.element),\n getFallbackEntry: itemString => ({\n value: itemString,\n meta: {}\n }),\n setValue: (comp, data) => {\n set$5(comp.element, detail.model.getDisplayText(data));\n },\n ...detail.initialData.map(d => wrap$1('initialValue', d)).getOr({})\n }\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: (component, _simulatedEvent) => {\n const sandbox = Coupling.getCoupled(component, 'sandbox');\n const focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$7(component.element).length >= detail.minChars) {\n const previousValue = getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu).map(Representing.getValue));\n detail.previewing.set(true);\n const onOpenSync = _sandbox => {\n getActiveMenu(sandbox).each(activeMenu => {\n previousValue.fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(activeMenu);\n }\n }, pv => {\n Highlighting.highlightBy(activeMenu, item => {\n const itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(activeMenu).orThunk(() => {\n Highlighting.highlightFirst(activeMenu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightJustMenu).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n return Optional.none();\n },\n onUp: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu)).map(item => {\n emitWith(comp, itemExecute(), { item });\n return true;\n });\n } else {\n const currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Optional.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => {\n detail.lazyTypeaheadComp.get().each(input => remove$8(input.element, 'aria-activedescendant'));\n Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config(typeaheadCustomEvents, [\n runOnAttached(typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp));\n }),\n runOnDetached(_typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.none());\n }),\n runOnExecute$1(comp => {\n const onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }),\n run$1(itemExecute(), (comp, se) => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n setValueFromItem(detail.model, comp, se.event.item);\n emit(comp, typeaheadCancel());\n detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n Sandboxing.close(sandbox);\n setCursorAtEnd(comp);\n })\n ].concat(detail.dismissOnBlur ? [run$1(postBlur(), typeahead => {\n const sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n const eventOrder = {\n [detachedFromDom()]: [\n Representing.name(),\n Streaming.name(),\n typeaheadCustomEvents\n ],\n ...detail.eventOrder\n };\n return {\n uid: detail.uid,\n dom: dom(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: {\n ...focusBehaviours$1,\n ...augment(detail.typeaheadBehaviours, behaviours)\n },\n eventOrder\n };\n };\n\n const schema$g = constant$1([\n option$3('lazySink'),\n required$1('fetch'),\n defaulted('minChars', 5),\n defaulted('responseTime', 1000),\n onHandler('onOpen'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n defaulted('layouts', Optional.none()),\n defaulted('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted('getDisplayText', itemData => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value),\n defaulted('selectsOver', true),\n defaulted('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted('inputClasses', []),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('matchWidth', true),\n defaulted('useMinWidth', false),\n defaulted('dismissOnBlur', true),\n markers$1(['openClass']),\n option$3('initialData'),\n option$3('listRole'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('lazyTypeaheadComp', () => Cell(Optional.none)),\n customField('previewing', () => Cell(true))\n ].concat(schema$l()).concat(sandboxFields()));\n const parts$b = constant$1([external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: detail => {\n return {\n fakeFocus: true,\n onHighlightItem: (_tmenu, menu, item) => {\n if (!detail.previewing.get()) {\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n getOpt(item.element, 'id').each(id => set$9(input.element, 'aria-activedescendant', id));\n });\n } else {\n detail.lazyTypeaheadComp.get().each(input => {\n attemptSelectOver(detail.model, input, item).fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.dehighlight(menu, item);\n detail.previewing.set(true);\n } else {\n detail.previewing.set(false);\n }\n }, selectOverTextInInput => {\n selectOverTextInInput();\n detail.previewing.set(false);\n });\n });\n }\n },\n onExecute: (_menu, item) => {\n return detail.lazyTypeaheadComp.get().map(typeahead => {\n emitWith(typeahead, itemExecute(), { item });\n return true;\n });\n },\n onHover: (menu, item) => {\n detail.previewing.set(false);\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n const Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n const wrap = delegate => {\n const toCached = () => {\n return wrap(delegate.toCached());\n };\n const bindFuture = f => {\n return wrap(delegate.bind(resA => resA.fold(err => Future.pure(Result.error(err)), a => f(a))));\n };\n const bindResult = f => {\n return wrap(delegate.map(resA => resA.bind(f)));\n };\n const mapResult = f => {\n return wrap(delegate.map(resA => resA.map(f)));\n };\n const mapError = f => {\n return wrap(delegate.map(resA => resA.mapError(f)));\n };\n const foldResult = (whenError, whenValue) => {\n return delegate.map(res => res.fold(whenError, whenValue));\n };\n const withTimeout = (timeout, errorThunk) => {\n return wrap(Future.nu(callback => {\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(result => {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return {\n ...delegate,\n toCached,\n bindFuture,\n bindResult,\n mapResult,\n mapError,\n foldResult,\n withTimeout\n };\n };\n const nu$1 = worker => {\n return wrap(Future.nu(worker));\n };\n const value = value => {\n return wrap(Future.pure(Result.value(value)));\n };\n const error = error => {\n return wrap(Future.pure(Result.error(error)));\n };\n const fromResult = result => {\n return wrap(Future.pure(result));\n };\n const fromFuture = future => {\n return wrap(future.map(Result.value));\n };\n const fromPromise = promise => {\n return nu$1(completer => {\n promise.then(value => {\n completer(Result.value(value));\n }, error => {\n completer(Result.error(error));\n });\n });\n };\n const FutureResult = {\n nu: nu$1,\n wrap,\n pure: value,\n value,\n error,\n fromResult,\n fromFuture,\n fromPromise\n };\n\n const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, tooltip, providersBackstage) => {\n const action = actionOpt.fold(() => ({}), action => ({ action }));\n const common = {\n buttonBehaviours: derive$1([\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n ...tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) }))).toArray(),\n config('button press', [preventDefault('click')])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n },\n ...action\n };\n const domFinal = deepMerge(common, { dom });\n return deepMerge(domFinal, { components });\n };\n const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], btnName) => {\n const tooltipAttributes = spec.tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: {\n ...tooltipAttributes,\n 'data-mce-name': btnName\n }\n };\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, spec.tooltip, providersBackstage);\n };\n const calculateClassesFromButtonType = buttonType => {\n switch (buttonType) {\n case 'primary':\n return ['tox-button'];\n case 'toolbar':\n return ['tox-tbtn'];\n case 'secondary':\n default:\n return [\n 'tox-button',\n 'tox-button--secondary'\n ];\n }\n };\n const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const translatedText = providersBackstage.translate(spec.text);\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = [icon.getOrThunk(() => text$2(translatedText))];\n const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary');\n const baseClasses = calculateClassesFromButtonType(buttonType);\n const classes = [\n ...baseClasses,\n ...icon.isSome() ? ['tox-button--icon'] : [],\n ...spec.borderless ? ['tox-button--naked'] : [],\n ...extraClasses\n ];\n const dom = {\n tag: 'button',\n classes,\n attributes: {\n 'aria-label': translatedText,\n 'data-mce-name': spec.text\n }\n };\n const optTooltip = spec.icon.map(constant$1(translatedText));\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, optTooltip, providersBackstage);\n };\n const renderButton$1 = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n const getAction = (name, buttonType) => comp => {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n console.error('Unknown button type: ', buttonType);\n }\n };\n const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu';\n const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n const isToggleButtonSpec = (spec, buttonType) => buttonType === 'togglebutton';\n const renderToggleButton = (spec, providers, btnName) => {\n var _a, _b;\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const action = comp => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: {\n setIcon: newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n }\n }\n });\n };\n const buttonType = spec.buttonType.getOr(!spec.primary ? 'secondary' : 'primary');\n const buttonSpec = {\n ...spec,\n name: (_a = spec.name) !== null && _a !== void 0 ? _a : '',\n primary: buttonType === 'primary',\n tooltip: spec.tooltip,\n enabled: (_b = spec.enabled) !== null && _b !== void 0 ? _b : false,\n borderless: false\n };\n const tooltipAttributes = buttonSpec.tooltip.or(spec.text).map(tooltip => ({ 'aria-label': providers.translate(tooltip) })).getOr({});\n const buttonTypeClasses = calculateClassesFromButtonType(buttonType !== null && buttonType !== void 0 ? buttonType : 'secondary');\n const showIconAndText = spec.icon.isSome() && spec.text.isSome();\n const dom = {\n tag: 'button',\n classes: [\n ...buttonTypeClasses.concat(spec.icon.isSome() ? ['tox-button--icon'] : []),\n ...spec.active ? ['tox-button--enabled'] : [],\n ...showIconAndText ? ['tox-button--icon-and-text'] : []\n ],\n attributes: {\n ...tooltipAttributes,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n };\n const extraBehaviours = [];\n const translatedText = providers.translate(spec.text.getOr(''));\n const translatedTextComponed = text$2(translatedText);\n const iconComp = componentRenderPipeline([optMemIcon.map(memIcon => memIcon.asSpec())]);\n const components = [\n ...iconComp,\n ...spec.text.isSome() ? [translatedTextComponed] : []\n ];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n const renderFooterButton = (spec, buttonType, backstage) => {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n const getButton = () => memButton;\n const menuButtonSpec = spec;\n const fixedSpec = {\n ...spec,\n type: 'menubutton',\n search: Optional.none(),\n onSetup: api => {\n api.setEnabled(spec.enabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n };\n const memButton = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none(), true, spec.text.or(spec.tooltip).getOrUndefined()));\n return memButton.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n const action = getAction(spec.name, buttonType);\n const buttonSpec = {\n ...spec,\n context: buttonType === 'cancel' ? 'any' : spec.context,\n borderless: false\n };\n return renderButton$1(buttonSpec, action, backstage.shared.providers, []);\n } else if (isToggleButtonSpec(spec, buttonType)) {\n return renderToggleButton(spec, backstage.shared.providers, spec.text.or(spec.tooltip).getOrUndefined());\n } else {\n console.error('Unknown footer button type: ', buttonType);\n throw new Error('Unknown footer button type');\n }\n };\n const renderDialogButton = (spec, providersBackstage) => {\n const action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field({\n factory: Button,\n ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n memory(''),\n ComposingConfigs.self()\n ])\n }));\n };\n\n const separator$1 = { type: 'separator' };\n const toMenuItem = target => ({\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n });\n const staticMenuItem = (title, url) => ({\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n });\n const toMenuItems = targets => map$2(targets, toMenuItem);\n const filterLinkTargets = (type, targets) => filter$2(targets, target => target.type === type);\n const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets));\n const headerTargets = linkInfo => filteredTargets('header', linkInfo.targets);\n const anchorTargets = linkInfo => filteredTargets('anchor', linkInfo.targets);\n const anchorTargetTop = linkInfo => Optional.from(linkInfo.anchorTop).map(url => staticMenuItem('', url)).toArray();\n const anchorTargetBottom = linkInfo => Optional.from(linkInfo.anchorBottom).map(url => staticMenuItem('', url)).toArray();\n const historyTargets = history => map$2(history, url => staticMenuItem(url, url));\n const joinMenuLists = items => {\n return foldl(items, (a, b) => {\n const bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n }, []);\n };\n const filterByQuery = (term, menuItems) => {\n const lowerCaseTerm = term.toLowerCase();\n return filter$2(menuItems, item => {\n var _a;\n const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n const value = (_a = item.value) !== null && _a !== void 0 ? _a : '';\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n const getItems = (fileType, input, urlBackstage) => {\n var _a, _b;\n const urlInputValue = Representing.getValue(input);\n const term = (_b = (_a = urlInputValue === null || urlInputValue === void 0 ? void 0 : urlInputValue.meta) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : urlInputValue.value;\n const info = urlBackstage.getLinkInformation();\n return info.fold(() => [], linkInfo => {\n const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n const errorId = generate$6('aria-invalid');\n const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n const providersBackstage = backstage.shared.providers;\n const updateHistory = component => {\n const urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n const typeaheadSpec = {\n ...initialData.map(initialData => ({ initialData })).getOr({}),\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: input => {\n const items = getItems(spec.filetype, input, urlBackstage);\n const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n return Future.pure(tdata);\n },\n getHotspot: comp => memUrlBox.getOpt(comp),\n onSetValue: (comp, _newValue) => {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1([\n ...urlBackstage.getValidationHandler().map(handler => Invalidating.config({\n getRoot: comp => parentElement(comp.element),\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: (comp, err) => {\n memInvalidIcon.getOpt(comp).each(invalidComp => {\n set$9(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: input => {\n const urlEntry = Representing.getValue(input);\n return FutureResult.nu(completer => {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, validation => {\n if (validation.status === 'invalid') {\n const err = Result.error(validation.message);\n completer(err);\n } else {\n const val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n })).toArray(),\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('urlinput-events', [\n run$1(input(), comp => {\n const currentValue = get$7(comp.element);\n const trimmedValue = currentValue.trim();\n if (trimmedValue !== currentValue) {\n set$5(comp.element, trimmedValue);\n }\n if (spec.filetype === 'file') {\n emitWith(comp, formChangeEvent, { name: spec.name });\n }\n }),\n run$1(change(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(postPaste(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ])\n ]),\n eventOrder: {\n [input()]: [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ]\n },\n model: {\n getDisplayText: itemData => itemData.value,\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: (_menu, component, _entry) => {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: (typeahead, _sandbox, _item, _value) => {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n };\n const pField = FormField.parts.field({\n ...typeaheadSpec,\n factory: Typeahead\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const makeIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providersBackstage.icons);\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n const browseUrlEvent = generate$6('browser.url.event');\n const memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable })])\n });\n const memUrlPickerButton = record(renderButton$1({\n context: spec.context,\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.picker_text.or(spec.label).getOr(''),\n enabled: spec.enabled,\n primary: false,\n buttonType: Optional.none(),\n borderless: true\n }, component => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url']));\n const controlHWrapper = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n ])\n });\n const openUrlPicker = comp => {\n Composing.getCurrent(comp).each(field => {\n const componentData = Representing.getValue(field);\n const urlData = {\n fieldname: spec.name,\n ...componentData\n };\n optUrlPicker.each(picker => {\n picker(urlData).get(chosenData => {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n const renderAlertBanner = (spec, providersBackstage) => {\n const icon = get$3(spec.icon, providersBackstage.icons);\n return Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ spec.level }`\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: !spec.url ? icon : undefined\n },\n components: spec.url ? [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: icon,\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: comp => emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n }),\n buttonBehaviours: derive$1([addFocusableBehaviour()])\n })] : undefined\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n };\n\n const set$1 = (element, status) => {\n element.dom.checked = status;\n };\n const get$2 = element => element.dom.checked;\n\n const renderCheckbox = (spec, providerBackstage, initialData) => {\n const toggleCheckboxHandler = comp => {\n comp.element.dom.click();\n return Optional.some(true);\n };\n const pField = FormField.parts.field({\n factory: { sketch: identity },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({\n disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: component => {\n parentElement(component.element).each(element => add$2(element, 'tox-checkbox--disabled'));\n },\n onEnabled: component => {\n parentElement(component.element).each(element => remove$3(element, 'tox-checkbox--disabled'));\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n withElement(initialData, get$2, set$1),\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label']\n },\n components: [text$2(providerBackstage.translate(spec.label))],\n behaviours: derive$1([Unselecting.config({})])\n });\n const makeIcon = className => {\n const iconName = className === 'checked' ? 'selected' : 'unselected';\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ]\n }, providerBackstage.icons);\n };\n const memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providerBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const renderHtmlPanel = (spec, providersBackstage) => {\n const classes = [\n 'tox-form__group',\n ...spec.stretched ? ['tox-form__group--stretched'] : []\n ];\n const init = config('htmlpanel', [runOnAttached(comp => {\n spec.onInit(comp.element.dom);\n })]);\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html\n },\n containerBehaviours: derive$1([\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element)).each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-normal',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element).filter(current => getOpt(current, 'data-mce-tooltip').isSome())),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n init\n ])\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n init\n ])\n });\n }\n };\n\n const make$2 = render => {\n return (parts, spec, dialogData, backstage, getCompByName) => get$h(spec, 'name').fold(() => render(spec, backstage, Optional.none(), getCompByName), fieldName => parts.field(fieldName, render(spec, backstage, get$h(dialogData, fieldName), getCompByName)));\n };\n const makeIframe = render => (parts, spec, dialogData, backstage, getCompByName) => {\n const iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$2(render)(parts, iframeSpec, dialogData, backstage, getCompByName);\n };\n const factories = {\n bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n label: make$2((spec, backstage, _data, getCompByName) => renderLabel$2(spec, backstage.shared, getCompByName)),\n iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2((spec, backstage) => renderHtmlPanel(spec, backstage.shared.providers)),\n imagepreview: make$2((spec, _, data) => renderImagePreview(spec, data)),\n table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n tree: make$2((spec, backstage) => renderTree(spec, backstage)),\n panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n };\n const noFormParts = {\n field: (_name, spec) => spec,\n record: constant$1([])\n };\n const interpretInForm = (parts, spec, dialogData, oldBackstage, getCompByName) => {\n const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: childSpec => interpretParts(parts, childSpec, dialogData, newBackstage, getCompByName) } });\n return interpretParts(parts, spec, dialogData, newBackstage, getCompByName);\n };\n const interpretParts = (parts, spec, dialogData, backstage, getCompByName) => get$h(factories, spec.type).fold(() => {\n console.error(`Unknown factory type \"${ spec.type }\", defaulting to container: `, spec);\n return spec;\n }, factory => factory(parts, spec, dialogData, backstage, getCompByName));\n const interpretWithoutForm = (spec, dialogData, backstage, getCompByName) => interpretParts(noFormParts, spec, dialogData, backstage, getCompByName);\n\n const labelPrefix = 'layout-inset';\n const westEdgeX = anchor => anchor.x;\n const middleX = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY = anchor => anchor.y;\n const southY = (anchor, element) => anchor.y + anchor.height - element.height;\n const centreY = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const southwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n const southeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n const northwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n const northeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n const north = (anchor, element, bubbles) => nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n const south = (anchor, element, bubbles) => nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n const east = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n const west = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n const lookupPreserveLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return north;\n case 'northeast':\n return northeast;\n case 'northwest':\n return northwest;\n case 'south':\n return south;\n case 'southeast':\n return southeast;\n case 'southwest':\n return southwest;\n case 'east':\n return east;\n case 'west':\n return west;\n }\n };\n const preserve = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n const lookupFlippedLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return south;\n case 'northeast':\n return southeast;\n case 'northwest':\n return southwest;\n case 'south':\n return north;\n case 'southeast':\n return northeast;\n case 'southwest':\n return northwest;\n case 'east':\n return west;\n case 'west':\n return east;\n }\n };\n const flip = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n const bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [northeast],\n onLtr: () => [northwest]\n },\n overrides\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [\n southeast$2,\n southwest$2,\n south$2\n ],\n onLtr: () => [\n southwest$2,\n southeast$2,\n south$2\n ]\n },\n overrides\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getInlineBottomDialogAnchor = (inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n },\n overrides\n });\n const standardAnchor = () => inline ? {\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(0, -getOuter$2(contentAreaElement()), bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n } : {\n type: 'hotspot',\n hotspot: lazyBottomAnchorBar(),\n bubble: nu$5(0, 0, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n };\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n }\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: () => [south$2],\n onLtr: () => [south$2]\n }\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getCursorAnchor = (editor, bodyElement) => () => ({\n type: 'selection',\n root: bodyElement(),\n getSelection: () => {\n const rng = editor.selection.getRng();\n const selectedCells = editor.model.table.getSelectedCells();\n if (selectedCells.length > 1) {\n const firstCell = selectedCells[0];\n const lastCell = selectedCells[selectedCells.length - 1];\n const selectionTableCellRange = {\n firstCell: SugarElement.fromDom(firstCell),\n lastCell: SugarElement.fromDom(lastCell)\n };\n return Optional.some(selectionTableCellRange);\n }\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n });\n const getNodeAnchor$1 = bodyElement => element => ({\n type: 'node',\n root: bodyElement(),\n node: element\n });\n const getAnchors = (editor, lazyAnchorbar, lazyBottomAnchorBar, isToolbarTop) => {\n const useFixedToolbarContainer = useFixedContainer(editor);\n const bodyElement = () => SugarElement.fromDom(editor.getBody());\n const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n inlineBottomDialog: getInlineBottomDialogAnchor(editor.inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(bodyElement)\n };\n };\n\n const colorPicker = editor => (callback, value) => {\n const dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n const hasCustomColors = editor => () => hasCustomColors$1(editor);\n const getColors = editor => id => getColors$2(editor, id);\n const getColorCols = editor => id => getColorCols$1(editor, id);\n const ColorInputBackstage = editor => ({\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n });\n\n const isDraggableModal = editor => () => isDraggableModal$1(editor);\n const DialogBackstage = editor => ({ isDraggableModal: isDraggableModal(editor) });\n\n const HeaderBackstage = editor => {\n const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: () => mode.get() === 'top',\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n const isNestedFormat = format => hasNonNullableKey(format, 'items');\n const isFormatReference = format => hasNonNullableKey(format, 'format');\n const defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Align',\n items: [\n {\n title: 'Left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n const isNestedFormats = format => has$2(format, 'items');\n const isBlockFormat = format => has$2(format, 'block');\n const isInlineFormat = format => has$2(format, 'inline');\n const isSelectorFormat = format => has$2(format, 'selector');\n const mapFormats = userFormats => foldl(userFormats, (acc, fmt) => {\n if (isNestedFormats(fmt)) {\n const result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n const formatNameWithPrefix = `custom-${ formatName }`;\n return {\n customFormats: acc.customFormats.concat([{\n name: formatNameWithPrefix,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatNameWithPrefix,\n icon: fmt.icon\n }])\n };\n } else {\n return {\n ...acc,\n formats: acc.formats.concat(fmt)\n };\n }\n }, {\n customFormats: [],\n formats: []\n });\n const registerCustomFormats = (editor, userFormats) => {\n const result = mapFormats(userFormats);\n const registerFormats = customFormats => {\n each$1(customFormats, fmt => {\n if (!editor.formatter.has(fmt.name)) {\n editor.formatter.register(fmt.name, fmt.format);\n }\n });\n };\n if (editor.formatter) {\n registerFormats(result.customFormats);\n } else {\n editor.on('init', () => {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n const getStyleFormats = editor => getUserStyleFormats(editor).map(userFormats => {\n const registeredUserFormats = registerCustomFormats(editor, userFormats);\n return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n\n const isSeparator$1 = format => {\n const keys$1 = keys(format);\n return keys$1.length === 1 && contains$2(keys$1, 'title');\n };\n const processBasic = (item, isSelectedFor, getPreviewFor) => ({\n ...item,\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n });\n const register$b = (editor, formats, isSelectedFor, getPreviewFor) => {\n const enrichSupported = item => processBasic(item, isSelectedFor, getPreviewFor);\n const enrichMenu = item => {\n const newItems = doEnrich(item.items);\n return {\n ...item,\n type: 'submenu',\n getStyleItems: constant$1(newItems)\n };\n };\n const enrichCustom = item => {\n const formatName = isString(item.name) ? item.name : generate$6(item.title);\n const formatNameWithPrefix = `custom-${ formatName }`;\n const newItem = {\n ...item,\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n const doEnrich = items => map$2(items, item => {\n if (isNestedFormat(item)) {\n return enrichMenu(item);\n } else if (isFormatReference(item)) {\n return enrichSupported(item);\n } else if (isSeparator$1(item)) {\n return {\n ...item,\n type: 'separator'\n };\n } else {\n return enrichCustom(item);\n }\n });\n return doEnrich(formats);\n };\n\n const init$6 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const settingsFormats = Cell([]);\n const eventsFormats = Cell([]);\n const replaceSettings = Cell(false);\n editor.on('PreInit', _e => {\n const formats = getStyleFormats(editor);\n const enriched = register$b(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n });\n editor.on('addStyleModifications', e => {\n const modifications = register$b(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n });\n const getData = () => {\n const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n const fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return { getData };\n };\n\n const TooltipsBackstage = getSink => {\n const tooltipDelay = 300;\n const intervalDelay = tooltipDelay * 0.2;\n let numActiveTooltips = 0;\n const alreadyShowingTooltips = () => numActiveTooltips > 0;\n const getComponents = spec => {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-tooltip__body']\n },\n components: [text$2(spec.tooltipText)]\n }];\n };\n const getConfig = spec => {\n return {\n delayForShow: () => alreadyShowingTooltips() ? intervalDelay : tooltipDelay,\n delayForHide: constant$1(tooltipDelay),\n exclusive: true,\n lazySink: getSink,\n tooltipDom: {\n tag: 'div',\n classes: [\n 'tox-tooltip',\n 'tox-tooltip--up'\n ]\n },\n tooltipComponents: getComponents(spec),\n onShow: (comp, tooltip) => {\n numActiveTooltips++;\n if (spec.onShow) {\n spec.onShow(comp, tooltip);\n }\n },\n onHide: (comp, tooltip) => {\n numActiveTooltips--;\n if (spec.onHide) {\n spec.onHide(comp, tooltip);\n }\n },\n onSetup: spec.onSetup\n };\n };\n return {\n getConfig,\n getComponents\n };\n };\n\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const trim = global$1.trim;\n const hasContentEditableState = value => {\n return node => {\n if (isElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isContentEditableTrue = hasContentEditableState('true');\n const isContentEditableFalse = hasContentEditableState('false');\n const create = (type, title, url, level, attach) => ({\n type,\n title,\n url,\n level,\n attach\n });\n const isChildOfContentEditableTrue = node => {\n let tempNode = node;\n while (tempNode = tempNode.parentNode) {\n const value = tempNode.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(tempNode);\n }\n }\n return false;\n };\n const select = (selector, root) => {\n return map$2(descendants(SugarElement.fromDom(root), selector), element => {\n return element.dom;\n });\n };\n const getElementText = elm => {\n return elm.innerText || elm.textContent;\n };\n const getOrGenerateId = elm => {\n return elm.id ? elm.id : generate$6('h');\n };\n const isAnchor = elm => {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n const isValidAnchor = elm => {\n return isAnchor(elm) && isEditable(elm);\n };\n const isHeader = elm => {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n const isEditable = elm => {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n const isValidHeader = elm => {\n return isHeader(elm) && isEditable(elm);\n };\n const getLevel = elm => {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n const headerTarget = elm => {\n var _a;\n const headerId = getOrGenerateId(elm);\n const attach = () => {\n elm.id = headerId;\n };\n return create('header', (_a = getElementText(elm)) !== null && _a !== void 0 ? _a : '', '#' + headerId, getLevel(elm), attach);\n };\n const anchorTarget = elm => {\n const anchorId = elm.id || elm.name;\n const anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n const getHeaderTargets = elms => {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n const getAnchorTargets = elms => {\n return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n };\n const getTargetElements = elm => {\n const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n const hasTitle = target => {\n return trim(target.title).length > 0;\n };\n const find = elm => {\n const elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n const LinkTargets = { find };\n\n const STORAGE_KEY = 'tinymce-url-history';\n const HISTORY_LENGTH = 5;\n const isHttpUrl = url => isString(url) && /^https?/.test(url);\n const isArrayOfUrl = a => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n const isRecordOfUrlArray = r => isObject(r) && find$4(r, value => !isArrayOfUrl(value)).isNone();\n const getAllHistory = () => {\n const unparsedHistory = global$4.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n let history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n const setAllHistory = history => {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n const getHistory = fileType => {\n const history = getAllHistory();\n return get$h(history, fileType).getOr([]);\n };\n const addToHistory = (url, fileType) => {\n if (!isHttpUrl(url)) {\n return;\n }\n const history = getAllHistory();\n const items = get$h(history, fileType).getOr([]);\n const itemsWithoutUrl = filter$2(items, item => item !== url);\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n const isTruthy = value => !!value;\n const makeMap = value => map$1(global$1.makeMap(value, /[, ]/), isTruthy);\n const getPicker = editor => Optional.from(getFilePickerCallback(editor));\n const getPickerTypes = editor => {\n const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n return getPicker(editor).fold(never, _picker => optFileTypes.fold(always, types => keys(types).length > 0 ? types : false));\n };\n const getPickerSetting = (editor, filetype) => {\n const pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Optional.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n }\n };\n const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map(picker => entry => Future.nu(completer => {\n const handler = (value, meta) => {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n const r = {\n value,\n meta\n };\n completer(r);\n };\n const meta = {\n filetype,\n fieldname: entry.fieldname,\n ...Optional.from(entry.meta).getOr({})\n };\n picker.call(editor, handler, entry.value, meta);\n }));\n const getTextSetting = value => Optional.from(value).filter(isString).getOrUndefined();\n const getLinkInformation = editor => {\n if (!useTypeaheadUrls(editor)) {\n return Optional.none();\n }\n return Optional.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n const getValidationHandler = editor => Optional.from(getFilePickerValidatorHandler(editor));\n const UrlInputBackstage = editor => ({\n getHistory,\n addToHistory,\n getLinkInformation: () => getLinkInformation(editor),\n getValidationHandler: () => getValidationHandler(editor),\n getUrlPicker: filetype => getUrlPicker(editor, filetype)\n });\n\n const init$5 = (lazySinks, editor, lazyAnchorbar, lazyBottomAnchorBar) => {\n const contextMenuState = Cell(false);\n const toolbar = HeaderBackstage(editor);\n const providers = {\n icons: () => editor.ui.registry.getAll().icons,\n menuItems: () => editor.ui.registry.getAll().menuItems,\n translate: global$5.translate,\n isDisabled: () => !editor.ui.isEnabled(),\n getOption: editor.options.get,\n tooltips: TooltipsBackstage(lazySinks.dialog),\n checkUiComponentContext: specContext => {\n const [key, value = ''] = specContext.split(':');\n const contexts = editor.ui.registry.getAll().contexts;\n const enabledInContext = get$h(contexts, key).fold(() => get$h(contexts, 'mode').map(pred => pred('design')).getOr(false), pred => value.charAt(0) === '!' ? !pred(value.slice(1)) : pred(value));\n return {\n contextType: key,\n shouldDisable: !enabledInContext\n };\n }\n };\n const urlinput = UrlInputBackstage(editor);\n const styles = init$6(editor);\n const colorinput = ColorInputBackstage(editor);\n const dialogSettings = DialogBackstage(editor);\n const isContextMenuOpen = () => contextMenuState.get();\n const setContextMenuState = state => contextMenuState.set(state);\n const commonBackstage = {\n shared: {\n providers,\n anchors: getAnchors(editor, lazyAnchorbar, lazyBottomAnchorBar, toolbar.isPositionedAtTop),\n header: toolbar\n },\n urlinput,\n styles,\n colorinput,\n dialog: dialogSettings,\n isContextMenuOpen,\n setContextMenuState\n };\n const getCompByName = _name => Optional.none();\n const popupBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, popupBackstage, getCompByName),\n getSink: lazySinks.popup\n }\n };\n const dialogBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, dialogBackstage, getCompByName),\n getSink: lazySinks.dialog\n }\n };\n return {\n popup: popupBackstage,\n dialog: dialogBackstage\n };\n };\n\n const setup$b = (editor, mothership, uiMotherships) => {\n const broadcastEvent = (name, evt) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastEvent(name, evt);\n });\n };\n const broadcastOn = (channel, message) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastOn([channel], message);\n });\n };\n const fireDismissPopups = evt => broadcastOn(dismissPopups(), { target: evt.target });\n const doc = getDocument();\n const onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n const onTouchmove = bind(doc, 'touchmove', evt => broadcastEvent(documentTouchmove(), evt));\n const onTouchend = bind(doc, 'touchend', evt => broadcastEvent(documentTouchend(), evt));\n const onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n const onMouseup = bind(doc, 'mouseup', evt => {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n const onContentClick = raw => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n const onContentMouseup = raw => {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n const onContentMousedown = () => {\n each$1(editor.editorManager.get(), loopEditor => {\n if (editor !== loopEditor) {\n loopEditor.dispatch('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n const onWindowScroll = evt => broadcastEvent(windowScroll(), fromRawEvent(evt));\n const onWindowResize = evt => {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n const onElementScroll = capture(dos, 'scroll', evt => {\n requestAnimationFrame(() => {\n const c = editor.getContainer();\n if (c !== undefined && c !== null) {\n const optScrollingContext = detectWhenSplitUiMode(editor, mothership.element);\n const scrollers = optScrollingContext.map(sc => [\n sc.element,\n ...sc.others\n ]).getOr([]);\n if (exists(scrollers, s => eq(s, evt.target))) {\n editor.dispatch('ElementScroll', { target: evt.target.dom });\n broadcastEvent(externalElementScroll(), evt);\n }\n }\n });\n });\n const onEditorResize = () => broadcastOn(repositionPopups(), {});\n const onEditorProgress = evt => {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n const onDismissPopups = event => {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n const onFocusIn = event => editor.dispatch('focusin', event);\n const onFocusOut = event => editor.dispatch('focusout', event);\n editor.on('PostRender', () => {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('mousedown', onContentMousedown);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n editor.on('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.addEventListener('focusin', onFocusIn);\n gui.element.dom.addEventListener('focusout', onFocusOut);\n });\n });\n editor.on('remove', () => {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('mousedown', onContentMousedown);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n editor.off('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.removeEventListener('focusin', onFocusIn);\n gui.element.dom.removeEventListener('focusout', onFocusOut);\n });\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n onElementScroll.unbind();\n });\n editor.on('detach', () => {\n each$1([\n mothership,\n ...uiMotherships\n ], detachSystem);\n each$1([\n mothership,\n ...uiMotherships\n ], m => m.destroy());\n });\n };\n\n const parts$a = AlloyParts;\n const partType = PartType;\n\n const schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n const parts$9 = constant$1([itemsPart]);\n const name = constant$1('CustomList');\n\n const factory$f = (detail, components, _spec, _external) => {\n const setItems = (list, items) => {\n getListContainer(list).fold(() => {\n console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, container => {\n const itemComps = Replacing.contents(container);\n const numListsRequired = items.length;\n const numListsToAdd = numListsRequired - itemComps.length;\n const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n const itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, item => Replacing.remove(container, item));\n each$1(itemsToAdd, item => Replacing.append(container, item));\n const builtLists = Replacing.contents(container);\n each$1(builtLists, (item, i) => {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n const getListContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems }\n };\n };\n const CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$f,\n apis: {\n setItems: (apis, list, items) => {\n apis.setItems(list, items);\n }\n }\n });\n\n const schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n const factory$e = (detail, components, _spec, _externals) => {\n const setGroups = (toolbar, groups) => {\n getGroupContainer(toolbar).fold(() => {\n console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, container => {\n Replacing.set(container, groups);\n });\n };\n const getGroupContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: {\n setGroups,\n refresh: noop\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$e,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n const setup$a = noop;\n const isDocked$1 = never;\n const getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$1,\n getBehaviours: getBehaviours$1\n });\n\n const toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n const visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n const scrollFromBehindHeader = (e, containerHeader) => {\n const doc = owner$4(containerHeader);\n const win = defaultView(containerHeader);\n const viewHeight = win.dom.innerHeight;\n const scrollPos = get$c(doc);\n const markerElement = SugarElement.fromDom(e.elm);\n const markerPos = absolute$2(markerElement);\n const markerHeight = get$e(markerElement);\n const markerTop = markerPos.y;\n const markerBottom = markerTop + markerHeight;\n const editorHeaderPos = absolute$3(containerHeader);\n const editorHeaderHeight = get$e(containerHeader);\n const editorHeaderTop = editorHeaderPos.top;\n const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n const y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n const updateIframeContentFlow = header => {\n const getOccupiedHeight = elm => getOuter$2(elm) + (parseInt(get$f(elm, 'margin-top'), 10) || 0) + (parseInt(get$f(elm, 'margin-bottom'), 10) || 0);\n const elm = header.element;\n parentElement(elm).each(parentElem => {\n const padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n const parentWidth = get$d(parentElem);\n set$8(elm, 'width', parentWidth + 'px');\n set$8(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$7(elm, 'width');\n remove$7(parentElem, padding);\n }\n });\n };\n const updateSinkVisibility = (sinkElem, visible) => {\n if (visible) {\n remove$3(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$3(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n const updateEditorClasses = (editor, docked) => {\n const editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$3(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$3(editorContainer, editorStickyOnClass);\n }\n };\n const restoreFocus = (headerElem, focusedElem) => {\n const ownerDoc = owner$4(focusedElem);\n active$1(ownerDoc).filter(activeElm => !eq(focusedElem, activeElm)).filter(activeElm => eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$3(focusedElem));\n };\n const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind(sink => search(sink.element)));\n const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', () => {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', () => {\n lazyHeader().each(comp => {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', e => {\n lazyHeader().each(header => {\n Docking.refresh(header);\n const headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', () => {\n updateEditorClasses(editor, false);\n });\n };\n const isDocked = lazyHeader => lazyHeader().map(Docking.isDocked).getOr(false);\n const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n const getBehaviours = (editor, sharedBackstage) => {\n const focusedElm = value$4();\n const lazySink = sharedBackstage.getSink;\n const runOnSinkElement = f => {\n lazySink().each(sink => f(sink.element));\n };\n const onDockingSwitch = comp => {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(sink => sink.getSystem().broadcastOn([repositionPopups()], {}));\n };\n const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return [\n Focusing.config({}),\n Docking.config({\n contextual: {\n lazyContext: comp => {\n const headerHeight = getOuter$2(comp.element);\n const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n return Optional.from(container).map(c => {\n const box = box$1(SugarElement.fromDom(c));\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boxHeight = box.height - headerHeight;\n const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return bounds(box.x, topBound, box.width, boxHeight);\n }, scrollEnv => {\n const constrainedBounds = constrain(box, getBoundsFrom(scrollEnv));\n const constrainedBoundsY = isDockedMode(comp, 'top') ? constrainedBounds.y : constrainedBounds.y + headerHeight;\n return bounds(constrainedBounds.x, constrainedBoundsY, constrainedBounds.width, constrainedBounds.height - headerHeight);\n });\n });\n },\n onShow: () => {\n runOnSinkElement(elem => updateSinkVisibility(elem, true));\n },\n onShown: comp => {\n runOnSinkElement(elem => remove$2(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]));\n focusedElm.get().each(elem => {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: comp => {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(elem => updateSinkVisibility(elem, false));\n },\n onHidden: () => {\n runOnSinkElement(elem => remove$2(elem, [visibility.transitionClass]));\n },\n ...visibility\n },\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boundsWithoutOffset = win();\n const offset = getStickyToolbarOffset(editor);\n const top = boundsWithoutOffset.y + (isDockedMode(comp, 'top') ? offset : 0);\n const height = boundsWithoutOffset.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return {\n bounds: bounds(boundsWithoutOffset.x, top, boundsWithoutOffset.width, height),\n optScrollEnv: Optional.none()\n };\n }, sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n });\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n }),\n ...additionalBehaviours\n ];\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n const renderHeader = spec => {\n const editor = spec.editor;\n const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n };\n };\n\n const groupToolbarButtonSchema = objOf([\n type,\n requiredOf('items', oneOf([\n arrOfObj([\n name$1,\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n const createGroupToolbarButton = spec => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n\n const baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n defaultedOf('search', false, oneOf([\n boolean,\n objOf([optionString('placeholder')])\n ], x => {\n if (isBoolean(x)) {\n return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none();\n } else {\n return Optional.some(x);\n }\n })),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', () => noop),\n defaultedString('context', 'mode:design')\n ];\n\n const MenuButtonSchema = objOf([\n type,\n ...baseMenuButtonFields\n ]);\n const createMenuButton = spec => asRaw('menubutton', MenuButtonSchema, spec);\n\n const splitButtonSchema = objOf([\n type,\n optionalTooltip,\n optionalIcon,\n optionalText,\n optionalSelect,\n fetch$1,\n onSetup,\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaultedColumns(1),\n onAction,\n onItemAction,\n defaultedString('context', 'mode:design')\n ]);\n const createSplitButton = spec => asRaw('SplitButton', splitButtonSchema, spec);\n\n const factory$d = (detail, spec) => {\n const setMenus = (comp, menus) => {\n const newMenus = map$2(menus, m => {\n const buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: callback => {\n callback(m.getItems());\n },\n context: 'any'\n };\n const internal = createMenuButton(buttonSpec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n const apis = {\n focus: Keying.focusIn,\n setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(component => {\n detail.onSetup(component);\n }),\n run$1(mouseover(), (comp, se) => {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(activeButton => {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(hoveredButton => {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(activeComp => {\n comp.getSystem().getByDom(hoveredButton).each(hoveredComp => {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), (comp, se) => {\n se.event.prevFocus.bind(prev => comp.getSystem().getByDom(prev).toOptional()).each(prev => {\n se.event.newFocus.bind(nu => comp.getSystem().getByDom(nu).toOptional()).each(nu => {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: comp => {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$d,\n name: 'silver.Menubar',\n configFields: [\n required$1('dom'),\n required$1('uid'),\n required$1('onEscape'),\n required$1('backstage'),\n defaulted('onSetup', noop)\n ],\n apis: {\n focus: (apis, comp) => {\n apis.focus(comp);\n },\n setMenus: (apis, comp, menus) => {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n const promotionMessage = '\\u26A1\\ufe0fUpgrade';\n const promotionLink = 'https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_campaign=self_hosted_upgrade_promo&utm_source=tiny&utm_medium=referral';\n const renderPromotion = spec => {\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': promotionLink,\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-hidden': 'true'\n },\n classes: ['tox-promotion-link'],\n innerHtml: promotionMessage\n }\n }]\n };\n };\n\n const owner = 'container';\n const schema$d = [field('slotBehaviours', [])];\n const getPartName = name => '';\n const sketch = sSpec => {\n const parts = (() => {\n const record = [];\n const slot = (name, config) => {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot,\n record: constant$1(record)\n };\n })();\n const spec = sSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName(n)\n }));\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n const make$1 = (detail, components) => {\n const getSlotNames = _ => getAllPartNames(detail);\n const getSlot = (container, key) => getPart(container, detail, key);\n const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map(slot => f(slot, key)).getOr(def);\n const onSlots = f => (container, keys) => {\n each$1(keys, key => f(container, key));\n };\n const doShowing = (comp, _key) => get$g(comp.element, 'aria-hidden') !== 'true';\n const doShow = (comp, key) => {\n if (!doShowing(comp)) {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n const doHide = (comp, key) => {\n if (doShowing(comp)) {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n const isShowing = onSlot(doShowing, false);\n const hideSlot = onSlot(doHide);\n const hideSlots = onSlots(hideSlot);\n const hideAllSlots = container => hideSlots(container, getSlotNames());\n const showSlot = onSlot(doShow);\n const apis = {\n getSlotNames,\n getSlot,\n isShowing,\n hideSlot,\n hideAllSlots,\n showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$4(detail.slotBehaviours),\n apis\n };\n };\n const slotApis = map$1({\n getSlotNames: (apis, c) => apis.getSlotNames(c),\n getSlot: (apis, c, key) => apis.getSlot(c, key),\n isShowing: (apis, c, key) => apis.isShowing(c, key),\n hideSlot: (apis, c, key) => apis.hideSlot(c, key),\n hideAllSlots: (apis, c) => apis.hideAllSlots(c),\n showSlot: (apis, c, key) => apis.showSlot(c, key)\n }, value => makeApi(value));\n const SlotContainer = {\n ...slotApis,\n ...{ sketch }\n };\n\n const sidebarSchema = objOf([\n optionalIcon,\n optionalTooltip,\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n onSetup\n ]);\n const createSidebar = spec => asRaw('sidebar', sidebarSchema, spec);\n\n const setup$8 = editor => {\n const {sidebars} = editor.ui.registry.getAll();\n each$1(keys(sidebars), name => {\n const spec = sidebars[name];\n const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: buttonApi => {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: buttonApi => {\n buttonApi.setActive(isActive());\n const handleToggle = () => buttonApi.setActive(isActive());\n editor.on('ToggleSidebar', handleToggle);\n return () => {\n editor.off('ToggleSidebar', handleToggle);\n };\n },\n context: 'any'\n });\n });\n };\n const getApi = comp => ({ element: () => comp.element.dom });\n const makePanels = (parts, panelConfigs) => {\n const specs = map$2(keys(panelConfigs), name => {\n const spec = panelConfigs[name];\n const bridged = getOrDie(createSidebar(spec));\n return {\n name,\n getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map$2(specs, spec => {\n const editorOffCell = Cell(noop);\n return parts.slot(spec.name, {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane']\n },\n behaviours: SimpleBehaviours.unnamedEvents([\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell),\n run$1(slotVisibility(), (sidepanel, se) => {\n const data = se.event;\n const optSidePanelSpec = find$5(specs, config => config.name === data.name);\n optSidePanelSpec.each(sidePanelSpec => {\n const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n const makeSidebar = panelConfigs => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const setSidebar = (sidebar, panelConfigs, showSidebar) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n Replacing.set(slider, [makeSidebar(panelConfigs)]);\n const configKey = showSidebar === null || showSidebar === void 0 ? void 0 : showSidebar.toLowerCase();\n if (isString(configKey) && has$2(panelConfigs, configKey)) {\n Composing.getCurrent(slider).each(slotContainer => {\n SlotContainer.showSlot(slotContainer, configKey);\n Sliding.immediateGrow(slider);\n remove$7(slider.element, 'width');\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n });\n }\n });\n };\n const updateSidebarRoleOnToggle = (sidebar, sidebarState) => {\n set$9(sidebar, 'role', sidebarState);\n };\n const toggleSidebar = (sidebar, name) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(slotContainer => {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'presentation');\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n });\n });\n };\n const whichSidebar = sidebar => {\n const optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(slider => {\n const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n const optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(slotContainer => find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name)));\n } else {\n return Optional.none();\n }\n });\n };\n const fixSize = generate$6('FixSizeEvent');\n const autoSize = generate$6('AutoSizeEvent');\n const renderSidebar = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'presentation' }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__slider']\n },\n components: [],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Sliding.config({\n dimension: { property: 'width' },\n closedClass: 'tox-sidebar--sliding-closed',\n openClass: 'tox-sidebar--sliding-open',\n shrinkingClass: 'tox-sidebar--sliding-shrinking',\n growingClass: 'tox-sidebar--sliding-growing',\n onShrunk: slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: slider => {\n emit(slider, autoSize);\n },\n onStartGrow: slider => {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: slider => {\n emitWith(slider, fixSize, { width: get$d(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ])\n }],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n config('sidebar-sliding-events', [\n run$1(fixSize, (comp, se) => {\n set$8(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, (comp, _se) => {\n remove$7(comp.element, 'width');\n })\n ])\n ])\n });\n\n const block = (component, config, state, getBusySpec) => {\n set$9(component.element, 'aria-busy', true);\n const root = config.getRoot(component).getOr(component);\n const blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: () => Optional.some(true),\n onShiftTab: () => Optional.some(true)\n }),\n Focusing.config({})\n ]);\n const blockSpec = getBusySpec(root, blockerBehaviours);\n const blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade(blocker));\n if (blocker.hasConfigured(Keying) && config.focus) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(() => Replacing.remove(root, blocker));\n };\n const unblock = (component, config, state) => {\n remove$8(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n const isBlocked = (component, blockingConfig, blockingState) => blockingState.isBlocked();\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock,\n isBlocked: isBlocked\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n const init$4 = () => {\n const blocker = destroyable();\n const blockWith = destroy => {\n blocker.set({ destroy });\n };\n return nu$7({\n readState: blocker.isSet,\n blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n const Blocking = create$4({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n const getBusySpec$1 = providerBackstage => (_root, _behaviours) => ({\n dom: {\n tag: 'div',\n attributes: {\n 'aria-label': providerBackstage.translate('Loading...'),\n 'tabindex': '0'\n },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml('
') }]\n });\n const focusBusyComponent = throbber => Composing.getCurrent(throbber).each(comp => focus$3(comp.element, true));\n const toggleEditorTabIndex = (editor, state) => {\n const tabIndexAttr = 'tabindex';\n const dataTabIndexAttr = `data-mce-${ tabIndexAttr }`;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(iframe => {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(tabIndex => set$9(iframe, dataTabIndexAttr, tabIndex));\n set$9(iframe, tabIndexAttr, -1);\n } else {\n remove$8(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(tabIndex => {\n set$9(iframe, tabIndexAttr, tabIndex);\n remove$8(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n const toggleThrobber = (editor, comp, state, providerBackstage) => {\n const element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n const throbberFocus = Composing.getCurrent(comp).exists(busyComp => hasFocus(busyComp.element));\n Blocking.unblock(comp);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\n }\n };\n const renderThrobber = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n attributes: { 'aria-hidden': 'true' },\n classes: ['tox-throbber'],\n styles: { display: 'none' }\n },\n behaviours: derive$1([\n Replacing.config({}),\n Blocking.config({ focus: false }),\n Composing.config({ find: comp => head(comp.components()) })\n ]),\n components: []\n });\n const isFocusEvent = event => event.type === 'focusin';\n const isPasteBinTarget = event => {\n if (isFocusEvent(event)) {\n const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$1).exists(targetElm => has(targetElm, 'mce-pastebin'));\n } else {\n return false;\n }\n };\n const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n const throbberState = Cell(false);\n const timer = value$4();\n const stealFocus = e => {\n if (throbberState.get() && !isPasteBinTarget(e)) {\n e.preventDefault();\n focusBusyComponent(lazyThrobber());\n editor.editorManager.setActive(editor);\n }\n };\n if (!editor.inline) {\n editor.on('PreInit', () => {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', e => {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n const toggle = state => {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n fireAfterProgressState(editor, state);\n }\n };\n editor.on('ProgressState', e => {\n timer.on(clearTimeout);\n if (isNumber(e.time)) {\n const timerId = global$9.setEditorTimeout(editor, () => toggle(e.state), e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n const generate$1 = (xs, f) => {\n const init = {\n len: 0,\n list: []\n };\n const r = foldl(xs, (b, a) => {\n const value = f(a, b.len);\n return value.fold(constant$1(b), v => ({\n len: v.finish,\n list: b.list.concat([v])\n }));\n }, init);\n return r.list;\n };\n\n const output = (within, extra, withinWidth) => ({\n within,\n extra,\n withinWidth\n });\n const apportion = (units, total, len) => {\n const parray = generate$1(units, (unit, current) => {\n const width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width\n });\n });\n const within = filter$2(parray, unit => unit.finish <= total);\n const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n const extra = parray.slice(within.length);\n return {\n within,\n extra,\n withinWidth\n };\n };\n const toUnit = parray => map$2(parray, unit => unit.element);\n const fitLast = (within, extra, withinWidth) => {\n const fits = toUnit(within.concat(extra));\n return output(fits, [], withinWidth);\n };\n const overflow = (within, extra, overflower, withinWidth) => {\n const fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n const tryFit = (total, units, len) => {\n const divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n const partition = (total, units, len, overflower) => {\n const divide = tryFit(total, units, len).getOrThunk(() => apportion(units, total - len(overflower), len));\n const within = divide.within;\n const extra = divide.extra;\n const withinWidth = divide.withinWidth;\n if (extra.length === 1 && extra[0].width <= len(overflower)) {\n return fitLast(within, extra, withinWidth);\n } else if (extra.length >= 1) {\n return overflow(within, extra, overflower, withinWidth);\n } else {\n return fitAll(within, extra, withinWidth);\n }\n };\n\n const setGroups$1 = (toolbar, storedGroups) => {\n const bGroups = map$2(storedGroups, g => premade(g));\n Toolbar.setGroups(toolbar, bGroups);\n };\n const findFocusedComp = comps => findMap(comps, comp => search(comp.element).bind(focusedElm => comp.getSystem().getByDom(focusedElm).toOptional()));\n const refresh$2 = (toolbar, detail, setOverflow) => {\n const builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n const primary = getPartOrDie(toolbar, detail, 'primary');\n const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$8(primary.element, 'visibility', 'hidden');\n const groups = builtGroups.concat([overflowGroup]);\n const focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n const availableWidth = get$d(primary.element);\n const overflows = partition(availableWidth, detail.builtGroups.get(), comp => Math.ceil(comp.element.dom.getBoundingClientRect().width), overflowGroup);\n if (overflows.extra.length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups$1(primary, overflows.within);\n setOverflow(overflows.extra);\n }\n remove$7(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n const schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', () => Cell([]))\n ]);\n\n const schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', () => Cell([])),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external({\n schema: schema$e(),\n name: 'overflow'\n }),\n external({ name: 'overflow-button' }),\n external({ name: 'overflow-group' })\n ]);\n\n const expandable = constant$1((element, available) => {\n setMax(element, Math.floor(available));\n });\n\n const schema$a = constant$1([\n markers$1(['toggledClass']),\n required$1('lazySink'),\n requiredFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n schema$y(),\n onHandler('onToggled')\n ]);\n const parts$6 = constant$1([\n external({\n name: 'button',\n overrides: detail => ({\n dom: { attributes: { 'aria-haspopup': 'true' } },\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.toggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false,\n onToggled: detail.onToggled\n })])\n })\n }),\n external({\n factory: Toolbar,\n schema: schema$e(),\n name: 'toolbar',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: comp => {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n const shouldSkipFocus = value$4();\n const toggleWithoutFocusing = (button, externals) => {\n shouldSkipFocus.set(true);\n toggle(button, externals);\n shouldSkipFocus.clear();\n };\n const toggle = (button, externals) => {\n const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n if (Sandboxing.isOpen(toolbarSandbox)) {\n Sandboxing.close(toolbarSandbox);\n } else {\n Sandboxing.open(toolbarSandbox, externals.toolbar());\n }\n };\n const position = (button, toolbar, detail, layouts) => {\n const bounds = detail.getBounds.map(bounder => bounder());\n const sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n const setGroups = (button, toolbar, detail, layouts, groups) => {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n const makeSandbox = (button, spec, detail) => {\n const ariaControls = manager();\n const onOpen = (sandbox, toolbar) => {\n const skipFocus = shouldSkipFocus.get().getOr(false);\n detail.fetch().get(groups => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaControls.link(button.element);\n if (!skipFocus) {\n Keying.focusIn(toolbar);\n }\n });\n };\n const onClose = () => {\n Toggling.off(button);\n if (!shouldSkipFocus.get().getOr(false)) {\n Focusing.focus(button);\n }\n ariaControls.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaControls.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: () => {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: never,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n doReposition: () => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n })\n }\n })\n ])\n };\n };\n const factory$c = (detail, components, spec, externals) => ({\n ...Button.sketch({\n ...externals.button(),\n action: button => {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: button => {\n return makeSandbox(button, spec, detail);\n }\n }\n })])\n }),\n apis: {\n setGroups: (button, groups) => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: button => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: button => {\n toggle(button, externals);\n },\n toggleWithoutFocusing: button => {\n toggleWithoutFocusing(button, externals);\n },\n getToolbar: button => {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: button => {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n const FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$c,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: (apis, button, groups) => {\n apis.setGroups(button, groups);\n },\n reposition: (apis, button) => {\n apis.reposition(button);\n },\n toggle: (apis, button) => {\n apis.toggle(button);\n },\n toggleWithoutFocusing: (apis, button) => {\n apis.toggleWithoutFocusing(button);\n },\n getToolbar: (apis, button) => apis.getToolbar(button),\n isOpen: (apis, button) => apis.isOpen(button)\n }\n });\n\n const schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n const parts$5 = constant$1([group({\n name: 'items',\n unit: 'item'\n })]);\n\n const factory$b = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n });\n const ToolbarGroup = composite({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$b\n });\n\n const buildGroups = comps => map$2(comps, g => premade(g));\n const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n refresh$2(toolbar, detail, overflowGroups => {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n const factory$a = (detail, components, spec, externals) => {\n const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: () => Future.nu(resolve => {\n resolve(buildGroups(detail.overflowGroups.get()));\n }),\n layouts: {\n onLtr: () => [\n southwest$2,\n southeast$2\n ],\n onRtl: () => [\n southeast$2,\n southwest$2\n ],\n onBottomLtr: () => [\n northwest$2,\n northeast$2\n ],\n onBottomRtl: () => [\n northeast$2,\n northwest$2\n ]\n },\n getBounds: spec.getOverflowBounds,\n lazySink: detail.lazySink,\n fireDismissalEventInstead: {},\n markers: { toggledClass: detail.markers.overflowToggledClass },\n parts: {\n button: externals['overflow-button'](),\n toolbar: externals.overflow()\n },\n onToggled: (comp, state) => detail[state ? 'onOpened' : 'onClosed'](comp)\n }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: () => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [memFloatingToolbarButton.asSpec()]\n });\n }\n }\n })]),\n apis: {\n setGroups: (toolbar, groups) => {\n detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: toolbar => refresh$1(toolbar, memFloatingToolbarButton, detail),\n toggle: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n toggleWithoutFocusing: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(FloatingToolbarButton.toggleWithoutFocusing);\n },\n isOpen: toolbar => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n reposition: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: toolbar => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$a,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n reposition: (apis, toolbar) => {\n apis.reposition(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n toggleWithoutFocusing: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n }\n });\n\n const schema$8 = constant$1([\n markers$1([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$4 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'overflow',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: comp => {\n getPart(comp, detail, 'overflow-button').each(button => {\n Toggling.off(button);\n });\n detail.onClosed(comp);\n },\n onGrown: comp => {\n detail.onOpened(comp);\n },\n onStartGrow: comp => {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: comp => {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external({\n name: 'overflow-button',\n overrides: detail => ({\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false\n })])\n })\n }),\n external({ name: 'overflow-group' })\n ]);\n\n const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n const toggleToolbar = (toolbar, detail, skipFocus) => {\n getPart(toolbar, detail, 'overflow-button').each(oveflowButton => {\n getPart(toolbar, detail, 'overflow').each(overf => {\n refresh(toolbar, detail);\n if (Sliding.hasShrunk(overf)) {\n const fn = detail.onOpened;\n detail.onOpened = comp => {\n if (!skipFocus) {\n Keying.focusIn(overf);\n }\n fn(comp);\n detail.onOpened = fn;\n };\n } else {\n const fn = detail.onClosed;\n detail.onClosed = comp => {\n if (!skipFocus) {\n Focusing.focus(oveflowButton);\n }\n fn(comp);\n detail.onClosed = fn;\n };\n }\n Sliding.toggleGrow(overf);\n });\n });\n };\n const refresh = (toolbar, detail) => {\n getPart(toolbar, detail, 'overflow').each(overflow => {\n refresh$2(toolbar, detail, groups => {\n const builtGroups = map$2(groups, g => premade(g));\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(button => {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n const factory$9 = (detail, components, spec, externals) => {\n const toolbarToggleEvent = 'alloy.toolbar.toggle';\n const doSetGroups = (toolbar, groups) => {\n const built = map$2(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: toolbar => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [Button.sketch({\n ...externals['overflow-button'](),\n action: _button => {\n emit(toolbar, toolbarToggleEvent);\n }\n })]\n });\n }\n }\n }),\n config('toolbar-toggle-events', [run$1(toolbarToggleEvent, toolbar => {\n toggleToolbar(toolbar, detail, false);\n })])\n ]),\n apis: {\n setGroups: (toolbar, groups) => {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: toolbar => refresh(toolbar, detail),\n toggle: toolbar => {\n toggleToolbar(toolbar, detail, false);\n },\n toggleWithoutFocusing: toolbar => {\n toggleToolbar(toolbar, detail, true);\n },\n isOpen: toolbar => isOpen(toolbar, detail)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$9,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n }\n });\n\n const renderToolbarGroupCommon = toolbarGroup => {\n const attributes = toolbarGroup.title.fold(() => ({}), title => ({ attributes: { title } }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__group'],\n ...attributes\n },\n components: [ToolbarGroup.parts.items({})],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-js:not([disabled]), ' + '.tox-number-input:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n const renderToolbarGroup = toolbarGroup => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n const getToolbarBehaviours = (toolbarSpec, modeName) => {\n const onAttached = runOnAttached(component => {\n const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(() => toolbarSpec.providers.checkUiComponentContext('any').shouldDisable),\n toggleOnReceive(() => toolbarSpec.providers.checkUiComponentContext('any')),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n const renderMoreToolbarCommon = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Optional.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n context: 'any',\n name: 'more',\n icon: Optional.some('more-drawer'),\n enabled: true,\n tooltip: Optional.some('Reveal or hide additional toolbar items'),\n primary: false,\n buttonType: Optional.none(),\n borderless: false\n }, Optional.none(), toolbarSpec.providers, [], 'overflow-button')\n },\n splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n };\n };\n const renderFloatingMoreToolbar = toolbarSpec => {\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n const overflowXOffset = 4;\n const primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch({\n ...baseSpec,\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: () => {\n const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n const headerBounds = absolute$2(headerElem);\n const docElem = documentElement(headerElem);\n const docBounds = absolute$2(docElem);\n const height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: {\n ...baseSpec.parts,\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n },\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' },\n onOpened: comp => toolbarSpec.onToggled(comp, true),\n onClosed: comp => toolbarSpec.onToggled(comp, false)\n });\n };\n const renderSlidingMoreToolbar = toolbarSpec => {\n const primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n const overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch({\n ...baseSpec,\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n toolbarSpec.onToggled(comp, true);\n },\n onClosed: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n toolbarSpec.onToggled(comp, false);\n }\n });\n };\n const renderToolbar = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n });\n };\n\n const baseButtonFields = [\n optionalText,\n optionalIcon,\n optionString('tooltip'),\n defaultedStringEnum('buttonType', 'secondary', [\n 'primary',\n 'secondary'\n ]),\n defaultedBoolean('borderless', false),\n requiredFunction('onAction'),\n defaultedString('context', 'mode:design')\n ];\n const normalButtonFields = [\n ...baseButtonFields,\n text,\n requiredStringEnum('type', ['button'])\n ];\n const toggleButtonFields = [\n ...baseButtonFields,\n defaultedBoolean('active', false),\n requiredStringEnum('type', ['togglebutton'])\n ];\n const schemaWithoutGroupButton = {\n button: normalButtonFields,\n togglebutton: toggleButtonFields\n };\n const groupFields = [\n requiredStringEnum('type', ['group']),\n defaultedArrayOf('buttons', [], choose$1('type', schemaWithoutGroupButton))\n ];\n const viewButtonSchema = choose$1('type', {\n ...schemaWithoutGroupButton,\n group: groupFields\n });\n\n const viewSchema = objOf([\n defaultedArrayOf('buttons', [], viewButtonSchema),\n requiredFunction('onShow'),\n requiredFunction('onHide')\n ]);\n const createView = spec => asRaw('view', viewSchema, spec);\n\n const renderButton = (spec, providers) => {\n var _a, _b;\n const isToggleButton = spec.type === 'togglebutton';\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const getAction = () => comp => {\n const setIcon = newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n };\n const setActive = state => {\n const elm = comp.element;\n if (state) {\n add$2(elm, 'tox-button--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-button--enabled');\n remove$8(elm, 'aria-pressed');\n }\n };\n const isActive = () => has(comp.element, 'tox-button--enabled');\n const focus = () => focus$3(comp.element);\n if (isToggleButton) {\n return spec.onAction({\n setIcon,\n setActive,\n isActive,\n focus\n });\n }\n if (spec.type === 'button') {\n return spec.onAction({ setIcon });\n }\n };\n const action = getAction();\n const buttonSpec = {\n ...spec,\n name: isToggleButton ? spec.text.getOr(spec.icon.getOr('')) : (_a = spec.text) !== null && _a !== void 0 ? _a : spec.icon.getOr(''),\n primary: spec.buttonType === 'primary',\n buttonType: Optional.from(spec.buttonType),\n tooltip: spec.tooltip,\n icon: spec.icon,\n enabled: true,\n borderless: spec.borderless\n };\n const buttonTypeClasses = calculateClassesFromButtonType((_b = spec.buttonType) !== null && _b !== void 0 ? _b : 'secondary');\n const optTranslatedText = isToggleButton ? spec.text.map(providers.translate) : Optional.some(providers.translate(spec.text));\n const optTranslatedTextComponed = optTranslatedText.map(text$2);\n const ariaLabelAttributes = buttonSpec.tooltip.or(optTranslatedText).map(al => ({ 'aria-label': providers.translate(al) })).getOr({});\n const optIconSpec = optMemIcon.map(memIcon => memIcon.asSpec());\n const components = componentRenderPipeline([\n optIconSpec,\n optTranslatedTextComponed\n ]);\n const hasIconAndText = spec.icon.isSome() && optTranslatedTextComponed.isSome();\n const dom = {\n tag: 'button',\n classes: buttonTypeClasses.concat(...spec.icon.isSome() && !hasIconAndText ? ['tox-button--icon'] : []).concat(...hasIconAndText ? ['tox-button--icon-and-text'] : []).concat(...spec.borderless ? ['tox-button--naked'] : []).concat(...spec.type === 'togglebutton' && spec.active ? ['tox-button--enabled'] : []),\n attributes: ariaLabelAttributes\n };\n const extraBehaviours = [];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n\n const renderViewButton = (spec, providers) => renderButton(spec, providers);\n const renderButtonsGroup = (spec, providers) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-view__toolbar__group']\n },\n components: map$2(spec.buttons, button => renderViewButton(button, providers))\n };\n };\n const deviceDetection = detect$1().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const renderViewHeader = spec => {\n let hasGroups = false;\n const endButtons = map$2(spec.buttons, btnspec => {\n if (btnspec.type === 'group') {\n hasGroups = true;\n return renderButtonsGroup(btnspec, spec.providers);\n } else {\n return renderViewButton(btnspec, spec.providers);\n }\n });\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: [\n !hasGroups ? 'tox-view__header' : 'tox-view__toolbar',\n ...isPhone || isTablet ? [\n 'tox-view--mobile',\n 'tox-view--scrolling'\n ] : []\n ]\n },\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n selector: 'button, .tox-button',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n components: hasGroups ? endButtons : [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-start']\n },\n components: []\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-end']\n },\n components: endButtons\n })\n ]\n };\n };\n const renderViewPane = spec => {\n return {\n uid: spec.uid,\n behaviours: derive$1([\n Focusing.config({}),\n Tabstopping.config({})\n ]),\n dom: {\n tag: 'div',\n classes: ['tox-view__pane']\n }\n };\n };\n const factory$8 = (detail, components, _spec, _externals) => {\n const apis = {\n getPane: comp => parts$a.getPart(comp, detail, 'pane'),\n getOnShow: _comp => detail.viewConfig.onShow,\n getOnHide: _comp => detail.viewConfig.onHide\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'cyclic',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n apis\n };\n };\n var View = composite({\n name: 'silver.View',\n configFields: [required$1('viewConfig')],\n partFields: [\n optional({\n factory: { sketch: renderViewHeader },\n schema: [\n required$1('buttons'),\n required$1('providers')\n ],\n name: 'header'\n }),\n optional({\n factory: { sketch: renderViewPane },\n schema: [],\n name: 'pane'\n })\n ],\n factory: factory$8,\n apis: {\n getPane: (apis, comp) => apis.getPane(comp),\n getOnShow: (apis, comp) => apis.getOnShow(comp),\n getOnHide: (apis, comp) => apis.getOnHide(comp)\n }\n });\n\n const makeViews = (parts, viewConfigs, providers) => {\n return mapToArray(viewConfigs, (config, name) => {\n const internalViewConfig = getOrDie(createView(config));\n return parts.slot(name, View.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view']\n },\n viewConfig: internalViewConfig,\n components: [\n ...internalViewConfig.buttons.length > 0 ? [View.parts.header({\n buttons: internalViewConfig.buttons,\n providers\n })] : [],\n View.parts.pane({})\n ]\n }));\n });\n };\n const makeSlotContainer = (viewConfigs, providers) => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap__slot-container']\n },\n components: makeViews(parts, viewConfigs, providers),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const getCurrentName = slotContainer => {\n return find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name));\n };\n const hideContainer = comp => {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n };\n const showContainer = comp => {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n };\n const makeViewInstanceApi = slot => ({ getContainer: constant$1(slot) });\n const runOnPaneWithInstanceApi = (slotContainer, name, get) => {\n SlotContainer.getSlot(slotContainer, name).each(view => {\n View.getPane(view).each(pane => {\n const onCallback = get(view);\n onCallback(makeViewInstanceApi(pane.element.dom));\n });\n });\n };\n const runOnShow = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnShow);\n const runOnHide = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnHide);\n const factory$7 = (detail, spec) => {\n const setViews = (comp, viewConfigs) => {\n Replacing.set(comp, [makeSlotContainer(viewConfigs, spec.backstage.shared.providers)]);\n };\n const whichView = comp => {\n return Composing.getCurrent(comp).bind(getCurrentName);\n };\n const toggleView = (comp, showMainView, hideMainView, name) => {\n return Composing.getCurrent(comp).exists(slotContainer => {\n const optCurrentSlotName = getCurrentName(slotContainer);\n const isTogglingCurrentView = optCurrentSlotName.exists(current => name === current);\n const exists = SlotContainer.getSlot(slotContainer, name).isSome();\n if (exists) {\n SlotContainer.hideAllSlots(slotContainer);\n if (!isTogglingCurrentView) {\n hideMainView();\n showContainer(comp);\n SlotContainer.showSlot(slotContainer, name);\n runOnShow(slotContainer, name);\n } else {\n hideContainer(comp);\n showMainView();\n }\n optCurrentSlotName.each(prevName => runOnHide(slotContainer, prevName));\n }\n return exists;\n });\n };\n const apis = {\n setViews,\n whichView,\n toggleView\n };\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap'],\n attributes: { 'aria-hidden': 'true' },\n styles: { display: 'none' }\n },\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ]),\n apis\n };\n };\n var ViewWrapper = single({\n factory: factory$7,\n name: 'silver.ViewWrapper',\n configFields: [required$1('backstage')],\n apis: {\n setViews: (apis, comp, views) => apis.setViews(comp, views),\n toggleView: (apis, comp, outerContainer, editorCont, name) => apis.toggleView(comp, outerContainer, editorCont, name),\n whichView: (apis, comp) => apis.whichView(comp)\n }\n });\n\n const factory$6 = (detail, components, _spec) => {\n let toolbarDrawerOpenState = false;\n const toggleStatusbar = editorContainer => {\n sibling(editorContainer, '.tox-statusbar').each(statusBar => {\n if (get$f(statusBar, 'display') === 'none' && get$g(statusBar, 'aria-hidden') === 'true') {\n remove$7(statusBar, 'display');\n remove$8(statusBar, 'aria-hidden');\n } else {\n set$8(statusBar, 'display', 'none');\n set$9(statusBar, 'aria-hidden', 'true');\n }\n });\n };\n const apis = {\n getSocket: comp => {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: (comp, panelConfigs, showSidebar) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => setSidebar(sidebar, panelConfigs, showSidebar));\n },\n toggleSidebar: (comp, name) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => toggleSidebar(sidebar, name));\n },\n whichSidebar: comp => {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: comp => {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: comp => {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: (comp, groups) => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n const renderedGroups = map$2(groups, renderToolbarGroup);\n toolbar.getApis().setGroups(toolbar, renderedGroups);\n });\n },\n setToolbars: (comp, toolbars) => {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(mToolbar => {\n const renderedToolbars = map$2(toolbars, g => map$2(g, renderToolbarGroup));\n CustomList.setItems(mToolbar, renderedToolbars);\n });\n },\n refreshToolbar: comp => {\n const toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(toolbar => toolbar.getApis().refresh(toolbar));\n },\n toggleToolbarDrawer: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggle, toggle => toggle(toolbar));\n });\n },\n toggleToolbarDrawerWithoutFocusing: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggleWithoutFocusing, toggleWithoutFocusing => toggleWithoutFocusing(toolbar));\n });\n },\n isToolbarDrawerToggled: comp => {\n return parts$a.getPart(comp, detail, 'toolbar').bind(toolbar => Optional.from(toolbar.getApis().isOpen).map(isOpen => isOpen(toolbar))).getOr(false);\n },\n getThrobber: comp => {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: comp => {\n const optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(() => parts$a.getPart(comp, detail, 'multiple-toolbar'));\n optToolbar.each(toolbar => {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: (comp, menus) => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: comp => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.focus(menubar);\n });\n },\n setViews: (comp, viewConfigs) => {\n parts$a.getPart(comp, detail, 'viewWrapper').each(wrapper => {\n ViewWrapper.setViews(wrapper, viewConfigs);\n });\n },\n toggleView: (comp, name) => {\n return parts$a.getPart(comp, detail, 'viewWrapper').exists(wrapper => ViewWrapper.toggleView(wrapper, () => apis.showMainView(comp), () => apis.hideMainView(comp), name));\n },\n whichView: comp => {\n return parts$a.getPart(comp, detail, 'viewWrapper').bind(ViewWrapper.whichView).getOrNull();\n },\n hideMainView: comp => {\n toolbarDrawerOpenState = apis.isToolbarDrawerToggled(comp);\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n });\n },\n showMainView: comp => {\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n behaviours: detail.behaviours\n };\n };\n const partMenubar = partType.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$1('backstage')]\n });\n const toolbarFactory = spec => {\n if (spec.type === ToolbarMode$1.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode$1.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n const partMultipleToolbar = partType.optional({\n factory: {\n sketch: spec => CustomList.sketch({\n uid: spec.uid,\n dom: spec.dom,\n listBehaviours: derive$1([Keying.config({\n mode: 'acyclic',\n selector: '.tox-toolbar'\n })]),\n makeItem: () => renderToolbar({\n type: spec.type,\n uid: generate$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n }\n }),\n setupItem: (_mToolbar, tc, data, _index) => {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n })\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n const partToolbar = partType.optional({\n factory: {\n sketch: spec => {\n const renderer = toolbarFactory(spec);\n const toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n },\n onToggled: (_comp, state) => spec.onToolbarToggled(state),\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape'),\n required$1('getSink')\n ]\n });\n const partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n const partPromotion = partType.optional({\n factory: { sketch: renderPromotion },\n name: 'promotion',\n schema: [required$1('dom')]\n });\n const partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n const partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n const partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\n });\n const partViewWrapper = partType.optional({\n factory: ViewWrapper,\n name: 'viewWrapper',\n schema: [required$1('backstage')]\n });\n const renderEditorContainer = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: spec.components\n });\n const partEditorContainer = partType.optional({\n factory: { sketch: renderEditorContainer },\n name: 'editorContainer',\n schema: []\n });\n var OuterContainer = composite({\n name: 'OuterContainer',\n factory: factory$6,\n configFields: [\n required$1('dom'),\n required$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partPromotion,\n partThrobber,\n partViewWrapper,\n partEditorContainer\n ],\n apis: {\n getSocket: (apis, comp) => {\n return apis.getSocket(comp);\n },\n setSidebar: (apis, comp, panelConfigs, showSidebar) => {\n apis.setSidebar(comp, panelConfigs, showSidebar);\n },\n toggleSidebar: (apis, comp, name) => {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: (apis, comp) => {\n return apis.whichSidebar(comp);\n },\n getHeader: (apis, comp) => {\n return apis.getHeader(comp);\n },\n getToolbar: (apis, comp) => {\n return apis.getToolbar(comp);\n },\n setToolbar: (apis, comp, groups) => {\n apis.setToolbar(comp, groups);\n },\n setToolbars: (apis, comp, toolbars) => {\n apis.setToolbars(comp, toolbars);\n },\n refreshToolbar: (apis, comp) => {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: (apis, comp) => {\n apis.toggleToolbarDrawer(comp);\n },\n toggleToolbarDrawerWithoutFocusing: (apis, comp) => {\n apis.toggleToolbarDrawerWithoutFocusing(comp);\n },\n isToolbarDrawerToggled: (apis, comp) => {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: (apis, comp) => {\n return apis.getThrobber(comp);\n },\n setMenubar: (apis, comp, menus) => {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: (apis, comp) => {\n apis.focusMenubar(comp);\n },\n focusToolbar: (apis, comp) => {\n apis.focusToolbar(comp);\n },\n setViews: (apis, comp, views) => {\n apis.setViews(comp, views);\n },\n toggleView: (apis, comp, name) => {\n return apis.toggleView(comp, name);\n },\n whichView: (apis, comp) => {\n return apis.whichView(comp);\n }\n }\n });\n\n const defaultMenubar = 'file edit view insert format tools table help';\n const defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | importword exportpdf exportword | export print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed inserttemplate codesample inserttable accordion math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'aidialog aishortcuts | spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code typography wordcount addtemplate'\n },\n table: {\n title: 'Table',\n items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n },\n help: {\n title: 'Help',\n items: 'help'\n }\n };\n const make = (menu, registry, editor) => {\n const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: () => bind$3(menu.items, i => {\n const itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, removedMenuItem => removedMenuItem === itemName)) {\n return [];\n } else if (itemName === 'separator' || itemName === '|') {\n return [{ type: 'separator' }];\n } else if (registry.menuItems[itemName]) {\n return [registry.menuItems[itemName]];\n } else {\n return [];\n }\n })\n };\n };\n const parseItemsString = items => {\n return items.split(' ');\n };\n const identifyMenus = (editor, registry) => {\n const rawMenuData = {\n ...defaultMenus,\n ...registry.menus\n };\n const userDefinedMenus = keys(registry.menus).length > 0;\n const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n const validMenus = filter$2(menubar, menuName => {\n const isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$h(registry.menus, menuName).exists(menu => has$2(menu, 'items'));\n } else {\n return isDefaultMenu;\n }\n });\n const menus = map$2(validMenus, menuName => {\n const menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(menus, menu => {\n const isNotSeparator = item => isString(item) || item.type !== 'separator';\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n const fireSkinLoaded = editor => {\n const done = () => {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return () => {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n\n const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl));\n return styleSheetLoader.load(stylesheetUrl);\n };\n const loadRawCss = (editor, key, css, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unloadRawCss(key));\n return styleSheetLoader.loadRawCss(key, css);\n };\n const loadUiSkins = async (editor, skinUrl) => {\n const skinResourceIdentifier = getSkinUrlOption(editor).getOr('default');\n const skinUiCss = 'ui/' + skinResourceIdentifier + '/skin.css';\n const css = tinymce.Resource.get(skinUiCss);\n if (isString(css)) {\n loadRawCss(editor, skinUiCss, css, editor.ui.styleSheetLoader);\n } else {\n const suffix = editor.editorManager.suffix;\n const skinUiCss = skinUrl + `/skin${ suffix }.css`;\n return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n }\n };\n const loadShadowDomUiSkins = async (editor, skinUrl) => {\n const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (isInShadowRoot$1) {\n const skinResourceIdentifier = getSkinUrlOption(editor).getOr('default');\n const shadowDomSkinCss = 'ui/' + skinResourceIdentifier + '/skin.shadowdom.css';\n const css = tinymce.Resource.get(shadowDomSkinCss);\n if (isString(css)) {\n loadRawCss(editor, shadowDomSkinCss, css, global$8.DOM.styleSheetLoader);\n } else {\n const suffix = editor.editorManager.suffix;\n const shadowDomSkinCss = skinUrl + `/skin.shadowdom${ suffix }.css`;\n return loadStylesheet(editor, shadowDomSkinCss, global$8.DOM.styleSheetLoader);\n }\n }\n };\n const loadUrlSkin = async (isInline, editor) => {\n const unbundled = () => {\n const skinResourceIdentifier = getSkinUrl(editor);\n const suffix = editor.editorManager.suffix;\n if (skinResourceIdentifier) {\n editor.contentCSS.push(skinResourceIdentifier + (isInline ? '/content.inline' : '/content') + `${ suffix }.css`);\n }\n };\n getSkinUrlOption(editor).fold(unbundled, skinUrl => {\n const skinContentCss = 'ui/' + skinUrl + (isInline ? '/content.inline' : '/content') + '.css';\n const css = tinymce.Resource.get(skinContentCss);\n if (isString(css)) {\n loadRawCss(editor, skinContentCss, css, editor.ui.styleSheetLoader);\n } else {\n unbundled();\n }\n });\n const skinUrl = getSkinUrl(editor);\n if (!isSkinDisabled(editor) && isString(skinUrl)) {\n return Promise.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then();\n }\n };\n const loadSkin = (isInline, editor) => {\n return loadUrlSkin(isInline, editor).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n };\n const iframe = curry(loadSkin, false);\n const inline = curry(loadSkin, true);\n\n const makeTooltipText = (editor, labelWithPlaceholder, value) => isEmpty(value) ? editor.translate(labelWithPlaceholder) : editor.translate([\n labelWithPlaceholder,\n editor.translate(value)\n ]);\n\n const generateSelectItems = (backstage, spec) => {\n const generateItem = (rawItem, response, invalid, value) => {\n const translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Optional.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n const items = bind$3(rawItem.getStyleItems(), si => validate(si, response, value));\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n enabled: items.length > 0,\n getSubmenuItems: () => bind$3(rawItem.getStyleItems(), si => validate(si, response, value))\n });\n }\n } else {\n return Optional.some({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n enabled: !invalid,\n onAction: spec.onAction(rawItem),\n ...rawItem.getStylePreview().fold(() => ({}), preview => ({ meta: { style: preview } }))\n });\n }\n };\n const validate = (item, response, value) => {\n const invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n const validateItems = preItems => {\n const value = spec.getCurrentValue();\n const response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, item => validate(item, response, value));\n };\n const getFetch = (backstage, getStyleItems) => (comp, callback) => {\n const preItems = getStyleItems();\n const items = validateItems(preItems);\n const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n callback(menu);\n };\n return {\n validateItems,\n getFetch\n };\n };\n const createMenuItems = (backstage, spec) => {\n const dataset = spec.dataset;\n const getStyleItems = dataset.type === 'basic' ? () => map$2(dataset.data, d => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : dataset.getData;\n return {\n items: generateSelectItems(backstage, spec),\n getStyleItems\n };\n };\n const createSelectButton = (editor, backstage, spec, getTooltip, textUpdateEventName, btnName) => {\n const {items, getStyleItems} = createMenuItems(backstage, spec);\n const tooltipString = Cell(spec.tooltip);\n const getApi = comp => ({\n getComponent: constant$1(comp),\n setTooltip: tooltip => {\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const onSetup = api => {\n const handler = e => api.setTooltip(makeTooltipText(editor, getTooltip(e.value), e.value));\n editor.on(textUpdateEventName, handler);\n return composeUnbinders(onSetupEvent(editor, 'NodeChange', api => {\n const comp = api.getComponent();\n spec.updateText(comp);\n Disabling.set(api.getComponent(), !editor.selection.isEditable());\n })(api), () => editor.off(textUpdateEventName, handler));\n };\n return renderCommonDropdown({\n context: 'mode:design',\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n ariaLabel: Optional.some(spec.tooltip),\n tooltip: Optional.none(),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup,\n getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: [Tooltipping.config({\n ...backstage.shared.providers.tooltips.getConfig({\n tooltipText: backstage.shared.providers.translate(spec.tooltip),\n onShow: comp => {\n if (spec.tooltip !== tooltipString.get()) {\n const translatedTooltip = backstage.shared.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, backstage.shared.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n })]\n }, 'tox-tbtn', backstage.shared, btnName);\n };\n\n const process = rawFormats => map$2(rawFormats, item => {\n let title = item, format = item;\n const values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title,\n format\n };\n });\n const buildBasicStaticDataset = data => ({\n type: 'basic',\n data\n });\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n const split = (rawFormats, delimiter) => {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n const buildBasicSettingsDataset = (editor, settingName, delimiter) => {\n const rawFormats = editor.options.get(settingName);\n const data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data\n };\n };\n\n const menuTitle$4 = 'Align';\n const getTooltipPlaceholder$4 = constant$1('Alignment {0}');\n const fallbackAlignment = 'left';\n const alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n const getSpec$4 = editor => {\n const getMatchingValue = () => find$5(alignMenuItems, item => editor.formatter.match(item.format));\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = _format => Optional.none;\n const updateSelectMenuIcon = comp => {\n const match = getMatchingValue();\n const alignment = match.fold(constant$1(fallbackAlignment), item => item.title.toLowerCase());\n emitWith(comp, updateMenuIcon, { icon: `align-${ alignment }` });\n fireAlignTextUpdate(editor, { value: alignment });\n };\n const dataset = buildBasicStaticDataset(alignMenuItems);\n const onAction = rawItem => () => find$5(alignMenuItems, item => item.format === rawItem.format).each(item => editor.execCommand(item.command));\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$4(), fallbackAlignment),\n text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuIcon,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor), getTooltipPlaceholder$4, 'AlignTextUpdate', 'align');\n const createAlignMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$4(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate(menuTitle$4),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const findNearest = (editor, getStyles) => {\n const styles = getStyles();\n const formats = map$2(styles, style => style.format);\n return Optional.from(editor.formatter.closest(formats)).bind(fmt => find$5(styles, data => data.format === fmt));\n };\n\n const menuTitle$3 = 'Blocks';\n const getTooltipPlaceholder$3 = constant$1('Block {0}');\n const fallbackFormat = 'Paragraph';\n const getSpec$3 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n if (fmt) {\n return Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n } else {\n return Optional.none();\n }\n };\n const updateSelectMenuText = comp => {\n const detectedFormat = findNearest(editor, () => dataset.data);\n const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n emitWith(comp, updateMenuText, { text });\n fireBlocksTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$3(), fallbackFormat),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor), getTooltipPlaceholder$3, 'BlocksTextUpdate', 'blocks');\n const createBlocksMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blocks', {\n text: menuTitle$3,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle$2 = 'Fonts';\n const getTooltipPlaceholder$2 = constant$1('Font {0}');\n const systemFont = 'System Font';\n const systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n const splitFonts = fontFamily => {\n const fonts = fontFamily.split(/\\s*,\\s*/);\n return map$2(fonts, font => font.replace(/^['\"]+|['\"]+$/g, ''));\n };\n const matchesStack = (fonts, stack) => stack.length > 0 && forall(stack, font => fonts.indexOf(font.toLowerCase()) > -1);\n const isSystemFontStack = (fontFamily, userStack) => {\n if (fontFamily.indexOf('-apple-system') === 0 || userStack.length > 0) {\n const fonts = splitFonts(fontFamily.toLowerCase());\n return matchesStack(fonts, systemStackFonts) || matchesStack(fonts, userStack);\n } else {\n return false;\n }\n };\n const getSpec$2 = editor => {\n const getMatchingValue = () => {\n const getFirstFont = fontFamily => fontFamily ? splitFonts(fontFamily)[0] : '';\n const fontFamily = editor.queryCommandValue('FontName');\n const items = dataset.data;\n const font = fontFamily ? fontFamily.toLowerCase() : '';\n const userStack = getDefaultFontStack(editor);\n const matchOpt = find$5(items, item => {\n const format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(() => {\n return someIf(isSystemFontStack(font, userStack), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt,\n font: fontFamily\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = item => () => Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, font} = getMatchingValue();\n const text = matchOpt.fold(constant$1(font), item => item.title);\n emitWith(comp, updateMenuText, { text });\n fireFontFamilyTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$2(), systemFont),\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor), getTooltipPlaceholder$2, 'FontFamilyTextUpdate', 'fontfamily');\n const createFontFamilyMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontfamily', {\n text: backstage.shared.providers.translate(menuTitle$2),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n const normalise = (input, accepted) => parse(input, accepted).map(({value, unit}) => value + unit);\n\n const Keys = {\n tab: constant$1(9),\n escape: constant$1(27),\n enter: constant$1(13),\n backspace: constant$1(8),\n delete: constant$1(46),\n left: constant$1(37),\n up: constant$1(38),\n right: constant$1(39),\n down: constant$1(40),\n space: constant$1(32),\n home: constant$1(36),\n end: constant$1(35),\n pageUp: constant$1(33),\n pageDown: constant$1(34)\n };\n\n const createBespokeNumberInput = (editor, backstage, spec, btnName) => {\n let currentComp = Optional.none();\n const getValueFromCurrentComp = comp => comp.map(alloyComp => Representing.getValue(alloyComp)).getOr('');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode', api => {\n const comp = api.getComponent();\n currentComp = Optional.some(comp);\n spec.updateInputValue(comp);\n Disabling.set(comp, !editor.selection.isEditable());\n });\n const getApi = comp => ({ getComponent: constant$1(comp) });\n const editorOffCell = Cell(noop);\n const customEvents = generate$6('custom-number-input-events');\n const changeValue = (f, fromInput, focusBack) => {\n const text = getValueFromCurrentComp(currentComp);\n const newValue = spec.getNewValue(text, f);\n const lenghtDelta = text.length - `${ newValue }`.length;\n const oldStart = currentComp.map(comp => comp.element.dom.selectionStart - lenghtDelta);\n const oldEnd = currentComp.map(comp => comp.element.dom.selectionEnd - lenghtDelta);\n spec.onAction(newValue, focusBack);\n currentComp.each(comp => {\n Representing.setValue(comp, newValue);\n if (fromInput) {\n oldStart.each(oldStart => comp.element.dom.selectionStart = oldStart);\n oldEnd.each(oldEnd => comp.element.dom.selectionEnd = oldEnd);\n }\n });\n };\n const decrease = (fromInput, focusBack) => changeValue((n, s) => n - s, fromInput, focusBack);\n const increase = (fromInput, focusBack) => changeValue((n, s) => n + s, fromInput, focusBack);\n const goToParent = comp => parentElement(comp.element).fold(Optional.none, parent => {\n focus$3(parent);\n return Optional.some(true);\n });\n const focusInput = comp => {\n if (hasFocus(comp.element)) {\n firstChild(comp.element).each(input => focus$3(input));\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n };\n const makeStepperButton = (action, title, tooltip, classes) => {\n const editorOffCellStepButton = Cell(noop);\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n const altExecuting = generate$6('altExecuting');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode', api => {\n Disabling.set(api.getComponent(), !editor.selection.isEditable());\n });\n const onClick = comp => {\n if (!Disabling.isDisabled(comp)) {\n action(true);\n }\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n attributes: {\n 'aria-label': translatedTooltip,\n 'data-mce-name': title\n },\n classes: classes.concat(title)\n },\n components: [renderIconFromPack$1(title, backstage.shared.providers.icons)],\n buttonBehaviours: derive$1([\n Disabling.config({}),\n Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: translatedTooltip })),\n config(altExecuting, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCellStepButton),\n onControlDetached({ getApi }, editorOffCellStepButton),\n run$1(keydown(), (comp, se) => {\n if (se.event.raw.keyCode === Keys.space() || se.event.raw.keyCode === Keys.enter()) {\n if (!Disabling.isDisabled(comp)) {\n action(false);\n }\n }\n }),\n run$1(click(), onClick),\n run$1(touchend(), onClick)\n ])\n ]),\n eventOrder: {\n [keydown()]: [\n altExecuting,\n 'keying'\n ],\n [click()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [touchend()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n altExecuting,\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n altExecuting,\n 'tooltipping'\n ]\n }\n });\n };\n const memMinus = record(makeStepperButton(focusBack => decrease(false, focusBack), 'minus', 'Decrease font size', []));\n const memPlus = record(makeStepperButton(focusBack => increase(false, focusBack), 'plus', 'Increase font size', []));\n const memInput = record({\n dom: {\n tag: 'div',\n classes: ['tox-input-wrapper']\n },\n components: [Input.sketch({\n inputBehaviours: derive$1([\n Disabling.config({}),\n config(customEvents, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCell),\n onControlDetached({ getApi }, editorOffCell)\n ]),\n config('input-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n Representing.setValue(comp, se.event.text);\n }),\n run$1(focusout(), comp => {\n spec.onAction(Representing.getValue(comp));\n }),\n run$1(change(), comp => {\n spec.onAction(Representing.getValue(comp));\n })\n ]),\n Keying.config({\n mode: 'special',\n onEnter: _comp => {\n changeValue(identity, true, true);\n return Optional.some(true);\n },\n onEscape: goToParent,\n onUp: _comp => {\n increase(true, false);\n return Optional.some(true);\n },\n onDown: _comp => {\n decrease(true, false);\n return Optional.some(true);\n },\n onLeft: (_comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (_comp, se) => {\n se.cut();\n return Optional.none();\n }\n })\n ])\n })],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEnter: focusInput,\n onSpace: focusInput,\n onEscape: goToParent\n }),\n config('input-wrapper-events', [run$1(mouseover(), comp => {\n each$1([\n memMinus,\n memPlus\n ], button => {\n const buttonNode = SugarElement.fromDom(button.get(comp).element.dom);\n if (hasFocus(buttonNode)) {\n blur$1(buttonNode);\n }\n });\n })])\n ])\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-number-input'],\n attributes: { ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {} }\n },\n components: [\n memMinus.asSpec(),\n memInput.asSpec(),\n memPlus.asSpec()\n ],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode,\n cycles: false,\n selector: 'button, .tox-input-wrapper',\n onEscape: wrapperComp => {\n if (hasFocus(wrapperComp.element)) {\n return Optional.none();\n } else {\n focus$3(wrapperComp.element);\n return Optional.some(true);\n }\n }\n })\n ])\n };\n };\n\n const menuTitle$1 = 'Font sizes';\n const getTooltipPlaceholder$1 = constant$1('Font size {0}');\n const fallbackFontSize = '12pt';\n const legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n const keywordFontSizes = {\n 'xx-small': '7pt',\n 'x-small': '8pt',\n 'small': '10pt',\n 'medium': '12pt',\n 'large': '14pt',\n 'x-large': '18pt',\n 'xx-large': '24pt'\n };\n const round = (number, precision) => {\n const factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n const toPt = (fontSize, precision) => {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$h(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n const toLegacy = fontSize => get$h(legacyFontSizes, fontSize).getOr('');\n const getSpec$1 = editor => {\n const getMatchingValue = () => {\n let matchOpt = Optional.none();\n const items = dataset.data;\n const fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n const pt = toPt(fontSize, precision);\n const legacy = toLegacy(pt);\n matchOpt = find$5(items, item => item.format === fontSize || item.format === pt || item.format === legacy);\n }\n }\n return {\n matchOpt,\n size: fontSize\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = constant$1(Optional.none);\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, size} = getMatchingValue();\n const text = matchOpt.fold(constant$1(size), match => match.title);\n emitWith(comp, updateMenuText, { text });\n fireFontSizeTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$1(), fallbackFontSize),\n text: Optional.some(fallbackFontSize),\n icon: Optional.none(),\n isSelectedFor,\n getPreviewFor,\n getCurrentValue,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor), getTooltipPlaceholder$1, 'FontSizeTextUpdate', 'fontsize');\n const getConfigFromUnit = unit => {\n var _a;\n const baseConfig = { step: 1 };\n const configs = {\n em: { step: 0.1 },\n cm: { step: 0.1 },\n in: { step: 0.1 },\n pc: { step: 0.1 },\n ch: { step: 0.1 },\n rem: { step: 0.1 }\n };\n return (_a = configs[unit]) !== null && _a !== void 0 ? _a : baseConfig;\n };\n const defaultValue = 16;\n const isValidValue = value => value >= 0;\n const getNumberInputSpec = editor => {\n const getCurrentValue = () => editor.queryCommandValue('FontSize');\n const updateInputValue = comp => emitWith(comp, updateMenuText, { text: getCurrentValue() });\n return {\n updateInputValue,\n onAction: (format, focusBack) => editor.execCommand('FontSize', false, format, { skip_focus: !focusBack }),\n getNewValue: (text, updateFunction) => {\n parse(text, [\n 'unsupportedLength',\n 'empty'\n ]);\n const currentValue = getCurrentValue();\n const parsedText = parse(text, [\n 'unsupportedLength',\n 'empty'\n ]).or(parse(currentValue, [\n 'unsupportedLength',\n 'empty'\n ]));\n const value = parsedText.map(res => res.value).getOr(defaultValue);\n const defaultUnit = getFontSizeInputDefaultUnit(editor);\n const unit = parsedText.map(res => res.unit).filter(u => u !== '').getOr(defaultUnit);\n const newValue = updateFunction(value, getConfigFromUnit(unit).step);\n const res = `${ isValidValue(newValue) ? newValue : value }${ unit }`;\n if (res !== currentValue) {\n fireFontSizeInputTextUpdate(editor, { value: res });\n }\n return res;\n }\n };\n };\n const createFontSizeInputButton = (editor, backstage) => createBespokeNumberInput(editor, backstage, getNumberInputSpec(editor), 'fontsizeinput');\n const createFontSizeMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontsize', {\n text: menuTitle$1,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle = 'Formats';\n const getTooltipPlaceholder = value => isEmpty(value) ? 'Formats' : 'Format {0}';\n const getSpec = (editor, dataset) => {\n const fallbackFormat = 'Formats';\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const updateSelectMenuText = comp => {\n const getFormatItems = fmt => {\n if (isNestedFormat(fmt)) {\n return bind$3(fmt.items, getFormatItems);\n } else if (isFormatReference(fmt)) {\n return [{\n title: fmt.title,\n format: fmt.format\n }];\n } else {\n return [];\n }\n };\n const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n const text = detectedFormat.fold(constant$1({\n title: fallbackFormat,\n tooltipLabel: ''\n }), fmt => ({\n title: fmt.title,\n tooltipLabel: fmt.title\n }));\n emitWith(comp, updateMenuText, { text: text.title });\n fireStylesTextUpdate(editor, { value: text.tooltipLabel });\n };\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder(''), ''),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: shouldAutoHideStyleFormats(editor),\n isInvalid: item => !editor.formatter.canApply(item.format),\n dataset\n };\n };\n const createStylesButton = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n return createSelectButton(editor, backstage, getSpec(editor, dataset), getTooltipPlaceholder, 'StylesTextUpdate', 'styles');\n };\n const createStylesMenu = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n const menuItems = createMenuItems(backstage, getSpec(editor, dataset));\n editor.ui.registry.addNestedMenuItem('styles', {\n text: menuTitle,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const schema$7 = constant$1([\n required$1('toggleClass'),\n required$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n onStrictHandler('onItemExecute'),\n option$3('lazySink'),\n required$1('dom'),\n onHandler('onOpen'),\n field('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n defaulted('eventOrder', {}),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const arrowPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'arrow',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: arrow => {\n arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n },\n buttonBehaviours: derive$1([Toggling.config({\n toggleOnExecute: false,\n toggleClass: detail.toggleClass\n })])\n };\n }\n });\n const buttonPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'button',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: btn => {\n btn.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n const parts$3 = constant$1([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: detail => {\n return {\n onExecute: (tmenu, item) => {\n tmenu.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType$1()\n ]);\n\n const factory$5 = (detail, components, spec, externals) => {\n const switchToMenu = sandbox => {\n Composing.getCurrent(sandbox).each(current => {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup(detail, identity, component, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const openMenu = comp => {\n action(comp);\n return Optional.some(true);\n };\n const executeOnButton = comp => {\n const button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n const buttonEvents = {\n ...derive$2([runOnAttached((component, _simulatedEvent) => {\n const ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(descriptor => {\n const descriptorId = generate$6('aria');\n set$9(descriptor.element, 'id', descriptorId);\n set$9(component.element, 'aria-describedby', descriptorId);\n });\n })]),\n ...events$9(Optional.some(action))\n };\n const apis = {\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: hotspot => {\n const arrow = getPartOrDie(hotspot, detail, 'arrow');\n const extras = {\n onOpen: () => {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: () => {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox$1(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n const SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\n apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n });\n\n const getButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getToggleApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const focusButtonEvent = generate$6('focus-button');\n const renderCommonStructure = (optIcon, optText, tooltip, behaviours, providersBackstage, context, btnName) => {\n const optMemDisplayText = optText.map(text => record(renderLabel$1(text, 'tox-tbtn', providersBackstage)));\n const optMemDisplayIcon = optIcon.map(icon => record(renderReplaceableIconFromPack(icon, providersBackstage.icons)));\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(optText.isSome() ? ['tox-tbtn--select'] : []),\n attributes: {\n ...getTooltipAttributes(tooltip, providersBackstage),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec())\n ]),\n eventOrder: {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ],\n [attachedToDom()]: [\n commonButtonDisplayEvent,\n 'toolbar-group-button-events'\n ]\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(() => providersBackstage.checkUiComponentContext(context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(context)),\n config(commonButtonDisplayEvent, [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(providersBackstage.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, providersBackstage.icons)]);\n });\n }),\n run$1(mousedown(), (button, se) => {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })\n ])\n ].concat(behaviours.getOr([])))\n };\n };\n const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes, btnName) => {\n const sharedBackstage = backstage.shared;\n const editorOffCell = Cell(noop);\n const specialisation = {\n toolbarButtonBehaviours: [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n };\n const behaviours = [config('toolbar-group-button-events', [\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ])];\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: () => Future.nu(resolve => {\n resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n }),\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.some(behaviours), sharedBackstage.providers, spec.context, btnName),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes\n }\n }\n }\n });\n };\n const renderCommonToolbarButton = (spec, specialisation, providersBackstage, btnName) => {\n var _d;\n const editorOffCell = Cell(noop);\n const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), providersBackstage, spec.context, btnName);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: {\n ...derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n ...spec.tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) + spec.shortcut.map(shortcut => ` (${ convertText(shortcut) })`).getOr('') }))).toArray(),\n DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ].concat(specialisation.toolbarButtonBehaviours)),\n [commonButtonDisplayEvent]: (_d = structure.buttonBehaviours) === null || _d === void 0 ? void 0 : _d[commonButtonDisplayEvent]\n }\n });\n };\n const renderToolbarButton = (spec, providersBackstage, btnName) => renderToolbarButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const renderToolbarToggleButton = (spec, providersBackstage, btnName) => renderToolbarToggleButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const fetchChoices = (getApi, spec, providersBackstage) => comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, classForPreset(spec.presets)).each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }))));\n const renderSplitButton = (spec, sharedBackstage, btnName) => {\n const tooltipString = Cell(spec.tooltip.getOr(''));\n const getApi = comp => ({\n isEnabled: () => !Disabling.isDisabled(comp),\n setEnabled: state => Disabling.set(comp, !state),\n setIconFill: (id, value) => {\n descendant(comp.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setActive: state => {\n set$9(comp.element, 'aria-pressed', state);\n descendant(comp.element, 'span').each(button => {\n comp.getSystem().getByDom(button).each(buttonComp => Toggling.set(buttonComp, state));\n });\n },\n isActive: () => descendant(comp.element, 'span').exists(button => comp.getSystem().getByDom(button).exists(Toggling.isOn)),\n setText: text => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuText, { text }))),\n setIcon: icon => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuIcon, { icon }))),\n setTooltip: tooltip => {\n const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const editorOffCell = Cell(noop);\n const specialisation = {\n getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: {\n 'aria-pressed': false,\n ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n onExecute: button => {\n const api = getApi(button);\n if (api.isEnabled()) {\n spec.onAction(api);\n }\n },\n onItemExecute: (_a, _b, _c) => {\n },\n splitDropdownBehaviours: derive$1([\n config('split-dropdown-events', [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.splitButton(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n ...spec.tooltip.map(tooltip => {\n return Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({\n tooltipText: sharedBackstage.providers.translate(tooltip),\n onShow: comp => {\n if (tooltipString.get() !== tooltip) {\n const translatedTooltip = sharedBackstage.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n });\n }).toArray()\n ]),\n eventOrder: {\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n 'split-dropdown-events',\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n 'split-dropdown-events',\n 'tooltipping'\n ]\n },\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some([\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n }),\n DisablingConfigs.toolbarButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ]), sharedBackstage.providers, spec.context)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$3('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n const defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'ai',\n items: [\n 'aidialog',\n 'aishortcuts'\n ]\n },\n {\n name: 'styles',\n items: ['styles']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor, btnName) => {\n const internal = bridgeBuilder(spec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return render(internal, backstage, editor, btnName);\n };\n const types = {\n button: renderFromBridge(createToolbarButton, (s, backstage, _, btnName) => renderToolbarButton(s, backstage.shared.providers, btnName)),\n togglebutton: renderFromBridge(createToggleButton, (s, backstage, _, btnName) => renderToolbarToggleButton(s, backstage.shared.providers, btnName)),\n menubutton: renderFromBridge(createMenuButton, (s, backstage, _, btnName) => renderMenuButton(s, 'tox-tbtn', backstage, Optional.none(), false, btnName)),\n splitbutton: renderFromBridge(createSplitButton, (s, backstage, _, btnName) => renderSplitButton(s, backstage.shared, btnName)),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor, btnName) => {\n const buttons = editor.ui.registry.getAll().buttons;\n const identify = toolbar => identifyButtons(editor, {\n buttons,\n toolbar,\n allowToolbarGroups: false\n }, backstage, Optional.none());\n const attributes = { [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n switch (getToolbarMode(editor)) {\n case ToolbarMode$1.floating:\n return renderFloatingToolbarButton(s, backstage, identify, attributes, btnName);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n })\n };\n const extractFrom = (spec, backstage, editor, btnName) => get$h(types, spec.type).fold(() => {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, render => Optional.some(render(spec, backstage, editor, btnName)));\n const bespokeButtons = {\n styles: createStylesButton,\n fontsize: createFontSizeButton,\n fontsizeinput: createFontSizeInputButton,\n fontfamily: createFontFamilyButton,\n blocks: createBlocksButton,\n align: createAlignButton\n };\n const removeUnusedDefaults = buttons => {\n const filteredItemGroups = map$2(defaultToolbar, group => {\n const items = filter$2(group.items, subItem => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n return {\n name: group.name,\n items\n };\n });\n return filter$2(filteredItemGroups, group => group.items.length > 0);\n };\n const convertStringToolbar = strToolbar => {\n const groupsStrings = strToolbar.split('|');\n return map$2(groupsStrings, g => ({ items: g.trim().split(' ') }));\n };\n const isToolbarGroupSettingArray = toolbar => isArrayOf(toolbar, t => has$2(t, 'name') && has$2(t, 'items'));\n const createToolbar = toolbarConfig => {\n const toolbar = toolbarConfig.toolbar;\n const buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$h(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind(ps => findMap(ps, prefix => get$h(buttons, prefix + toolbarItem.toLowerCase())))).fold(() => get$h(bespokeButtons, toolbarItem.toLowerCase()).map(r => r(editor, backstage)), spec => {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n console.warn(`Ignoring the '${ toolbarItem }' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n return Optional.none();\n } else {\n return extractFrom(spec, backstage, editor, toolbarItem.toLowerCase());\n }\n });\n const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => {\n const toolbarGroups = createToolbar(toolbarConfig);\n const groups = map$2(toolbarGroups, group => {\n const items = bind$3(group.items, toolbarItem => {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n items\n };\n });\n return filter$2(groups, group => group.items.length > 0);\n };\n\n const setToolbar = (editor, uiRefs, rawUiConfig, backstage) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const toolbarConfig = rawUiConfig.toolbar;\n const toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n const toolbars = toolbarConfig.map(t => {\n const config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, backstage, Optional.none());\n });\n OuterContainer.setToolbars(outerContainer, toolbars);\n } else {\n OuterContainer.setToolbar(outerContainer, identifyButtons(editor, rawUiConfig, backstage, Optional.none()));\n }\n };\n\n const detection = detect$1();\n const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n const setupEvents$1 = (editor, uiRefs) => {\n const {uiMotherships} = uiRefs;\n const dom = editor.dom;\n let contentWindow = editor.getWin();\n const initialDocEle = editor.getDoc().documentElement;\n const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n const resizeWindow = () => {\n const outer = lastWindowDimensions.get();\n if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n const resizeDocument = () => {\n const docEle = editor.getDoc().documentElement;\n const inner = lastDocumentDimensions.get();\n if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n const scroll = e => {\n fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n editor.on('hide', () => {\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n });\n editor.on('show', () => {\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', () => {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n const attachUiMotherships = (editor, uiRoot, uiRefs) => {\n if (isSplitUiMode(editor)) {\n attachSystemAfter(uiRefs.mainUi.mothership.element, uiRefs.popupUi.mothership);\n }\n attachSystem(uiRoot, uiRefs.dialogUi.mothership);\n };\n const render$1 = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi, uiMotherships} = uiRefs;\n const lastToolbarWidth = Cell(0);\n const outerContainer = mainUi.outerContainer;\n iframe(editor);\n const eTargetNode = SugarElement.fromDom(args.targetNode);\n const uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, mainUi.mothership);\n attachUiMotherships(editor, uiRoot, uiRefs);\n editor.on('PostRender', () => {\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor));\n });\n editor.on('SkinLoaded', () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setViews(outerContainer, rawUiConfig.views);\n setupEvents$1(editor, uiRefs);\n });\n const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n const limit = first(() => {\n editor.dispatch('ScrollContent');\n }, 20);\n const unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupEventsForUi(editor, uiRefs);\n editor.addCommand('ToggleSidebar', (_ui, value) => {\n OuterContainer.toggleSidebar(outerContainer, value);\n fireToggleSidebar(editor);\n });\n editor.addQueryValueHandler('ToggleSidebar', () => {\n var _a;\n return (_a = OuterContainer.whichSidebar(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n editor.addCommand('ToggleView', (_ui, value) => {\n if (OuterContainer.toggleView(outerContainer, value)) {\n const target = outerContainer.element;\n mainUi.mothership.broadcastOn([dismissPopups()], { target });\n each$1(uiMotherships, m => {\n m.broadcastOn([dismissPopups()], { target });\n });\n if (isNull(OuterContainer.whichView(outerContainer))) {\n editor.focus();\n editor.nodeChanged();\n OuterContainer.refreshToolbar(outerContainer);\n }\n fireToggleView(editor);\n }\n });\n editor.addQueryValueHandler('ToggleView', () => {\n var _a;\n return (_a = OuterContainer.whichView(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n const toolbarMode = getToolbarMode(editor);\n const refreshDrawer = () => {\n OuterContainer.refreshToolbar(uiRefs.mainUi.outerContainer);\n };\n if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', () => {\n const width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n const api = {\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(outerContainer)\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n const parseToInt = val => {\n const re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n const numToPx = val => isNumber(val) ? val + 'px' : val;\n const calcCappedSize = (size, minSize, maxSize) => {\n const minOverride = minSize.filter(min => size < min);\n const maxOverride = maxSize.filter(max => size > max);\n return minOverride.or(maxOverride).getOr(size);\n };\n\n const getHeight = editor => {\n const baseHeight = getHeightOption(editor);\n const minHeight = getMinHeightOption(editor);\n const maxHeight = getMaxHeightOption(editor);\n return parseToInt(baseHeight).map(height => calcCappedSize(height, minHeight, maxHeight));\n };\n const getHeightWithFallback = editor => {\n const height = getHeight(editor);\n return height.getOr(getHeightOption(editor));\n };\n const getWidth = editor => {\n const baseWidth = getWidthOption(editor);\n const minWidth = getMinWidthOption(editor);\n const maxWidth = getMaxWidthOption(editor);\n return parseToInt(baseWidth).map(width => calcCappedSize(width, minWidth, maxWidth));\n };\n const getWidthWithFallback = editor => {\n const width = getWidth(editor);\n return width.getOr(getWidthOption(editor));\n };\n\n const {ToolbarLocation, ToolbarMode} = Options;\n const maximumDistanceToEdge = 40;\n const InlineHeader = (editor, targetElm, uiRefs, backstage, floatContainer) => {\n const {mainUi, uiMotherships} = uiRefs;\n const DOM = global$8.DOM;\n const useFixedToolbarContainer = useFixedContainer(editor);\n const isSticky = isStickyToolbar(editor);\n const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n const headerBackstage = backstage.shared.header;\n const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n const minimumToolbarWidth = 150;\n const toolbarMode = getToolbarMode(editor);\n const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n const visible = Cell(false);\n const isVisible = () => visible.get() && !editor.removed;\n const calcToolbarOffset = toolbar => isSplitToolbar ? toolbar.fold(constant$1(0), tbar => tbar.components().length > 1 ? get$e(tbar.components()[1].element) : 0) : 0;\n const calcMode = container => {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const toolbarHeight = get$e(container.element) - offset;\n const targetBounds = box$1(targetElm);\n const roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n const doc = documentElement(targetElm);\n const docHeight = Math.max(doc.dom.scrollHeight, get$e(doc));\n const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n const winBounds = win();\n const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n return isRoomAtBottomViewport ? 'bottom' : 'top';\n }\n }\n case ToolbarLocation.bottom:\n return 'bottom';\n case ToolbarLocation.top:\n default:\n return 'top';\n }\n };\n const setupMode = mode => {\n floatContainer.on(container => {\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$9(container.element, Attribute, verticalDir);\n });\n };\n const updateChromeWidth = () => {\n floatContainer.on(container => {\n const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n return getBounds$3().width - viewport$1(targetElm).left - 10;\n });\n set$8(container.element, 'max-width', maxWidth + 'px');\n });\n };\n const updateChromePosition = (isOuterContainerWidthRestored, prevScroll) => {\n floatContainer.on(container => {\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const targetBounds = box$1(targetElm);\n const offsetParent = getOffsetParent$1(editor, mainUi.outerContainer.element);\n const getLeft = () => offsetParent.fold(() => targetBounds.x, offsetParent => {\n const offsetBox = box$1(offsetParent);\n const isOffsetParentBody = eq(offsetParent, body());\n return isOffsetParentBody ? targetBounds.x : targetBounds.x - offsetBox.x;\n });\n const getTop = () => offsetParent.fold(() => isPositionedAtTop() ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.bottom, offsetParent => {\n var _a;\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n const isOffsetParentBody = eq(offsetParent, body());\n const topValue = isOffsetParentBody ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.y - offsetBox.y + scrollDelta - get$e(container.element) + offset;\n return isPositionedAtTop() ? topValue : targetBounds.bottom;\n });\n const left = getLeft();\n const widthProperties = someIf(isOuterContainerWidthRestored, Math.ceil(mainUi.outerContainer.element.dom.getBoundingClientRect().width)).filter(w => w > minimumToolbarWidth).map(toolbarWidth => {\n const scroll = prevScroll.getOr(get$c());\n const availableWidth = window.innerWidth - (left - scroll.left);\n const width = Math.max(Math.min(toolbarWidth, availableWidth), minimumToolbarWidth);\n if (availableWidth < toolbarWidth) {\n set$8(mainUi.outerContainer.element, 'width', width + 'px');\n }\n return { width: width + 'px' };\n }).getOr({ width: 'max-content' });\n const baseProperties = {\n position: 'absolute',\n left: Math.round(left) + 'px',\n top: getTop() + 'px'\n };\n setAll(mainUi.outerContainer.element, {\n ...baseProperties,\n ...widthProperties\n });\n });\n };\n const getOffsetParent$1 = (editor, element) => isSplitUiMode(editor) ? getOffsetParent(element) : Optional.none();\n const repositionPopups$1 = () => {\n each$1(uiMotherships, m => {\n m.broadcastOn([repositionPopups()], {});\n });\n };\n const restoreOuterContainerWidth = () => {\n if (!useFixedToolbarContainer) {\n const toolbarCurrentRightsidePosition = absolute$3(mainUi.outerContainer.element).left + getOuter$1(mainUi.outerContainer.element);\n if (toolbarCurrentRightsidePosition >= window.innerWidth - maximumDistanceToEdge || getRaw(mainUi.outerContainer.element, 'width').isSome()) {\n set$8(mainUi.outerContainer.element, 'position', 'absolute');\n set$8(mainUi.outerContainer.element, 'left', '0px');\n remove$7(mainUi.outerContainer.element, 'width');\n return true;\n }\n }\n return false;\n };\n const update = stickyAction => {\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n const prevScroll = get$c();\n const isOuterContainerWidthRestored = useFixedToolbarContainer ? false : restoreOuterContainerWidth();\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(mainUi.outerContainer);\n }\n if (!useFixedToolbarContainer) {\n const currentScroll = get$c();\n const optScroll = someIf(prevScroll.left !== currentScroll.left, prevScroll);\n updateChromePosition(isOuterContainerWidthRestored, optScroll);\n optScroll.each(scroll => {\n to(scroll.left, currentScroll.top);\n });\n }\n if (isSticky) {\n floatContainer.on(stickyAction);\n }\n repositionPopups$1();\n };\n const doUpdateMode = () => {\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return false;\n }\n return floatContainer.get().exists(fc => {\n const currentMode = headerBackstage.getDockingMode();\n const newMode = calcMode(fc);\n if (newMode !== currentMode) {\n setupMode(newMode);\n return true;\n } else {\n return false;\n }\n });\n };\n const show = () => {\n visible.set(true);\n set$8(mainUi.outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n doUpdateMode();\n if (isSplitUiMode(editor)) {\n update(elem => Docking.isDocked(elem) ? Docking.reset(elem) : Docking.refresh(elem));\n } else {\n update(Docking.refresh);\n }\n };\n const hide = () => {\n visible.set(false);\n set$8(mainUi.outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n };\n const updateMode = () => {\n const changedMode = doUpdateMode();\n if (changedMode) {\n update(Docking.reset);\n }\n };\n return {\n isVisible,\n isPositionedAtTop,\n show,\n hide,\n update,\n updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n const bounds = box$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds\n };\n };\n const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n const resizeContent = e => {\n const {pos, bounds} = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n const {\n pos: prevPos,\n bounds: prevBounds\n } = prevPosAndBounds.get();\n const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos,\n bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(Docking.reset);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n if (!toolbarPersist) {\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n }\n editor.on('SkinLoaded ResizeWindow', () => ui.update(Docking.reset));\n editor.on('NodeChange keydown', e => {\n requestAnimationFrame(() => resizeContent(e));\n });\n let lastScrollX = 0;\n const updateUi = last(() => ui.update(Docking.refresh), 33);\n editor.on('ScrollWindow', () => {\n const newScrollX = get$c().left;\n if (newScrollX !== lastScrollX) {\n lastScrollX = newScrollX;\n updateUi.throttle();\n }\n ui.updateMode();\n });\n if (isSplitUiMode(editor)) {\n editor.on('ElementScroll', _args => {\n ui.update(Docking.refresh);\n });\n }\n const elementLoad = unbindable();\n elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', e => resizeContent(e.raw)));\n editor.on('remove', () => {\n elementLoad.clear();\n });\n };\n const render = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi} = uiRefs;\n const floatContainer = value$4();\n const targetElm = SugarElement.fromDom(args.targetNode);\n const ui = InlineHeader(editor, targetElm, uiRefs, backstage, floatContainer);\n const toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n const render = () => {\n if (floatContainer.isSet()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(mainUi.outerContainer).getOrDie());\n const uiContainer = getUiContainer(editor);\n if (isSplitUiMode(editor)) {\n attachSystemAfter(targetElm, mainUi.mothership);\n attachSystemAfter(targetElm, uiRefs.popupUi.mothership);\n } else {\n attachSystem(uiContainer, mainUi.mothership);\n }\n attachSystem(uiContainer, uiRefs.dialogUi.mothership);\n const setup = () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n OuterContainer.setMenubar(mainUi.outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\n };\n if (toolbarPersist) {\n editor.once('SkinLoaded', setup);\n } else {\n setup();\n }\n };\n editor.on('show', render);\n editor.on('hide', ui.hide);\n if (!toolbarPersist) {\n editor.on('focus', render);\n editor.on('blur', ui.hide);\n }\n editor.on('init', () => {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupEventsForUi(editor, uiRefs);\n const api = {\n show: render,\n hide: ui.hide,\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(mainUi.outerContainer)\n };\n return {\n editorContainer: mainUi.outerContainer.element.dom,\n api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n const LazyUiReferences = () => {\n const dialogUi = value$4();\n const popupUi = value$4();\n const mainUi = value$4();\n const lazyGetInOuterOrDie = (label, f) => () => mainUi.get().bind(oc => f(oc.outerContainer)).getOrDie(`Could not find ${ label } element in OuterContainer`);\n const getUiMotherships = () => {\n const optDialogMothership = dialogUi.get().map(ui => ui.mothership);\n const optPopupMothership = popupUi.get().map(ui => ui.mothership);\n return optDialogMothership.fold(() => optPopupMothership.toArray(), dm => optPopupMothership.fold(() => [dm], pm => eq(dm.element, pm.element) ? [dm] : [\n dm,\n pm\n ]));\n };\n return {\n dialogUi,\n popupUi,\n mainUi,\n getUiMotherships,\n lazyGetInOuterOrDie\n };\n };\n\n const showContextToolbarEvent = 'contexttoolbar-show';\n const hideContextToolbarEvent = 'contexttoolbar-hide';\n\n const getFormApi = input => ({\n hide: () => emit(input, sandboxClose()),\n getValue: () => Representing.getValue(input)\n });\n const runOnExecute = (memInput, original) => run$1(internalToolbarButtonExecute, (comp, se) => {\n const input = memInput.get(comp);\n const formApi = getFormApi(input);\n original.onAction(formApi, se.event.buttonApi);\n });\n const renderContextButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToolbarButton({\n ...rest,\n type: 'button',\n onAction: noop\n }));\n return renderToolbarButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const renderContextToggleButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToggleButton({\n ...rest,\n type: 'togglebutton',\n onAction: noop\n }));\n return renderToolbarToggleButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const isToggleButton = button => button.type === 'contextformtogglebutton';\n const generateOne = (memInput, button, providersBackstage) => {\n if (isToggleButton(button)) {\n return renderContextToggleButton(memInput, button, providersBackstage);\n } else {\n return renderContextButton(memInput, button, providersBackstage);\n }\n };\n const generate = (memInput, buttons, providersBackstage) => {\n const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage)));\n const asSpecs = () => map$2(mementos, mem => mem.asSpec());\n const findPrimary = compInSystem => findMap(buttons, (button, i) => {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(mem => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n return {\n asSpecs,\n findPrimary\n };\n };\n\n const buildInitGroups = (ctx, providers) => {\n const inputAttributes = ctx.label.fold(() => ({}), label => ({ 'aria-label': label }));\n const memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable }),\n toggleOnReceive(() => providers.checkUiComponentContext('mode:design')),\n Keying.config({\n mode: 'special',\n onEnter: input => commands.findPrimary(input).map(primary => {\n emitExecute(primary);\n return true;\n }),\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n })\n ])\n }));\n const commands = generate(memInput, ctx.commands, providers);\n return [\n {\n title: Optional.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Optional.none(),\n items: commands.asSpecs()\n }\n ];\n };\n const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers\n });\n const ContextForm = {\n renderContextForm,\n buildInitGroups\n };\n\n const isVerticalOverlap = (a, b, threshold) => b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n const getRangeRect = rng => {\n const rect = rng.getBoundingClientRect();\n if (rect.height <= 0 && rect.width <= 0) {\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n return elm.filter(isElement$1).map(e => e.dom.getBoundingClientRect()).getOr(rect);\n } else {\n return rect;\n }\n };\n const getSelectionBounds = editor => {\n const rng = editor.selection.getRng();\n const rect = getRangeRect(rng);\n if (editor.inline) {\n const scroll = get$c();\n return bounds(scroll.left + rect.left, scroll.top + rect.top, rect.width, rect.height);\n } else {\n const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height);\n }\n };\n const getAnchorElementBounds = (editor, lastElement) => lastElement.filter(elem => inBody(elem) && isHTMLElement(elem)).map(absolute$2).getOrThunk(() => getSelectionBounds(editor));\n const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => {\n const x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n const right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n return {\n x,\n width: right - x\n };\n };\n const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const header = descendant(container, '.tox-editor-header').getOr(container);\n const headerBox = box$1(header);\n const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: viewportBounds.bottom\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y,\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n }\n const containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox;\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y + margin, viewportBounds.y),\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n };\n const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => {\n const viewportBounds = getBounds$3(window);\n const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n const {x, width} = getHorizontalBounds(contentAreaBox, viewportBounds, margin);\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n const isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n const {y, bottom} = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin);\n return bounds(x, y, width, bottom - y);\n }\n };\n\n const bubbleSize$1 = 12;\n const bubbleAlignments$1 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top'],\n inset: ['tox-pop--inset']\n };\n const anchorOverrides = {\n maxHeightFunction: expandable$1(),\n maxWidthFunction: expandable()\n };\n const isEntireElementSelected = (editor, elem) => {\n const rng = editor.selection.getRng();\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem);\n };\n const preservePosition = (elem, position, f) => {\n const currentPosition = getRaw(elem, 'position');\n set$8(elem, 'position', position);\n const result = f(elem);\n currentPosition.each(pos => set$8(elem, 'position', pos));\n return result;\n };\n const shouldUseInsetLayouts = position => position === 'node';\n const determineInsetLayout = (editor, contextbar, elem, data, bounds) => {\n const selectionBounds = getSelectionBounds(editor);\n const isSameAnchorElement = data.lastElement().exists(prev => eq(elem, prev));\n if (isEntireElementSelected(editor, elem)) {\n return isSameAnchorElement ? preserve : north;\n } else if (isSameAnchorElement) {\n return preservePosition(contextbar, data.getMode(), () => {\n const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar), -20);\n return isOverlapping && !data.isReposition() ? flip : preserve;\n });\n } else {\n const yBounds = data.getMode() === 'fixed' ? bounds.y + get$c().top : bounds.y;\n const contextbarHeight = get$e(contextbar) + bubbleSize$1;\n return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n }\n };\n const getAnchorSpec$2 = (editor, mobile, data, position) => {\n const smartInsetLayout = elem => (anchor, element, bubbles, placee, bounds) => {\n const layout = determineInsetLayout(editor, placee, elem, data, bounds);\n const newAnchor = {\n ...anchor,\n y: bounds.y,\n height: bounds.height\n };\n return {\n ...layout(newAnchor, element, bubbles, placee, bounds),\n alwaysFit: true\n };\n };\n const getInsetLayouts = elem => shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n const desktopAnchorSpecLayouts = {\n onLtr: elem => [\n north$2,\n south$2,\n northeast$2,\n southeast$2,\n northwest$2,\n southwest$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n north$2,\n south$2,\n northwest$2,\n southwest$2,\n northeast$2,\n southeast$2\n ].concat(getInsetLayouts(elem))\n };\n const mobileAnchorSpecLayouts = {\n onLtr: elem => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2\n ].concat(getInsetLayouts(elem))\n };\n return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n };\n const getAnchorLayout = (editor, position, isTouch, data) => {\n if (position === 'line') {\n return {\n bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n layouts: {\n onLtr: () => [east$2],\n onRtl: () => [west$2]\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n layouts: getAnchorSpec$2(editor, isTouch, data, position),\n overrides: anchorOverrides\n };\n }\n };\n\n const matchTargetWith = (elem, candidates) => {\n const ctxs = filter$2(candidates, toolbarApi => toolbarApi.predicate(elem.dom));\n const {pass, fail} = partition$3(ctxs, t => t.type === 'contexttoolbar');\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n const filterByPositionForStartNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const doesPositionExist = value => exists(toolbars, t => t.position === value);\n const filterToolbarsByPosition = value => filter$2(toolbars, t => t.position === value);\n const hasSelectionToolbars = doesPositionExist('selection');\n const hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n const nodeToolbars = filterToolbarsByPosition('node');\n const selectionToolbars = map$2(filterToolbarsByPosition('selection'), t => ({\n ...t,\n position: 'node'\n }));\n return nodeToolbars.concat(selectionToolbars);\n } else {\n return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node');\n }\n } else {\n return filterToolbarsByPosition('line');\n }\n }\n };\n const filterByPositionForAncestorNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const findPosition = value => find$5(toolbars, t => t.position === value);\n const basePosition = findPosition('selection').orThunk(() => findPosition('node')).orThunk(() => findPosition('line')).map(t => t.position);\n return basePosition.fold(() => [], pos => filter$2(toolbars, t => t.position === pos));\n }\n };\n const matchStartNode = (elem, nodeCandidates, editorCandidates) => {\n const nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n const editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem,\n toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n const matchAncestor = (isRoot, startNode, scopes) => {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor$2(startNode, ancestorElem => {\n if (isElement$1(ancestorElem)) {\n const {contextToolbars, contextForms} = matchTargetWith(ancestorElem, scopes.inNodeScope);\n const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars\n }) : Optional.none();\n } else {\n return Optional.none();\n }\n }, isRoot);\n }\n };\n const lookup$1 = (scopes, editor) => {\n const rootElem = SugarElement.fromDom(editor.getBody());\n const isRoot = elem => eq(elem, rootElem);\n const isOutsideRoot = startNode => !isRoot(startNode) && !contains(rootElem, startNode);\n const startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes));\n };\n\n const categorise = (contextToolbars, navigate) => {\n const forms = {};\n const inNodeScope = [];\n const inEditorScope = [];\n const formNavigators = {};\n const lookupTable = {};\n const registerForm = (key, toolbarSpec) => {\n const contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(launch => {\n formNavigators['form:' + key + ''] = {\n ...toolbarSpec.launch,\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: () => {\n navigate(contextForm);\n }\n };\n });\n if (contextForm.scope === 'editor') {\n inEditorScope.push(contextForm);\n } else {\n inNodeScope.push(contextForm);\n }\n lookupTable[key] = contextForm;\n };\n const registerToolbar = (key, toolbarSpec) => {\n createContextToolbar(toolbarSpec).each(contextToolbar => {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n const keys$1 = keys(contextToolbars);\n each$1(keys$1, key => {\n const toolbarApi = contextToolbars[key];\n if (toolbarApi.type === 'contextform') {\n registerForm(key, toolbarApi);\n } else if (toolbarApi.type === 'contexttoolbar') {\n registerToolbar(key, toolbarApi);\n }\n });\n return {\n forms,\n inNodeScope,\n inEditorScope,\n lookupTable,\n formNavigators\n };\n };\n\n const forwardSlideEvent = generate$6('forward-slide');\n const backSlideEvent = generate$6('backward-slide');\n const changeSlideEvent = generate$6('change-slide-event');\n const resizingClass = 'tox-pop--resizing';\n const renderContextToolbar = spec => {\n const stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: comp => {\n stack.set([]);\n InlineView.getContent(comp).each(c => {\n remove$7(c.element, 'visibility');\n });\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), (comp, se) => {\n if (se.event.raw.propertyName === 'width') {\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, (comp, se) => {\n const elem = comp.element;\n remove$7(elem, 'width');\n const currentWidth = get$d(elem);\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n const newWidth = get$d(elem);\n set$8(elem, 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(newContents => {\n se.event.focus.bind(f => {\n focus$3(f);\n return search(elem);\n }).orThunk(() => {\n Keying.focusIn(newContents);\n return active$1(getRootNode(elem));\n });\n });\n setTimeout(() => {\n set$8(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, (comp, se) => {\n InlineView.getContent(comp).each(oldContents => {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active$1(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, (comp, _se) => {\n last$1(stack.get()).each(last => {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: comp => last$1(stack.get()).fold(() => spec.onEscape(), _ => {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n })\n })\n ]),\n lazySink: () => Result.value(spec.sink)\n });\n };\n\n const transitionClass = 'tox-pop--transition';\n const register$a = (editor, registryContextToolbars, sink, extras) => {\n const backstage = extras.backstage;\n const sharedBackstage = backstage.shared;\n const isTouch = detect$1().deviceType.isTouch;\n const lastElement = value$4();\n const lastTrigger = value$4();\n const lastContextPosition = value$4();\n const contextbar = build$1(renderContextToolbar({\n sink,\n onEscape: () => {\n editor.focus();\n return Optional.some(true);\n }\n }));\n const getBounds = () => {\n const position = lastContextPosition.get().getOr('node');\n const margin = shouldUseInsetLayouts(position) ? 1 : 0;\n return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n };\n const canLaunchToolbar = () => {\n return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n };\n const isSameLaunchElement = elem => is$1(lift2(elem, lastElement.get(), eq), true);\n const shouldContextToolbarHide = () => {\n if (!canLaunchToolbar()) {\n return true;\n } else {\n const contextToolbarBounds = getBounds();\n const anchorBounds = is$1(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds, 0.01);\n }\n };\n const close = () => {\n lastElement.clear();\n lastTrigger.clear();\n lastContextPosition.clear();\n InlineView.hide(contextbar);\n };\n const hideOrRepositionIfNecessary = () => {\n if (InlineView.isOpen(contextbar)) {\n const contextBarEle = contextbar.element;\n remove$7(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n } else {\n lastTrigger.set(0);\n InlineView.reposition(contextbar);\n }\n }\n };\n const wrapInPopDialog = toolbarSpec => ({\n dom: {\n tag: 'div',\n classes: ['tox-pop__dialog']\n },\n components: [toolbarSpec],\n behaviours: derive$1([\n Keying.config({ mode: 'acyclic' }),\n config('pop-dialog-wrap-events', [\n runOnAttached(comp => {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp));\n }),\n runOnDetached(_comp => {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n });\n const getScopes = cached(() => categorise(registryContextToolbars, toolbarApi => {\n const alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n }));\n const buildContextToolbarGroups = (allButtons, ctx) => identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras.backstage, Optional.some(['form:']));\n const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers);\n const buildToolbar = toolbars => {\n const {buttons} = editor.ui.registry.getAll();\n const scopes = getScopes();\n const allButtons = {\n ...buttons,\n ...scopes.formNavigators\n };\n const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default;\n const initGroups = flatten(map$2(toolbars, ctx => ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers)));\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: sharedBackstage.providers\n });\n };\n const getAnchor = (position, element) => {\n const anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n const anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n lastElement: lastElement.get,\n isReposition: () => is$1(lastTrigger.get(), 0),\n getMode: () => Positioning.getMode(sink)\n });\n return deepMerge(anchorage, anchorLayout);\n };\n const launchContext = (toolbarApi, elem) => {\n launchContextToolbar.cancel();\n if (!canLaunchToolbar()) {\n return;\n }\n const toolbarSpec = buildToolbar(toolbarApi);\n const position = toolbarApi[0].position;\n const anchor = getAnchor(position, elem);\n lastContextPosition.set(position);\n lastTrigger.set(1);\n const contextBarEle = contextbar.element;\n remove$7(contextBarEle, 'display');\n if (!isSameLaunchElement(elem)) {\n remove$3(contextBarEle, transitionClass);\n Positioning.reset(sink, contextbar);\n }\n InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n anchor,\n transition: {\n classes: [transitionClass],\n mode: 'placement'\n }\n }, () => Optional.some(getBounds()));\n elem.fold(lastElement.clear, lastElement.set);\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n }\n };\n let isDragging = false;\n const launchContextToolbar = last(() => {\n if (!editor.hasFocus() || editor.removed || isDragging) {\n return;\n }\n if (has(contextbar.element, transitionClass)) {\n launchContextToolbar.throttle();\n } else {\n const scopes = getScopes();\n lookup$1(scopes, editor).fold(close, info => {\n launchContext(info.toolbars, Optional.some(info.elem));\n });\n }\n }, 17);\n editor.on('init', () => {\n editor.on('remove', close);\n editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent', launchContextToolbar.throttle);\n editor.on(hideContextToolbarEvent, close);\n editor.on(showContextToolbarEvent, e => {\n const scopes = getScopes();\n get$h(scopes.lookupTable, e.toolbarKey).each(ctx => {\n launchContext([ctx], someIf(e.target !== editor, e.target));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n editor.on('focusout', _e => {\n global$9.setEditorTimeout(editor, () => {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', () => {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('ExecCommand', ({command}) => {\n if (command.toLowerCase() === 'toggleview') {\n close();\n }\n });\n editor.on('AfterProgressState', event => {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n launchContextToolbar.throttle();\n }\n });\n editor.on('dragstart', () => {\n isDragging = true;\n });\n editor.on('dragend drop', () => {\n isDragging = false;\n });\n editor.on('NodeChange', _e => {\n search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n });\n });\n };\n\n const register$9 = editor => {\n const alignToolbarButtons = [\n {\n name: 'alignleft',\n text: 'Align left',\n cmd: 'JustifyLeft',\n icon: 'align-left'\n },\n {\n name: 'aligncenter',\n text: 'Align center',\n cmd: 'JustifyCenter',\n icon: 'align-center'\n },\n {\n name: 'alignright',\n text: 'Align right',\n cmd: 'JustifyRight',\n icon: 'align-right'\n },\n {\n name: 'alignjustify',\n text: 'Justify',\n cmd: 'JustifyFull',\n icon: 'align-justify'\n }\n ];\n each$1(alignToolbarButtons, item => {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n icon: item.icon,\n onAction: onActionExecCommand(editor, item.cmd),\n onSetup: onSetupStateToggle(editor, item.name)\n });\n });\n editor.ui.registry.addButton('alignnone', {\n tooltip: 'No alignment',\n icon: 'align-none',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, 'JustifyNone')\n });\n };\n\n const registerController = (editor, spec) => {\n const getMenuItems = () => {\n const options = spec.getOptions(editor);\n const initial = spec.getCurrent(editor).map(spec.hash);\n const current = value$4();\n return map$2(options, value => ({\n type: 'togglemenuitem',\n text: spec.display(value),\n onSetup: api => {\n const setActive = active => {\n if (active) {\n current.on(oldApi => oldApi.setActive(false));\n current.set(api);\n }\n api.setActive(active);\n };\n setActive(is$1(initial, spec.hash(value)));\n const unbindWatcher = spec.watcher(editor, value, setActive);\n return () => {\n current.clear();\n unbindWatcher();\n };\n },\n onAction: () => spec.setCurrent(editor, value)\n }));\n };\n editor.ui.registry.addMenuButton(spec.name, {\n tooltip: spec.text,\n icon: spec.icon,\n fetch: callback => callback(getMenuItems()),\n onSetup: spec.onToolbarSetup\n });\n editor.ui.registry.addNestedMenuItem(spec.name, {\n type: 'nestedmenuitem',\n text: spec.text,\n getSubmenuItems: getMenuItems,\n onSetup: spec.onMenuSetup\n });\n };\n const lineHeightSpec = editor => ({\n name: 'lineheight',\n text: 'Line height',\n icon: 'line-height',\n getOptions: getLineHeightFormats,\n hash: input => normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input),\n display: identity,\n watcher: (editor, value, callback) => editor.formatter.formatChanged('lineheight', callback, false, { value }).unbind,\n getCurrent: editor => Optional.from(editor.queryCommandValue('LineHeight')),\n setCurrent: (editor, value) => editor.execCommand('LineHeight', false, value),\n onToolbarSetup: onSetupEditableToggle(editor),\n onMenuSetup: onSetupEditableToggle(editor)\n });\n const languageSpec = editor => {\n const settingsOpt = Optional.from(getContentLanguages(editor));\n return settingsOpt.map(settings => ({\n name: 'language',\n text: 'Language',\n icon: 'language',\n getOptions: constant$1(settings),\n hash: input => isUndefined(input.customCode) ? input.code : `${ input.code }/${ input.customCode }`,\n display: input => input.title,\n watcher: (editor, value, callback) => {\n var _a;\n return editor.formatter.formatChanged('lang', callback, false, {\n value: value.code,\n customValue: (_a = value.customCode) !== null && _a !== void 0 ? _a : null\n }).unbind;\n },\n getCurrent: editor => {\n const node = SugarElement.fromDom(editor.selection.getNode());\n return closest$4(node, n => Optional.some(n).filter(isElement$1).bind(ele => {\n const codeOpt = getOpt(ele, 'lang');\n return codeOpt.map(code => {\n const customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n return {\n code,\n customCode,\n title: ''\n };\n });\n }));\n },\n setCurrent: (editor, lang) => editor.execCommand('Lang', false, lang),\n onToolbarSetup: api => {\n const unbinder = unbindable();\n api.setActive(editor.formatter.match('lang', {}, undefined, true));\n unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n return composeUnbinders(unbinder.clear, onSetupEditableToggle(editor)(api));\n },\n onMenuSetup: onSetupEditableToggle(editor)\n }));\n };\n const register$8 = editor => {\n registerController(editor, lineHeightSpec(editor));\n languageSpec(editor).each(spec => registerController(editor, spec));\n };\n\n const register$7 = (editor, backstage) => {\n createAlignMenu(editor, backstage);\n createFontFamilyMenu(editor, backstage);\n createStylesMenu(editor, backstage);\n createBlocksMenu(editor, backstage);\n createFontSizeMenu(editor, backstage);\n };\n\n const register$6 = editor => {\n editor.ui.registry.addContext('editable', () => {\n return editor.selection.isEditable();\n });\n editor.ui.registry.addContext('mode', mode => {\n return editor.mode.get() === mode;\n });\n editor.ui.registry.addContext('any', always);\n editor.ui.registry.addContext('formatting', format => {\n return editor.formatter.canApply(format);\n });\n editor.ui.registry.addContext('insert', child => {\n return editor.schema.isValidChild(editor.selection.getNode().tagName, child);\n });\n };\n\n const onSetupOutdentState = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.queryCommandState('outdent') && editor.selection.isEditable());\n });\n const registerButtons$2 = editor => {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: onSetupOutdentState(editor),\n onAction: onActionExecCommand(editor, 'outdent')\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, 'indent')\n });\n };\n const register$5 = editor => {\n registerButtons$2(editor);\n };\n\n const makeSetupHandler = (editor, pasteAsText) => api => {\n api.setActive(pasteAsText.get());\n const pastePlainTextToggleHandler = e => {\n pasteAsText.set(e.state);\n api.setActive(e.state);\n };\n editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n return composeUnbinders(() => editor.off('PastePlainTextToggle', pastePlainTextToggleHandler), onSetupEditableToggle(editor)(api));\n };\n const register$4 = editor => {\n const pasteAsText = Cell(getPasteAsText(editor));\n const onAction = () => editor.execCommand('mceTogglePlainTextPaste');\n editor.ui.registry.addToggleButton('pastetext', {\n active: false,\n icon: 'paste-text',\n tooltip: 'Paste as text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n editor.ui.registry.addToggleMenuItem('pastetext', {\n text: 'Paste as text',\n icon: 'paste-text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n };\n\n const onActionToggleFormat = (editor, fmt) => () => {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n const registerFormatButtons = editor => {\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n icon: 'superscript'\n }\n ], (btn, _idx) => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupStateToggle(editor, btn.name),\n onAction: onActionToggleFormat(editor, btn.name),\n shortcut: btn.shortcut\n });\n });\n for (let i = 1; i <= 6; i++) {\n const name = 'h' + i;\n const shortcut = `Access+${ i }`;\n editor.ui.registry.addToggleButton(name, {\n text: name.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupStateToggle(editor, name),\n onAction: onActionToggleFormat(editor, name),\n shortcut\n });\n }\n };\n const registerCommandButtons = editor => {\n global$1.each([\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n context: 'any'\n },\n {\n name: 'help',\n text: 'Help',\n action: 'mceHelp',\n icon: 'help',\n shortcut: 'Alt+0',\n context: 'any'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A',\n context: 'any'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'print',\n text: 'Print',\n action: 'mcePrint',\n icon: 'print',\n shortcut: 'Meta+P',\n context: 'any'\n }\n ], btn => {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n shortcut: btn.shortcut,\n context: btn.context\n });\n });\n global$1.each([\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'remove',\n text: 'Remove',\n action: 'Delete',\n icon: 'remove'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], btn => {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, btn.action)\n });\n });\n };\n const registerCommandToggleButtons = editor => {\n global$1.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], btn => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n onSetup: onSetupStateToggle(editor, btn.name)\n });\n });\n };\n const registerButtons$1 = editor => {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n const registerMenuItems$2 = editor => {\n global$1.each([\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n shortcut: 'Meta+C',\n context: 'any'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A',\n context: 'any'\n },\n {\n name: 'print',\n text: 'Print...',\n action: 'mcePrint',\n icon: 'print',\n shortcut: 'Meta+P',\n context: 'any'\n }\n ], menuitem => {\n editor.ui.registry.addMenuItem(menuitem.name, {\n text: menuitem.text,\n icon: menuitem.icon,\n shortcut: menuitem.shortcut,\n onAction: onActionExecCommand(editor, menuitem.action),\n context: menuitem.context\n });\n });\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n action: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n action: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n action: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n action: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut',\n shortcut: 'Meta+X'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste',\n shortcut: 'Meta+V'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], menuitem => {\n editor.ui.registry.addMenuItem(menuitem.name, {\n text: menuitem.text,\n icon: menuitem.icon,\n shortcut: menuitem.shortcut,\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, menuitem.action)\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionToggleFormat(editor, 'code')\n });\n };\n const register$3 = editor => {\n registerButtons$1(editor);\n registerMenuItems$2(editor);\n };\n\n const onSetupUndoRedoState = (editor, type) => onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', api => {\n api.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type]());\n });\n const registerMenuItems$1 = editor => {\n editor.ui.registry.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n const registerButtons = editor => {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo'),\n shortcut: 'Meta+Z'\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo'),\n shortcut: 'Meta+Y'\n });\n };\n const register$2 = editor => {\n registerMenuItems$1(editor);\n registerButtons(editor);\n };\n\n const onSetupVisualAidState = editor => onSetupEvent(editor, 'VisualAid', api => {\n api.setActive(editor.hasVisual);\n });\n const registerMenuItems = editor => {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: onSetupVisualAidState(editor),\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid'),\n context: 'any'\n });\n };\n const registerToolbarButton = editor => {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid'),\n context: 'any'\n });\n };\n const register$1 = editor => {\n registerToolbarButton(editor);\n registerMenuItems(editor);\n };\n\n const setup$6 = (editor, backstage) => {\n register$9(editor);\n register$3(editor);\n register$7(editor, backstage);\n register$2(editor);\n register$d(editor);\n register$1(editor);\n register$5(editor);\n register$8(editor);\n register$4(editor);\n register$6(editor);\n };\n\n const patchPipeConfig = config => isString(config) ? config.split(/[ ,]/) : config;\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('contextmenu_avoid_overlap', {\n processor: 'string',\n default: ''\n });\n registerOption('contextmenu_never_use_native', {\n processor: 'boolean',\n default: false\n });\n registerOption('contextmenu', {\n processor: value => {\n if (value === false) {\n return {\n value: [],\n valid: true\n };\n } else if (isString(value) || isArrayOf(value, isString)) {\n return {\n value: patchPipeConfig(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string.'\n };\n }\n },\n default: 'link linkchecker image editimage table spellchecker configurepermanentpen'\n });\n };\n const shouldNeverUseNative = option('contextmenu_never_use_native');\n const getAvoidOverlapSelector = option('contextmenu_avoid_overlap');\n const isContextMenuDisabled = editor => getContextMenu(editor).length === 0;\n const getContextMenu = editor => {\n const contextMenus = editor.ui.registry.getAll().contextMenus;\n const contextMenu = editor.options.get('contextmenu');\n if (editor.options.isSet('contextmenu')) {\n return contextMenu;\n } else {\n return filter$2(contextMenu, item => has$2(contextMenus, item));\n }\n };\n\n const nu = (x, y) => ({\n type: 'makeshift',\n x,\n y\n });\n const transpose = (pos, dx, dy) => {\n return nu(pos.x + dx, pos.y + dy);\n };\n const isTouchEvent$1 = e => e.type === 'longpress' || e.type.indexOf('touch') === 0;\n const fromPageXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.pageX, touch.pageY);\n } else {\n return nu(e.pageX, e.pageY);\n }\n };\n const fromClientXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.clientX, touch.clientY);\n } else {\n return nu(e.clientX, e.clientY);\n }\n };\n const transposeContentAreaContainer = (element, pos) => {\n const containerPos = global$8.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n const getPointAnchor = (editor, e) => {\n if (e.type === 'contextmenu' || e.type === 'longpress') {\n if (editor.inline) {\n return fromPageXY(e);\n } else {\n return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n }\n } else {\n return getSelectionAnchor(editor);\n }\n };\n const getSelectionAnchor = editor => {\n return {\n type: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n const getNodeAnchor = editor => ({\n type: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n });\n const getAnchorSpec$1 = (editor, e, anchorType) => {\n switch (anchorType) {\n case 'node':\n return getNodeAnchor(editor);\n case 'point':\n return getPointAnchor(editor, e);\n case 'selection':\n return getSelectionAnchor(editor);\n }\n };\n\n const initAndShow$1 = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const items = buildMenu();\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n menu: { markers: markers('normal') },\n data: menuData\n });\n });\n };\n\n const layouts = {\n onLtr: () => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2,\n north,\n south,\n northeast,\n southeast,\n northwest,\n southwest\n ],\n onRtl: () => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2,\n north,\n south,\n northwest,\n southwest,\n northeast,\n southeast\n ]\n };\n const bubbleSize = 12;\n const bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n const isTouchWithinSelection = (editor, e) => {\n const selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n const touch = e.touches[0];\n const rng = selection.getRng();\n const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(rngRect => rngRect.left <= touch.clientX && rngRect.right >= touch.clientX && rngRect.top <= touch.clientY && rngRect.bottom >= touch.clientY);\n }\n };\n const setupiOSOverrides = editor => {\n const originalSelection = editor.selection.getRng();\n const selectionReset = () => {\n global$9.setEditorTimeout(editor, () => {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n const preventMousedown = e => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n const clearSelectionReset = () => unbindEventListeners();\n editor.once('longpresscancel', clearSelectionReset);\n const unbindEventListeners = () => {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n const getAnchorSpec = (editor, e, anchorType) => {\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n const bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n return {\n bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n layouts,\n overrides: {\n maxWidthFunction: expandable(),\n maxHeightFunction: expandable$1()\n },\n ...anchorSpec\n };\n };\n const show = (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) => {\n const anchorSpec = getAnchorSpec(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: true,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n const highlightOnOpen = highlightImmediately ? HighlightOnOpen.HighlightMenuAndItem : HighlightOnOpen.HighlightNone;\n InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n menu: {\n markers: markers('normal'),\n highlightOnOpen\n },\n data: menuData,\n type: 'horizontal'\n }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection')));\n editor.dispatch(hideContextToolbarEvent);\n });\n };\n const initAndShow = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const detection = detect$1();\n const isiOS = detection.os.isiOS();\n const isMacOS = detection.os.isMacOS();\n const isAndroid = detection.os.isAndroid();\n const isTouch = detection.deviceType.isTouch();\n const shouldHighlightImmediately = () => !(isAndroid || isiOS || isMacOS && isTouch);\n const open = () => {\n const items = buildMenu();\n show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n };\n if ((isMacOS || isiOS) && anchorType !== 'node') {\n const openiOS = () => {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS();\n } else {\n editor.once('selectionchange', openiOS);\n editor.once('touchend', () => editor.off('selectionchange', openiOS));\n }\n } else {\n open();\n }\n };\n\n const isSeparator = item => isString(item) ? item === '|' : item.type === 'separator';\n const separator = { type: 'separator' };\n const makeContextItem = item => {\n const commonMenuItem = item => ({\n text: item.text,\n icon: item.icon,\n enabled: item.enabled,\n shortcut: item.shortcut\n });\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n ...commonMenuItem(item),\n getSubmenuItems: () => {\n const items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map$2(items, makeContextItem);\n }\n }\n };\n default:\n const commonItem = item;\n return {\n type: 'menuitem',\n ...commonMenuItem(commonItem),\n onAction: noarg(commonItem.onAction)\n };\n }\n }\n };\n const addContextMenuGroup = (xs, groupItems) => {\n if (groupItems.length === 0) {\n return xs;\n }\n const lastMenuItem = last$1(xs).filter(item => !isSeparator(item));\n const before = lastMenuItem.fold(() => [], _ => [separator]);\n return xs.concat(before).concat(groupItems).concat([separator]);\n };\n const generateContextMenu = (contextMenus, menuConfig, selectedElement) => {\n const sections = foldl(menuConfig, (acc, name) => {\n return get$h(contextMenus, name.toLowerCase()).map(menu => {\n const items = menu.update(selectedElement);\n if (isString(items) && isNotEmpty(trim$1(items))) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (isArray(items) && items.length > 0) {\n const allItems = map$2(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n }).getOrThunk(() => acc.concat([name]));\n }, []);\n if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n const isNativeOverrideKeyEvent = (editor, e) => e.ctrlKey && !shouldNeverUseNative(editor);\n const isTouchEvent = e => e.type === 'longpress' || has$2(e, 'touches');\n const isTriggeredByKeyboard = (editor, e) => !isTouchEvent(e) && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n const getSelectedElement = (editor, e) => isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n const getAnchorType = (editor, e) => {\n const selector = getAvoidOverlapSelector(editor);\n const anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n if (isNotEmpty(selector)) {\n const target = getSelectedElement(editor, e);\n const selectorExists = closest(SugarElement.fromDom(target), selector);\n return selectorExists ? 'node' : anchorType;\n } else {\n return anchorType;\n }\n };\n const setup$5 = (editor, lazySink, backstage) => {\n const detection = detect$1();\n const isTouch = detection.deviceType.isTouch;\n const contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink,\n onEscape: () => editor.focus(),\n onShow: () => backstage.setContextMenuState(true),\n onHide: () => backstage.setContextMenuState(false),\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run$1(dismissRequested(), (comp, _se) => {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n const hideContextMenu = () => InlineView.hide(contextmenu);\n const showContextMenu = e => {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n const anchorType = getAnchorType(editor, e);\n const buildMenu = () => {\n const selectedElement = getSelectedElement(editor, e);\n const registry = editor.ui.registry.getAll();\n const menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n const initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\n };\n editor.on('init', () => {\n const hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n const adt = Adt.generate([\n {\n offset: [\n 'x',\n 'y'\n ]\n },\n {\n absolute: [\n 'x',\n 'y'\n ]\n },\n {\n fixed: [\n 'x',\n 'y'\n ]\n }\n ]);\n const subtract = change => point => point.translate(-change.left, -change.top);\n const add = change => point => point.translate(change.left, change.top);\n const transform = changes => (x, y) => foldl(changes, (rest, f) => f(rest), SugarPosition(x, y));\n const asFixed = (coord, scroll, origin) => coord.fold(transform([\n add(origin),\n subtract(scroll)\n ]), transform([subtract(scroll)]), transform([]));\n const asAbsolute = (coord, scroll, origin) => coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n const asOffset = (coord, scroll, origin) => coord.fold(transform([]), transform([subtract(origin)]), transform([\n add(scroll),\n subtract(origin)\n ]));\n const withinRange = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n const getDeltas = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n const left = Math.abs(a1.left - a2.left);\n const top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n const toStyles = (coord, scroll, origin) => {\n const stylesOpt = coord.fold((x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }), (x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n }), (x, y) => ({\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }));\n return {\n right: Optional.none(),\n bottom: Optional.none(),\n ...stylesOpt\n };\n };\n const translate = (coord, deltaX, deltaY) => coord.fold((x, y) => offset(x + deltaX, y + deltaY), (x, y) => absolute(x + deltaX, y + deltaY), (x, y) => fixed(x + deltaX, y + deltaY));\n const absorb = (partialCoord, originalCoord, scroll, origin) => {\n const absorbOne = (stencil, nu) => (optX, optY) => {\n const original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left), optY.getOr(original.top));\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n };\n const offset = adt.offset;\n const absolute = adt.absolute;\n const fixed = adt.fixed;\n\n const parseAttrToInt = (element, name) => {\n const value = get$g(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n const get$1 = (component, snapsInfo) => {\n const element = component.element;\n const x = parseAttrToInt(element, snapsInfo.leftAttr);\n const y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n const set = (component, snapsInfo, pt) => {\n const element = component.element;\n set$9(element, snapsInfo.leftAttr, pt.left + 'px');\n set$9(element, snapsInfo.topAttr, pt.top + 'px');\n };\n const clear = (component, snapsInfo) => {\n const element = component.element;\n remove$8(element, snapsInfo.leftAttr);\n remove$8(element, snapsInfo.topAttr);\n };\n\n const getCoords = (component, snapInfo, coord, delta) => get$1(component, snapInfo).fold(() => coord, fixed$1 => fixed(fixed$1.left + delta.left, fixed$1.top + delta.top));\n const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => {\n const newCoord = getCoords(component, snapInfo, coord, delta);\n const snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n const fixedCoord = asFixed(newCoord, scroll, origin);\n set(component, snapInfo, fixedCoord);\n return snap.fold(() => ({\n coord: fixed(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n }), spanned => ({\n coord: spanned.output,\n extra: spanned.extra\n }));\n };\n const stopDrag = (component, snapInfo) => {\n clear(component, snapInfo);\n };\n const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, snap => {\n const sensor = snap.sensor;\n const inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return inRange ? Optional.some({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }) : Optional.none();\n });\n const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(() => {\n const bestSnap = foldl(snaps, (acc, snap) => {\n const sensor = snap.sensor;\n const deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(() => ({\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n }), bestDeltas => {\n const currAvg = (deltas.left + deltas.top) / 2;\n const bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n if (currAvg <= bestAvg) {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Optional.none(),\n snap: Optional.none()\n });\n return bestSnap.snap.map(snap => ({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }));\n });\n };\n const findSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n const snapTo$1 = (snap, scroll, origin) => ({\n coord: absorb(snap.output, snap.output, scroll, origin),\n extra: snap.extra\n });\n\n const snapTo = (component, dragConfig, _state, snap) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$c(doc);\n const origin = getOrigin(target);\n const snapPin = snapTo$1(snap, scroll, origin);\n const styles = toStyles(snapPin.coord, scroll, origin);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo\n });\n\n const initialAttribute = 'data-initial-z-index';\n const resetZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getOpt(root, initialAttribute).fold(() => remove$7(root, 'z-index'), zIndex => set$8(root, 'z-index', zIndex));\n remove$8(root, initialAttribute);\n });\n };\n const changeZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getRaw(root, 'z-index').each(zindex => {\n set$9(root, initialAttribute, zindex);\n });\n set$8(root, 'z-index', get$f(blocker.element, 'z-index'));\n });\n };\n const instigate = (anyComponent, blocker) => {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n const discard = blocker => {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container.sketch({\n dom: {\n styles: {\n 'left': '0px',\n 'top': '0px',\n 'width': '100%',\n 'height': '100%',\n 'position': 'fixed',\n 'z-index': '1000000000000000'\n },\n classes: [blockerClass]\n },\n events: blockerEvents\n }));\n\n var SnapSchema = optionObjOf('snaps', [\n required$1('getSnapPoints'),\n onHandler('onSensor'),\n required$1('leftAttr'),\n required$1('topAttr'),\n defaulted('lazyViewport', win),\n defaulted('mustSnap', false)\n ]);\n\n const schema$6 = [\n defaulted('useFixed', never),\n required$1('blockerClass'),\n defaulted('getTarget', identity),\n defaulted('onDrag', noop),\n defaulted('repositionTarget', true),\n defaulted('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n const getCurrentCoord = target => lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), (left, top, position) => {\n const nu = position === 'fixed' ? fixed : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(() => {\n const location = absolute$3(target);\n return absolute(location.left, location.top);\n });\n const clampCoords = (component, coords, scroll, origin, startData) => {\n const bounds = startData.bounds;\n const absoluteCoord = asAbsolute(coords, scroll, origin);\n const newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n const newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n const newCoords = absolute(newX, newY);\n return coords.fold(() => {\n const offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left, offset$1.top);\n }, constant$1(newCoords), () => {\n const fixed$1 = asFixed(newCoords, scroll, origin);\n return fixed(fixed$1.left, fixed$1.top);\n });\n };\n const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => {\n const newCoord = optSnaps.fold(() => {\n const translated = translate(currentCoord, delta.left, delta.top);\n const fixedCoord = asFixed(translated, scroll, origin);\n return fixed(fixedCoord.left, fixedCoord.top);\n }, snapInfo => {\n const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(extra => {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n const dragBy = (component, dragConfig, startData, delta) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$c(doc);\n const origin = getOrigin(target);\n const currentCoord = getCurrentCoord(target);\n const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n const styles = toStyles(newCoord, scroll, origin);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n const calcStartData = (dragConfig, comp) => ({\n bounds: dragConfig.getBounds(),\n height: getOuter$2(comp.element),\n width: getOuter$1(comp.element)\n });\n const move = (component, dragConfig, dragState, dragMode, event) => {\n const delta = dragState.update(dragMode, event);\n const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component));\n delta.each(dlt => {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n const stop = (component, blocker, dragConfig, dragState) => {\n blocker.each(discard);\n dragConfig.snaps.each(snapInfo => {\n stopDrag(component, snapInfo);\n });\n const target = dragConfig.getTarget(component.element);\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n const handlers = events => (dragConfig, dragState) => {\n const updateStartState = comp => {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive$2([\n run$1(windowScroll(), comp => {\n dragState.getStartData().each(() => updateStartState(comp));\n }),\n ...events(dragConfig, dragState, updateStartState)\n ]);\n };\n\n const init$3 = dragApi => derive$2([\n run$1(mousedown(), dragApi.forceDrop),\n run$1(mouseup(), dragApi.drop),\n run$1(mousemove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n }),\n run$1(mouseout(), dragApi.delayDrop)\n ]);\n\n const getData$1 = event => Optional.from(SugarPosition(event.x, event.y));\n const getDelta$1 = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n const events$3 = (dragConfig, dragState, updateStartState) => [run$1(mousedown(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState);\n const delayDrop = DelayedFunction(stop$1, 200);\n const dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: event => {\n delayDrop.cancel();\n move(component, dragConfig, dragState, MouseData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$3(dragApi));\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n const schema$5 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$3) })\n ];\n\n const init$2 = dragApi => derive$2([\n run$1(touchstart(), dragApi.forceDrop),\n run$1(touchend(), dragApi.drop),\n run$1(touchcancel(), dragApi.drop),\n run$1(touchmove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n\n const getDataFrom = touches => {\n const touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n const getData = event => {\n const raw = event.raw;\n const touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n const getDelta = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData,\n getDelta: getDelta\n });\n\n const events$2 = (dragConfig, dragState, updateStartState) => {\n const blockerSingleton = value$4();\n const stopBlocking = component => {\n stop(component, blockerSingleton.get(), dragConfig, dragState);\n blockerSingleton.clear();\n };\n return [\n run$1(touchstart(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n const stop = () => stopBlocking(component);\n const dragApi = {\n drop: stop,\n delayDrop: noop,\n forceDrop: stop,\n move: event => {\n move(component, dragConfig, dragState, TouchData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n blockerSingleton.set(blocker);\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run$1(touchmove(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run$1(touchend(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n stopBlocking(component);\n }),\n run$1(touchcancel(), stopBlocking)\n ];\n };\n const schema$4 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$2) })\n ];\n\n const events$1 = (dragConfig, dragState, updateStartState) => [\n ...events$3(dragConfig, dragState, updateStartState),\n ...events$2(dragConfig, dragState, updateStartState)\n ];\n const schema$3 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$1) })\n ];\n\n const mouse = schema$5;\n const touch = schema$4;\n const mouseOrTouch = schema$3;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n const init$1 = () => {\n let previous = Optional.none();\n let startData = Optional.none();\n const reset = () => {\n previous = Optional.none();\n startData = Optional.none();\n };\n const calculateDelta = (mode, nu) => {\n const result = previous.map(old => mode.getDelta(old, nu));\n previous = Optional.some(nu);\n return result;\n };\n const update = (mode, dragEvent) => mode.getData(dragEvent).bind(nuData => calculateDelta(mode, nuData));\n const setStartData = data => {\n startData = Optional.some(data);\n };\n const getStartData = () => startData;\n const readState = constant$1({});\n return nu$7({\n readState,\n reset,\n update,\n getStartData,\n setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$1\n });\n\n const Dragging = createModes({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: (dragConfig, dragState) => {\n const dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: sConfig => ({\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n })\n },\n state: DragState,\n apis: DraggingApis\n });\n\n const snapWidth = 40;\n const snapOffset = snapWidth / 2;\n const calcSnap = (selectorOpt, td, x, y, width, height) => selectorOpt.fold(() => Dragging.snap({\n sensor: absolute(x - snapOffset, y - snapOffset),\n range: SugarPosition(width, height),\n output: absolute(Optional.some(x), Optional.some(y)),\n extra: { td }\n }), selectorHandle => {\n const sensorLeft = x - snapOffset;\n const sensorTop = y - snapOffset;\n const sensorWidth = snapWidth;\n const sensorHeight = snapWidth;\n const rect = selectorHandle.element.dom.getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute(sensorLeft, sensorTop),\n range: SugarPosition(sensorWidth, sensorHeight),\n output: absolute(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n extra: { td }\n });\n });\n const getSnapsConfig = (getSnapPoints, cell, onChange) => {\n const isSameCell = (cellOpt, td) => cellOpt.exists(currentTd => eq(currentTd, td));\n return {\n getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: (component, extra) => {\n const td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(td);\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n const createSelector = snaps => record(Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-selector']\n },\n buttonBehaviours: derive$1([\n Dragging.config({\n mode: 'mouseOrTouch',\n blockerClass: 'blocker',\n snaps\n }),\n Unselecting.config({})\n ]),\n eventOrder: {\n mousedown: [\n 'dragging',\n 'alloy.base.behaviour'\n ],\n touchstart: [\n 'dragging',\n 'alloy.base.behaviour'\n ]\n }\n }));\n const setup$4 = (editor, sink) => {\n const tlTds = Cell([]);\n const brTds = Cell([]);\n const isVisible = Cell(false);\n const startCell = value$4();\n const finishCell = value$4();\n const getTopLeftSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n const getTopLeftSnaps = () => map$2(tlTds.get(), td => getTopLeftSnap(td));\n const getBottomRightSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n const getBottomRightSnaps = () => map$2(brTds.get(), td => getBottomRightSnap(td));\n const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, start => {\n finishCell.get().each(finish => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, finish => {\n startCell.get().each(start => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const memTopLeft = createSelector(topLeftSnaps);\n const memBottomRight = createSelector(bottomRightSnaps);\n const topLeft = build$1(memTopLeft.asSpec());\n const bottomRight = build$1(memBottomRight.asSpec());\n const showOrHideHandle = (selector, cell, isAbove, isBelow) => {\n const cellRect = cell.dom.getBoundingClientRect();\n remove$7(selector.element, 'display');\n const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n const aboveViewport = isAbove(cellRect);\n const belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$8(selector.element, 'display', 'none');\n }\n };\n const snapTo = (selector, cell, getSnapConfig, pos) => {\n const snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n const isAbove = rect => rect[pos] < 0;\n const isBelow = (rect, viewportHeight) => rect[pos] > viewportHeight;\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n const snapTopLeft = cell => snapTo(topLeft, cell, getTopLeftSnap, 'top');\n const snapLastTopLeft = () => startCell.get().each(snapTopLeft);\n const snapBottomRight = cell => snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n const snapLastBottomRight = () => finishCell.get().each(snapBottomRight);\n if (detect$1().deviceType.isTouch()) {\n const domToSugar = arr => map$2(arr, SugarElement.fromDom);\n editor.on('TableSelectionChange', e => {\n if (!isVisible.get()) {\n attach(sink, topLeft);\n attach(sink, bottomRight);\n isVisible.set(true);\n }\n const start = SugarElement.fromDom(e.start);\n const finish = SugarElement.fromDom(e.finish);\n startCell.set(start);\n finishCell.set(finish);\n Optional.from(e.otherCells).each(otherCells => {\n tlTds.set(domToSugar(otherCells.upOrLeftCells));\n brTds.set(domToSugar(otherCells.downOrRightCells));\n snapTopLeft(start);\n snapBottomRight(finish);\n });\n });\n editor.on('ResizeEditor ResizeWindow ScrollContent', () => {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', () => {\n if (isVisible.get()) {\n detach(topLeft);\n detach(bottomRight);\n isVisible.set(false);\n }\n startCell.clear();\n finishCell.clear();\n });\n }\n };\n\n var Logo = \"\\n\";\n\n const describedBy = (describedElement, describeElement) => {\n const describeId = Optional.from(get$g(describedElement, 'id')).getOrThunk(() => {\n const id = generate$6('aria');\n set$9(describeElement, 'id', id);\n return id;\n });\n set$9(describedElement, 'aria-describedby', describeId);\n };\n const remove = describedElement => {\n remove$8(describedElement, 'aria-describedby');\n };\n\n const isHidden = elm => elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus') || elm.getAttribute('data-mce-type') === 'bookmark';\n const renderElementPath = (editor, settings, providersBackstage) => {\n var _a;\n const delimiter = (_a = settings.delimiter) !== null && _a !== void 0 ? _a : '\\u203A';\n const renderElement = (name, element, index) => Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: { 'data-index': index }\n },\n components: [text$2(name)],\n action: _btn => {\n editor.focus();\n editor.selection.select(element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: providersBackstage.translate([\n 'Select the {0} element',\n element.nodeName.toLowerCase()\n ]),\n onShow: (comp, tooltip) => {\n describedBy(comp.element, tooltip.element);\n },\n onHide: comp => {\n remove(comp.element);\n }\n })\n }),\n DisablingConfigs.button(providersBackstage.isDisabled),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any'))\n ])\n });\n const renderDivider = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true }\n },\n components: [text$2(` ${ delimiter } `)]\n });\n const renderPathData = data => foldl(data, (acc, path, index) => {\n const element = renderElement(path.name, path.element, index);\n if (index === 0) {\n return acc.concat([element]);\n } else {\n return acc.concat([\n renderDivider(),\n element\n ]);\n }\n }, []);\n const updatePath = parents => {\n const newPath = [];\n let i = parents.length;\n while (i-- > 0) {\n const parent = parents[i];\n if (parent.nodeType === 1 && !isHidden(parent)) {\n const args = fireResolveName(editor, parent);\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Disabling.config({ disabled: providersBackstage.isDisabled }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached((comp, _e) => {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', () => Keying.focusIn(comp));\n editor.on('NodeChange', e => {\n const newPath = updatePath(e.parents);\n const newChildren = newPath.length > 0 ? renderPathData(newPath) : [];\n Replacing.set(comp, newChildren);\n });\n })])\n ]),\n components: []\n };\n };\n\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n const getDimensions = (editor, deltas, resizeType, originalHeight, originalWidth) => {\n const dimensions = { height: calcCappedSize(originalHeight + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor)) };\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor));\n }\n return dimensions;\n };\n const resize = (editor, deltas, resizeType) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const dimensions = getDimensions(editor, deltas, resizeType, get$e(container), get$d(container));\n each(dimensions, (val, dim) => {\n if (isNumber(val)) {\n set$8(container, dim, numToPx(val));\n }\n });\n fireResizeEditor(editor);\n };\n\n const getResizeType = editor => {\n const resize = getResize(editor);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n const keyboardHandler = (editor, resizeType, x, y) => {\n const scale = 20;\n const delta = SugarPosition(x * scale, y * scale);\n resize(editor, delta, resizeType);\n return Optional.some(true);\n };\n const renderResizeHandler = (editor, providersBackstage) => {\n const resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n const resizeLabel = resizeType === ResizeTypes.Both ? 'Press the arrow keys to resize the editor.' : 'Press the Up and Down arrow keys to resize the editor.';\n return Optional.some(render$3('resize-handle', {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: {\n 'aria-label': providersBackstage.translate(resizeLabel),\n 'data-mce-name': 'resize-handle'\n },\n behaviours: [\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: (_comp, _target, delta) => resize(editor, delta, resizeType),\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: () => keyboardHandler(editor, resizeType, -1, 0),\n onRight: () => keyboardHandler(editor, resizeType, 1, 0),\n onUp: () => keyboardHandler(editor, resizeType, 0, -1),\n onDown: () => keyboardHandler(editor, resizeType, 0, 1)\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate('Resize') }))\n ]\n }, providersBackstage.icons));\n };\n\n const renderWordCount = (editor, providersBackstage) => {\n const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$2(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')),\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute$1(comp => {\n const currentVal = Representing.getValue(comp);\n const newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(comp => {\n editor.on('wordCountUpdate', e => {\n const {mode} = Representing.getValue(comp);\n Representing.setValue(comp, {\n mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ]\n }\n });\n };\n\n const renderStatusbar = (editor, providersBackstage) => {\n const renderBranding = () => {\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding']\n },\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': 'https://www.tiny.cloud/powered-by-tiny?utm_campaign=poweredby&utm_source=tiny&utm_medium=referral&utm_content=v7',\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-label': editor.translate([\n 'Build with {0}',\n 'TinyMCE'\n ])\n },\n innerHtml: editor.translate([\n 'Build with {0}',\n Logo.trim()\n ])\n },\n behaviours: derive$1([Focusing.config({})])\n }]\n };\n };\n const renderHelpAccessibility = () => {\n const shortcutText = convertText('Alt+0');\n const text = `Press {0} for help`;\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__help-text']\n },\n components: [text$2(global$5.translate([\n text,\n shortcutText\n ]))]\n };\n };\n const renderRightContainer = () => {\n const components = [];\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (useBranding(editor)) {\n components.push(renderBranding());\n }\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__right-container']\n },\n components\n };\n };\n const getTextComponents = () => {\n const components = [];\n const shouldRenderHelp = useHelpAccessibility(editor);\n const shouldRenderElementPath = useElementPath(editor);\n const shouldRenderRightContainer = useBranding(editor) || editor.hasPlugin('wordcount');\n const getTextComponentClasses = () => {\n const flexStart = 'tox-statusbar__text-container--flex-start';\n const flexEnd = 'tox-statusbar__text-container--flex-end';\n const spaceAround = 'tox-statusbar__text-container--space-around';\n if (shouldRenderHelp) {\n const container3Columns = 'tox-statusbar__text-container-3-cols';\n if (!shouldRenderRightContainer && !shouldRenderElementPath) {\n return [\n container3Columns,\n spaceAround\n ];\n }\n if (shouldRenderRightContainer && !shouldRenderElementPath) {\n return [\n container3Columns,\n flexEnd\n ];\n }\n return [\n container3Columns,\n flexStart\n ];\n }\n return [shouldRenderRightContainer && !shouldRenderElementPath ? flexEnd : flexStart];\n };\n if (shouldRenderElementPath) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (shouldRenderHelp) {\n components.push(renderHelpAccessibility());\n }\n if (shouldRenderRightContainer) {\n components.push(renderRightContainer());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: [\n 'tox-statusbar__text-container',\n ...getTextComponentClasses()\n ]\n },\n components\n }];\n }\n return [];\n };\n const getComponents = () => {\n const components = getTextComponents();\n const resizeHandler = renderResizeHandler(editor, providersBackstage);\n return components.concat(resizeHandler.toArray());\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n const getLazyMothership = (label, singleton) => singleton.get().getOrDie(`UI for ${ label } has not been rendered`);\n const setup$3 = (editor, setupForTheme) => {\n const isInline = editor.inline;\n const mode = isInline ? Inline : Iframe;\n const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n const lazyUiRefs = LazyUiReferences();\n const lazyMothership = value$4();\n const lazyDialogMothership = value$4();\n const lazyPopupMothership = value$4();\n const platform = detect$1();\n const isTouch = platform.deviceType.isTouch();\n const touchPlatformClass = 'tox-platform-touch';\n const deviceClasses = isTouch ? [touchPlatformClass] : [];\n const isToolbarBottom = isToolbarLocationBottom(editor);\n const toolbarMode = getToolbarMode(editor);\n const memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n const memBottomAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-bottom-anchorbar']\n }\n });\n const lazyHeader = () => lazyUiRefs.mainUi.get().map(ui => ui.outerContainer).bind(OuterContainer.getHeader);\n const lazyDialogSinkResult = () => Result.fromOption(lazyUiRefs.dialogUi.get().map(ui => ui.sink), 'UI has not been rendered');\n const lazyPopupSinkResult = () => Result.fromOption(lazyUiRefs.popupUi.get().map(ui => ui.sink), '(popup) UI has not been rendered');\n const lazyAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('anchor bar', memAnchorBar.getOpt);\n const lazyBottomAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('bottom anchor bar', memBottomAnchorBar.getOpt);\n const lazyToolbar = lazyUiRefs.lazyGetInOuterOrDie('toolbar', OuterContainer.getToolbar);\n const lazyThrobber = lazyUiRefs.lazyGetInOuterOrDie('throbber', OuterContainer.getThrobber);\n const backstages = init$5({\n popup: lazyPopupSinkResult,\n dialog: lazyDialogSinkResult\n }, editor, lazyAnchorBar, lazyBottomAnchorBar);\n const makeHeaderPart = () => {\n const verticalDirAttributes = { attributes: { [Attribute]: isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom } };\n const partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstages.popup,\n onEscape: () => {\n editor.focus();\n }\n });\n const partToolbar = OuterContainer.parts.toolbar({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: backstages.popup.shared.getSink,\n providers: backstages.popup.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n onToolbarToggled: state => {\n fireToggleToolbarDrawer(editor, state);\n },\n type: toolbarMode,\n lazyToolbar,\n lazyHeader: () => lazyHeader().getOrDie('Could not find header element'),\n ...verticalDirAttributes\n });\n const partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstages.popup.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n type: toolbarMode\n });\n const hasMultipleToolbar = isMultipleToolbars(editor);\n const hasToolbar = isToolbarEnabled(editor);\n const hasMenubar = isMenubarEnabled(editor);\n const shouldHavePromotion = promotionEnabled(editor);\n const partPromotion = makePromotion();\n const hasAnyContents = hasMultipleToolbar || hasToolbar || hasMenubar;\n const getPartToolbar = () => {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n const menubarCollection = shouldHavePromotion ? [\n partPromotion,\n partMenubar\n ] : [partMenubar];\n return OuterContainer.parts.header({\n dom: {\n tag: 'div',\n classes: ['tox-editor-header'].concat(hasAnyContents ? [] : ['tox-editor-header--empty']),\n ...verticalDirAttributes\n },\n components: flatten([\n hasMenubar ? menubarCollection : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor,\n sharedBackstage: backstages.popup.shared\n });\n };\n const makePromotion = () => {\n return OuterContainer.parts.promotion({\n dom: {\n tag: 'div',\n classes: ['tox-promotion']\n }\n });\n };\n const makeSidebarDefinition = () => {\n const partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n const partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n };\n const renderDialogUi = () => {\n const uiContainer = getUiContainer(editor);\n const isGridUiContainer = eq(body(), uiContainer) && get$f(uiContainer, 'display') === 'grid';\n const sinkSpec = {\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(deviceClasses),\n attributes: { ...global$5.isRtl() ? { dir: 'rtl' } : {} }\n },\n behaviours: derive$1([Positioning.config({ useFixed: () => header.isDocked(lazyHeader) })])\n };\n const reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive$2([run$1(windowResize(), comp => {\n set$8(comp.element, 'width', document.body.clientWidth + 'px');\n })])\n };\n const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {}));\n const uiMothership = takeover(sink);\n lazyDialogMothership.set(uiMothership);\n return {\n sink,\n mothership: uiMothership\n };\n };\n const renderPopupUi = () => {\n const sinkSpec = {\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-silver-popup-sink',\n 'tox-tinymce-aux'\n ].concat(deviceClasses),\n attributes: { ...global$5.isRtl() ? { dir: 'rtl' } : {} }\n },\n behaviours: derive$1([Positioning.config({\n useFixed: () => header.isDocked(lazyHeader),\n getBounds: () => setupForTheme.getPopupSinkBounds()\n })])\n };\n const sink = build$1(sinkSpec);\n const uiMothership = takeover(sink);\n lazyPopupMothership.set(uiMothership);\n return {\n sink,\n mothership: uiMothership\n };\n };\n const renderMainUi = () => {\n const partHeader = makeHeaderPart();\n const sidebarContainer = makeSidebarDefinition();\n const partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstages.popup\n });\n const partViewWrapper = OuterContainer.parts.viewWrapper({ backstage: backstages.popup });\n const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstages.popup.shared.providers)) : Optional.none();\n const editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [sidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n const editorContainer = OuterContainer.parts.editorContainer({\n components: flatten([\n editorComponents,\n isInline ? [] : [memBottomAnchorBar.asSpec()]\n ])\n });\n const isHidden = isDistractionFree(editor);\n const attributes = {\n role: 'application',\n ...global$5.isRtl() ? { dir: 'rtl' } : {},\n ...isHidden ? { 'aria-hidden': 'true' } : {}\n };\n const outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses),\n styles: {\n visibility: 'hidden',\n ...isHidden ? {\n opacity: '0',\n border: '0'\n } : {}\n },\n attributes\n },\n components: [\n editorContainer,\n ...isInline ? [] : [\n partViewWrapper,\n ...statusbar.toArray()\n ],\n partThrobber\n ],\n behaviours: derive$1([\n toggleOnReceive(() => backstages.popup.shared.providers.checkUiComponentContext('any')),\n Disabling.config({ disableClass: 'tox-tinymce--disabled' }),\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle'\n })\n ])\n }));\n const mothership = takeover(outerContainer);\n lazyMothership.set(mothership);\n return {\n mothership,\n outerContainer\n };\n };\n const setEditorSize = outerContainer => {\n const parsedHeight = numToPx(getHeightWithFallback(editor));\n const parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue$1('div', 'width', parsedWidth)) {\n set$8(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue$1('div', 'height', parsedHeight)) {\n set$8(outerContainer.element, 'height', parsedHeight);\n } else {\n set$8(outerContainer.element, 'height', '400px');\n }\n }\n return parsedHeight;\n };\n const setupShortcutsAndCommands = outerContainer => {\n editor.addShortcut('alt+F9', 'focus menubar', () => {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.addShortcut('alt+F10', 'focus toolbar', () => {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', (_ui, options) => {\n if (options === null || options === void 0 ? void 0 : options.skipFocus) {\n OuterContainer.toggleToolbarDrawerWithoutFocusing(outerContainer);\n } else {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n }\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', () => OuterContainer.isToolbarDrawerToggled(outerContainer));\n };\n const renderUIWithRefs = uiRefs => {\n const {mainUi, popupUi, uiMotherships} = uiRefs;\n map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name) => {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n const {buttons, menuItems, contextToolbars, sidebars, views} = editor.ui.registry.getAll();\n const toolbarOpt = getMultipleToolbarsOption(editor);\n const rawUiConfig = {\n menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)),\n allowToolbarGroups: toolbarMode === ToolbarMode$1.floating,\n buttons,\n sidebar: sidebars,\n views\n };\n setupShortcutsAndCommands(mainUi.outerContainer);\n setup$b(editor, mainUi.mothership, uiMotherships);\n header.setup(editor, backstages.popup.shared, lazyHeader);\n setup$6(editor, backstages.popup);\n setup$5(editor, backstages.popup.shared.getSink, backstages.popup);\n setup$8(editor);\n setup$7(editor, lazyThrobber, backstages.popup.shared);\n register$a(editor, contextToolbars, popupUi.sink, { backstage: backstages.popup });\n setup$4(editor, popupUi.sink);\n const elm = editor.getElement();\n const height = setEditorSize(mainUi.outerContainer);\n const args = {\n targetNode: elm,\n height\n };\n return mode.render(editor, uiRefs, rawUiConfig, backstages.popup, args);\n };\n const reuseDialogUiForPopuUi = dialogUi => {\n lazyPopupMothership.set(dialogUi.mothership);\n return dialogUi;\n };\n const renderUI = () => {\n const mainUi = renderMainUi();\n const dialogUi = renderDialogUi();\n const popupUi = isSplitUiMode(editor) ? renderPopupUi() : reuseDialogUiForPopuUi(dialogUi);\n lazyUiRefs.dialogUi.set(dialogUi);\n lazyUiRefs.popupUi.set(popupUi);\n lazyUiRefs.mainUi.set(mainUi);\n const uiRefs = {\n popupUi,\n dialogUi,\n mainUi,\n uiMotherships: lazyUiRefs.getUiMotherships()\n };\n return renderUIWithRefs(uiRefs);\n };\n return {\n popups: {\n backstage: backstages.popup,\n getMothership: () => getLazyMothership('popups', lazyPopupMothership)\n },\n dialogs: {\n backstage: backstages.dialog,\n getMothership: () => getLazyMothership('dialogs', lazyDialogMothership)\n },\n renderUI\n };\n };\n\n const get = element => element.dom.textContent;\n\n const labelledBy = (labelledElement, labelElement) => {\n const labelId = getOpt(labelledElement, 'id').fold(() => {\n const id = generate$6('dialog-label');\n set$9(labelElement, 'id', id);\n return id;\n }, identity);\n set$9(labelledElement, 'aria-labelledby', labelId);\n };\n\n const schema$2 = constant$1([\n required$1('lazySink'),\n option$3('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted('useTabstopAt', always),\n defaulted('firstTabstop', 0),\n defaulted('eventOrder', {}),\n field('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n const basic = { sketch: identity };\n const parts$2 = constant$1([\n optional({\n name: 'draghandle',\n overrides: (detail, spec) => {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: handle => {\n return ancestor(handle, '[role=\"dialog\"]').getOr(handle);\n },\n blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n getBounds: detail.getDragBounds\n })])\n };\n }\n }),\n required({\n schema: [required$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [required$1('dom')],\n name: 'footer'\n }),\n external({\n factory: {\n sketch: (spec, detail) => ({\n ...spec,\n dom: detail.dom,\n components: detail.components\n })\n },\n schema: [\n defaulted('dom', {\n tag: 'div',\n styles: {\n position: 'fixed',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px'\n }\n }),\n defaulted('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n const factory$4 = (detail, components, spec, externals) => {\n const dialogComp = value$4();\n const showDialog = dialog => {\n dialogComp.set(dialog);\n const sink = detail.lazySink(dialog).getOrDie();\n const externalBlocker = externals.blocker();\n const blocker = sink.getSystem().build({\n ...externalBlocker,\n components: externalBlocker.components.concat([premade(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), () => {\n Blocking.isBlocked(dialog) ? noop() : Keying.focusIn(dialog);\n })])\n ])\n });\n attach(sink, blocker);\n Keying.focusIn(dialog);\n };\n const hideDialog = dialog => {\n dialogComp.clear();\n parent(dialog.element).each(blockerDom => {\n dialog.getSystem().getByDom(blockerDom).each(blocker => {\n detach(blocker);\n });\n });\n };\n const getDialogBody = dialog => getPartOrDie(dialog, detail, 'body');\n const getDialogFooter = dialog => getPart(dialog, detail, 'footer');\n const setBusy = (dialog, getBusySpec) => {\n Blocking.block(dialog, getBusySpec);\n };\n const setIdle = dialog => {\n Blocking.unblock(dialog);\n };\n const modalEventsId = generate$6('modal-events');\n const eventOrder = {\n ...detail.eventOrder,\n [attachedToDom()]: [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || [])\n };\n const browser = detect$1();\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle,\n setBusy\n },\n eventOrder,\n domModification: {\n attributes: {\n 'role': 'dialog',\n 'aria-modal': 'true'\n }\n },\n behaviours: augment(detail.modalBehaviours, [\n Replacing.config({}),\n Keying.config({\n mode: 'cyclic',\n onEnter: detail.onExecute,\n onEscape: detail.onEscape,\n useTabstopAt: detail.useTabstopAt,\n firstTabstop: detail.firstTabstop\n }),\n Blocking.config({ getRoot: dialogComp.get }),\n config(modalEventsId, [runOnAttached(c => {\n const titleElm = getPartOrDie(c, detail, 'title').element;\n const title = get(titleElm);\n if (browser.os.isMacOS() && isNonNullable(title)) {\n set$9(c.element, 'aria-label', title);\n } else {\n labelledBy(c.element, titleElm);\n }\n })])\n ])\n };\n };\n const ModalDialog = composite({\n name: 'ModalDialog',\n configFields: schema$2(),\n partFields: parts$2(),\n factory: factory$4,\n apis: {\n show: (apis, dialog) => {\n apis.show(dialog);\n },\n hide: (apis, dialog) => {\n apis.hide(dialog);\n },\n getBody: (apis, dialog) => apis.getBody(dialog),\n getFooter: (apis, dialog) => apis.getFooter(dialog),\n setBusy: (apis, dialog, getBusySpec) => {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: (apis, dialog) => {\n apis.setIdle(dialog);\n }\n }\n });\n\n const dialogToggleMenuItemSchema = objOf([\n type,\n name$1\n ].concat(commonMenuItemFields));\n const dialogToggleMenuItemDataProcessor = boolean;\n\n const baseFooterButtonFields = [\n generatedName('button'),\n optionalIcon,\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n primary,\n enabled,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary'\n ]),\n defaultedString('context', 'mode:design')\n ];\n const dialogFooterButtonFields = [\n ...baseFooterButtonFields,\n text\n ];\n const normalFooterButtonFields = [\n requiredStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ]),\n ...dialogFooterButtonFields\n ];\n const menuFooterButtonFields = [\n requiredStringEnum('type', ['menu']),\n optionalText,\n optionalTooltip,\n optionalIcon,\n requiredArrayOf('items', dialogToggleMenuItemSchema),\n ...baseFooterButtonFields\n ];\n const toggleButtonSpecFields = [\n ...baseFooterButtonFields,\n requiredStringEnum('type', ['togglebutton']),\n optionalTooltip,\n optionalIcon,\n optionalText,\n defaultedBoolean('active', false)\n ];\n const dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields,\n togglebutton: toggleButtonSpecFields\n });\n\n const alertBannerFields = [\n type,\n text,\n requiredStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n icon,\n defaulted('url', '')\n ];\n const alertBannerSchema = objOf(alertBannerFields);\n\n const createBarFields = itemsField => [\n type,\n itemsField\n ];\n\n const buttonFields = [\n type,\n text,\n enabled,\n generatedName('button'),\n optionalIcon,\n borderless,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary',\n 'toolbar'\n ]),\n primary,\n defaultedString('context', 'mode:design')\n ];\n const buttonSchema = objOf(buttonFields);\n\n const formComponentFields = [\n type,\n name$1\n ];\n const formComponentWithLabelFields = formComponentFields.concat([optionalLabel]);\n\n const checkboxFields = formComponentFields.concat([\n label,\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const checkboxSchema = objOf(checkboxFields);\n const checkboxDataProcessor = boolean;\n\n const collectionFields = formComponentWithLabelFields.concat([\n defaultedColumns('auto'),\n defaultedString('context', 'mode:design')\n ]);\n const collectionSchema = objOf(collectionFields);\n const collectionDataProcessor = arrOfObj([\n value$1,\n text,\n icon\n ]);\n\n const colorInputFields = formComponentWithLabelFields.concat([\n defaultedString('storageKey', 'default'),\n defaultedString('context', 'mode:design')\n ]);\n const colorInputSchema = objOf(colorInputFields);\n const colorInputDataProcessor = string;\n\n const colorPickerFields = formComponentWithLabelFields;\n const colorPickerSchema = objOf(colorPickerFields);\n const colorPickerDataProcessor = string;\n\n const customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredString('scriptId'),\n requiredString('scriptUrl'),\n optionFunction('onFocus'),\n defaultedPostMsg('settings', undefined)\n ]);\n const customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredFunction('init')\n ]);\n const customEditorSchema = valueOf(v => asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(() => asRaw('customeditor.new', objOfOnly(customEditorFields), v)));\n const customEditorDataProcessor = string;\n\n const dropZoneFields = formComponentWithLabelFields.concat([defaultedString('context', 'mode:design')]);\n const dropZoneSchema = objOf(dropZoneFields);\n const dropZoneDataProcessor = arrOfVal();\n\n const createGridFields = itemsField => [\n type,\n requiredNumber('columns'),\n itemsField\n ];\n\n const htmlPanelFields = [\n type,\n requiredString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ]),\n defaultedFunction('onInit', noop),\n defaultedBoolean('stretched', false)\n ];\n const htmlPanelSchema = objOf(htmlPanelFields);\n\n const iframeFields = formComponentWithLabelFields.concat([\n defaultedBoolean('border', false),\n defaultedBoolean('sandboxed', true),\n defaultedBoolean('streamContent', false),\n defaultedBoolean('transparent', true)\n ]);\n const iframeSchema = objOf(iframeFields);\n const iframeDataProcessor = string;\n\n const imagePreviewSchema = objOf(formComponentFields.concat([optionString('height')]));\n const imagePreviewDataProcessor = objOf([\n requiredString('url'),\n optionNumber('zoom'),\n optionNumber('cachedWidth'),\n optionNumber('cachedHeight')\n ]);\n\n const inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const inputSchema = objOf(inputFields);\n const inputDataProcessor = string;\n\n const createLabelFields = itemsField => [\n type,\n label,\n itemsField,\n defaultedStringEnum('align', 'start', [\n 'start',\n 'center',\n 'end'\n ]),\n optionString('for')\n ];\n\n const listBoxSingleItemFields = [\n text,\n value$1\n ];\n const listBoxNestedItemFields = [\n text,\n requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema))\n ];\n const listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n const listBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOf('items', listBoxItemSchema),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const listBoxSchema = objOf(listBoxFields);\n const listBoxDataProcessor = string;\n\n const selectBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOfObj('items', [\n text,\n value$1\n ]),\n defaultedNumber('size', 1),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const selectBoxSchema = objOf(selectBoxFields);\n const selectBoxDataProcessor = string;\n\n const sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const sizeInputSchema = objOf(sizeInputFields);\n const sizeInputDataProcessor = objOf([\n requiredString('width'),\n requiredString('height')\n ]);\n\n const sliderFields = formComponentFields.concat([\n label,\n defaultedNumber('min', 0),\n defaultedNumber('max', 0)\n ]);\n const sliderSchema = objOf(sliderFields);\n const sliderInputDataProcessor = number;\n\n const tableFields = [\n type,\n requiredArrayOf('header', string),\n requiredArrayOf('cells', arrOf(string))\n ];\n const tableSchema = objOf(tableFields);\n\n const textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const textAreaSchema = objOf(textAreaFields);\n const textAreaDataProcessor = string;\n\n const baseTreeItemFields = [\n requiredStringEnum('type', [\n 'directory',\n 'leaf'\n ]),\n title,\n requiredString('id'),\n optionOf('menu', MenuButtonSchema),\n optionString('customStateIcon'),\n optionString('customStateIconTooltip')\n ];\n const treeItemLeafFields = baseTreeItemFields;\n const treeItemLeafSchema = objOf(treeItemLeafFields);\n const treeItemDirectoryFields = baseTreeItemFields.concat([requiredArrayOf('children', thunkOf('children', () => {\n return choose$2('type', {\n directory: treeItemDirectorySchema,\n leaf: treeItemLeafSchema\n });\n }))]);\n const treeItemDirectorySchema = objOf(treeItemDirectoryFields);\n const treeItemSchema = choose$2('type', {\n directory: treeItemDirectorySchema,\n leaf: treeItemLeafSchema\n });\n const treeFields = [\n type,\n requiredArrayOf('items', treeItemSchema),\n optionFunction('onLeafAction'),\n optionFunction('onToggleExpand'),\n defaultedArrayOf('defaultExpandedIds', [], string),\n optionString('defaultSelectedId')\n ];\n const treeSchema = objOf(treeFields);\n\n const urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n enabled,\n optionString('picker_text'),\n defaultedString('context', 'mode:design')\n ]);\n const urlInputSchema = objOf(urlInputFields);\n const urlInputDataProcessor = objOf([\n value$1,\n defaultedMeta\n ]);\n\n const createItemsField = name => field$1('items', 'items', required$2(), arrOf(valueOf(v => asRaw(`Checking item of ${ name }`, itemSchema, v).fold(sErr => Result.error(formatError(sErr)), passValue => Result.value(passValue)))));\n const itemSchema = valueThunk(() => choose$2('type', {\n alertbanner: alertBannerSchema,\n bar: objOf(createBarFields(createItemsField('bar'))),\n button: buttonSchema,\n checkbox: checkboxSchema,\n colorinput: colorInputSchema,\n colorpicker: colorPickerSchema,\n dropzone: dropZoneSchema,\n grid: objOf(createGridFields(createItemsField('grid'))),\n iframe: iframeSchema,\n input: inputSchema,\n listbox: listBoxSchema,\n selectbox: selectBoxSchema,\n sizeinput: sizeInputSchema,\n slider: sliderSchema,\n textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagepreview: imagePreviewSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n tree: treeSchema,\n panel: panelSchema\n }));\n const panelFields = [\n type,\n defaulted('classes', []),\n requiredArrayOf('items', itemSchema)\n ];\n const panelSchema = objOf(panelFields);\n\n const tabFields = [\n generatedName('tab'),\n title,\n requiredArrayOf('items', itemSchema)\n ];\n const tabPanelFields = [\n type,\n requiredArrayOfObj('tabs', tabFields)\n ];\n const tabPanelSchema = objOf(tabPanelFields);\n\n const dialogButtonFields = dialogFooterButtonFields;\n const dialogButtonSchema = dialogFooterButtonSchema;\n const dialogSchema = objOf([\n requiredString('title'),\n requiredOf('body', choose$2('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n defaultedArrayOf('buttons', [], dialogButtonSchema),\n defaulted('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onTabChange', noop)\n ]);\n const createDialog = spec => asRaw('dialog', dialogSchema, spec);\n\n const urlDialogButtonSchema = objOf([\n requiredStringEnum('type', [\n 'cancel',\n 'custom'\n ]),\n ...dialogButtonFields\n ]);\n const urlDialogSchema = objOf([\n requiredString('title'),\n requiredString('url'),\n optionNumber('height'),\n optionNumber('width'),\n optionArrayOf('buttons', urlDialogButtonSchema),\n defaultedFunction('onAction', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onMessage', noop)\n ]);\n const createUrlDialog = spec => asRaw('dialog', urlDialogSchema, spec);\n\n const getAllObjects = obj => {\n if (isObject(obj)) {\n return [obj].concat(bind$3(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind$3(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n const isNamedItem = obj => isString(obj.type) && isString(obj.name);\n const dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n imagepreview: imagePreviewDataProcessor,\n selectbox: selectBoxDataProcessor,\n sizeinput: sizeInputDataProcessor,\n slider: sliderInputDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n const getDataProcessor = item => Optional.from(dataProcessors[item.type]);\n const getNamedItems = structure => filter$2(getAllObjects(structure), isNamedItem);\n\n const createDataValidator = structure => {\n const namedItems = getNamedItems(structure);\n const fields = bind$3(namedItems, item => getDataProcessor(item).fold(() => [], schema => [requiredOf(item.name, schema)]));\n return objOf(fields);\n };\n\n const extract = structure => {\n var _a;\n const internalDialog = getOrDie(createDialog(structure));\n const dataValidator = createDataValidator(structure);\n const initialData = (_a = structure.initialData) !== null && _a !== void 0 ? _a : {};\n return {\n internalDialog,\n dataValidator,\n initialData\n };\n };\n const DialogManager = {\n open: (factory, structure) => {\n const extraction = extract(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: (factory, structure) => {\n const internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: structure => extract(structure)\n };\n\n const events = (reflectingConfig, reflectingState) => {\n const update = (component, data) => {\n reflectingConfig.updateState.each(updateState => {\n const newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(renderComponents => {\n const newComponents = renderComponents(data, reflectingState.get());\n const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse;\n replacer(component, newComponents);\n });\n };\n return derive$2([\n run$1(receive(), (component, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n const channel = reflectingConfig.channel;\n if (contains$2(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached((comp, _se) => {\n reflectingConfig.initialData.each(rawData => {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events\n });\n\n const getState = (component, replaceConfig, reflectState) => reflectState;\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState\n });\n\n var ReflectingSchema = [\n required$1('channel'),\n option$3('renderComponents'),\n option$3('updateState'),\n option$3('initialData'),\n defaultedBoolean('reuseDom', true)\n ];\n\n const init = () => {\n const cell = Cell(Optional.none());\n const clear = () => cell.set(Optional.none());\n const readState = () => cell.get().getOr('none');\n return {\n readState,\n get: cell.get,\n set: cell.set,\n clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n const Reflecting = create$4({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n const toValidValues = values => {\n const errors = [];\n const result = {};\n each(values, (value, name) => {\n value.fold(() => {\n errors.push(name);\n }, v => {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n const renderBodyPanel = (spec, dialogData, backstage, getCompByName) => {\n const memForm = record(Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map$2(spec.items, item => interpretInForm(parts, item, dialogData, backstage, getCompByName))\n })));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n memento(memForm, {\n postprocess: formValue => toValidValues(formValue).fold(err => {\n console.error(err);\n return {};\n }, identity)\n }),\n config('dialog-body-panel', [run$1(focusin(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: Optional.some(se.event.target) });\n })])\n ])\n };\n };\n\n const factory$3 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$9(detail.action),\n behaviours: augment(detail.tabButtonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n })\n ]),\n domModification: detail.domModification\n });\n const TabButton = single({\n name: 'TabButton',\n configFields: [\n defaulted('uid', undefined),\n required$1('value'),\n field$1('dom', 'dom', mergeWithThunk(() => ({\n attributes: {\n 'role': 'tab',\n 'id': generate$6('aria'),\n 'aria-selected': 'false'\n }\n })), anyValue()),\n option$3('action'),\n defaulted('domModification', {}),\n field('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n required$1('view')\n ],\n factory: factory$3\n });\n\n const schema$1 = constant$1([\n required$1('tabs'),\n required$1('dom'),\n defaulted('clickToDismiss', false),\n field('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers$1([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n const tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: barDetail => {\n const dismissTab$1 = (tabbar, button) => {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar,\n button\n });\n };\n const changeTab$1 = (tabbar, button) => {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar,\n button\n });\n };\n return {\n action: button => {\n const tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n const activeButton = Highlighting.isHighlighted(tabbar, button);\n const response = (() => {\n if (activeButton && barDetail.clickToDismiss) {\n return dismissTab$1;\n } else if (!activeButton) {\n return changeTab$1;\n } else {\n return noop;\n }\n })();\n response(tabbar, button);\n },\n domModification: { classes: [barDetail.markers.tabClass] }\n };\n }\n });\n const parts$1 = constant$1([tabsPart]);\n\n const factory$2 = (detail, components, _spec, _externals) => ({\n 'uid': detail.uid,\n 'dom': detail.dom,\n components,\n 'debug.sketcher': 'Tabbar',\n 'domModification': { attributes: { role: 'tablist' } },\n 'behaviours': augment(detail.tabbarBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedClass,\n itemClass: detail.markers.tabClass,\n onHighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: tabbar => {\n return Highlighting.getHighlighted(tabbar).map(tab => tab.element);\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n });\n const Tabbar = composite({\n name: 'Tabbar',\n configFields: schema$1(),\n partFields: parts$1(),\n factory: factory$2\n });\n\n const factory$1 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n });\n const Tabview = single({\n name: 'Tabview',\n configFields: [field('tabviewBehaviours', [Replacing])],\n factory: factory$1\n });\n\n const schema = constant$1([\n defaulted('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted('tabs', []),\n field('tabSectionBehaviours', [])\n ]);\n const barPart = required({\n factory: Tabbar,\n schema: [\n required$1('dom'),\n requiredObjOf('markers', [\n required$1('tabClass'),\n required$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: detail => {\n return { tabs: detail.tabs };\n }\n });\n const viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n const parts = constant$1([\n barPart,\n viewPart\n ]);\n\n const factory = (detail, components, _spec, _externals) => {\n const changeTab$1 = button => {\n const tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(tabview => {\n const tabWithValue = find$5(detail.tabs, t => t.value === tabValue);\n tabWithValue.each(tabData => {\n const panel = tabData.view();\n getOpt(button.element, 'id').each(id => {\n set$9(tabview.element, 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n const changeTabBy = (section, byPred) => {\n getPart(section, detail, 'tabbar').each(tabbar => {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$4(detail.tabSectionBehaviours),\n events: derive$2(flatten([\n detail.selectFirst ? [runOnAttached((section, _simulatedEvent) => {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run$1(changeTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run$1(dismissTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: section => {\n return getPart(section, detail, 'tabview').map(tabview => Replacing.contents(tabview)).getOr([]);\n },\n showTab: (section, tabKey) => {\n const getTabIfNotActive = tabbar => {\n const candidates = Highlighting.getCandidates(tabbar);\n const optTab = find$5(candidates, c => Representing.getValue(c) === tabKey);\n return optTab.filter(tab => !Highlighting.isHighlighted(tabbar, tab));\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n const TabSection = composite({\n name: 'TabSection',\n configFields: schema(),\n partFields: parts(),\n factory,\n apis: {\n getViewItems: (apis, component) => apis.getViewItems(component),\n showTab: (apis, component, tabKey) => {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i) => {\n Replacing.set(tabviewComp, allTabs[i].view());\n const rect = tabview.dom.getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n const getMaxHeight = heights => head(sort(heights, (a, b) => {\n if (a > b) {\n return -1;\n } else if (a < b) {\n return +1;\n } else {\n return 0;\n }\n }));\n const getMaxTabviewHeight = (dialog, tabview, tablist) => {\n const documentElement$1 = documentElement(dialog).dom;\n const rootElm = ancestor(dialog, '.tox-dialog-wrap').getOr(dialog);\n const isFixed = get$f(rootElm, 'position') === 'fixed';\n let maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n const tabviewHeight = get$e(tabview);\n const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$d(tablist);\n const currentTabHeight = isTabListBeside ? Math.max(get$e(tablist), tabviewHeight) : tabviewHeight;\n const dialogTopMargin = parseInt(get$f(dialog, 'margin-top'), 10) || 0;\n const dialogBottomMargin = parseInt(get$f(dialog, 'margin-bottom'), 10) || 0;\n const dialogHeight = get$e(dialog) + dialogTopMargin + dialogBottomMargin;\n const chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n const showTab = (allTabs, comp) => {\n head(allTabs).each(tab => TabSection.showTab(comp, tab.value));\n };\n const setTabviewHeight = (tabview, height) => {\n set$8(tabview, 'height', height + 'px');\n set$8(tabview, 'flex-basis', height + 'px');\n };\n const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => {\n ancestor(dialogBody, '[role=\"dialog\"]').each(dialog => {\n descendant(dialog, '[role=\"tablist\"]').each(tablist => {\n maxTabHeight.get().map(height => {\n set$8(tabview, 'height', '0');\n set$8(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(height => {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n const getTabview = dialog => descendant(dialog, '[role=\"tabpanel\"]');\n const smartMode = allTabs => {\n const maxTabHeight = value$4();\n const extraEvents = [\n runOnAttached(comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n set$8(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(tabviewComp => {\n const heights = measureHeights(allTabs, tabview, tabviewComp);\n const maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$7(tabview, 'visibility');\n showTab(allTabs, comp);\n requestAnimationFrame(() => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run$1(windowResize(), comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run$1(formResizeEvent, (comp, _se) => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n const oldFocus = active$1(getRootNode(tabview));\n set$8(tabview, 'visibility', 'hidden');\n const oldHeight = getRaw(tabview, 'height').map(h => parseInt(h, 10));\n remove$7(tabview, 'height');\n remove$7(tabview, 'flex-basis');\n const newHeight = tabview.dom.getBoundingClientRect().height;\n const hasGrown = oldHeight.forall(h => newHeight > h);\n if (hasGrown) {\n maxTabHeight.set(newHeight);\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(h => {\n setTabviewHeight(tabview, h);\n });\n }\n remove$7(tabview, 'visibility');\n oldFocus.each(focus$3);\n });\n })\n ];\n const selectFirst = false;\n return {\n extraEvents,\n selectFirst\n };\n };\n\n const SendDataToSectionChannel = 'send-data-to-section';\n const SendDataToViewChannel = 'send-data-to-view';\n const renderTabPanel = (spec, dialogData, backstage, getCompByName) => {\n const storedValue = Cell({});\n const updateDataWithForm = form => {\n const formData = Representing.getValue(form);\n const validData = toValidValues(formData).getOr({});\n const currentData = storedValue.get();\n const newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n const setDataOnForm = form => {\n const tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n const oldTab = Cell(null);\n const allTabs = map$2(spec.tabs, tab => {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item']\n },\n components: [text$2(backstage.shared.providers.translate(tab.title))],\n view: () => {\n return [Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map$2(tab.items, item => interpretInForm(parts, item, dialogData, backstage, getCompByName)),\n formBehaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n config('TabView.form.events', [\n runOnAttached(setDataOnForm),\n runOnDetached(updateDataWithForm)\n ]),\n Receiving.config({\n channels: wrapAll([\n {\n key: SendDataToSectionChannel,\n value: { onReceive: updateDataWithForm }\n },\n {\n key: SendDataToViewChannel,\n value: { onReceive: setDataOnForm }\n }\n ])\n })\n ])\n }))];\n }\n };\n });\n const tabMode = smartMode(allTabs);\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: (section, button, _viewItems) => {\n const name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name,\n oldName: oldTab.get()\n });\n oldTab.set(name);\n },\n tabs: allTabs,\n components: [\n TabSection.parts.tabbar({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav']\n },\n components: [Tabbar.parts.tabs({})],\n markers: {\n tabClass: 'tox-tab',\n selectedClass: 'tox-dialog__body-nav-item--active'\n },\n tabbarBehaviours: derive$1([Tabstopping.config({})])\n }),\n TabSection.parts.tabview({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n }\n })\n ],\n selectFirst: tabMode.selectFirst,\n tabSectionBehaviours: derive$1([\n config('tabpanel', tabMode.extraEvents),\n Keying.config({ mode: 'acyclic' }),\n Composing.config({ find: comp => head(TabSection.getViewItems(comp)) }),\n withComp(Optional.none(), tsection => {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n }, (tsection, value) => {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n })\n ])\n });\n };\n\n const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => {\n const renderComponents = incoming => {\n const body = incoming.body;\n switch (body.type) {\n case 'tabpanel': {\n return [renderTabPanel(body, incoming.initialData, backstage, getCompByName)];\n }\n default: {\n return [renderBodyPanel(body, incoming.initialData, backstage, getCompByName)];\n }\n }\n };\n const updateState = (_comp, incoming) => Optional.some({ isTabPanel: () => incoming.body.type === 'tabpanel' });\n const ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: {\n ...contentId.map(x => ({ id: x })).getOr({}),\n ...ariaAttrs ? ariaAttributes : {}\n }\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: `${ bodyChannel }-${ dialogId }`,\n updateState,\n renderComponents,\n initialData: spec\n })\n ])\n };\n };\n const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs, getCompByName);\n const renderModalBody = (spec, dialogId, backstage, getCompByName) => {\n const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false, getCompByName);\n return ModalDialog.parts.body(bodySpec);\n };\n const renderIframeBody = spec => {\n const bodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-iframe']\n },\n components: [craft(Optional.none(), {\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n })])\n };\n return ModalDialog.parts.body(bodySpec);\n };\n\n const isTouch = global$6.deviceType.isTouch();\n const hiddenHeader = (title, close) => ({\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n });\n const pClose = (onClose, providersBackstage) => ModalDialog.parts.close(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close')\n }\n },\n action: onClose,\n buttonBehaviours: derive$1([Tabstopping.config({})])\n }));\n const pUntitled = () => ModalDialog.parts.title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [{ dom: fromHtml(`

${ sanitizeHtmlString(providersBackstage.translate(message)) }

`) }]\n }]\n });\n const pFooter = buttons => ModalDialog.parts.footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n const pFooterGroup = (startButtons, endButtons) => [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-start']\n },\n components: startButtons\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-end']\n },\n components: endButtons\n })\n ];\n const renderDialog$1 = spec => {\n const dialogClass = 'tox-dialog';\n const blockerClass = dialogClass + '-wrap';\n const blockerBackdropClass = blockerClass + '__backdrop';\n const scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: comp => {\n spec.onEscape(comp);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem),\n firstTabstop: spec.firstTabstop,\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: {\n position: 'relative',\n ...spec.extraStyles\n }\n },\n components: [\n spec.header,\n spec.body,\n ...spec.footer.toArray()\n ],\n parts: {\n blocker: {\n dom: fromHtml(`
`),\n components: [{\n dom: {\n tag: 'div',\n classes: isTouch ? [\n blockerBackdropClass,\n blockerBackdropClass + '--opaque'\n ] : [blockerBackdropClass]\n }\n }]\n }\n },\n dragBlockClass: blockerClass,\n modalBehaviours: derive$1([\n Focusing.config({}),\n config('dialog-events', spec.dialogEvents.concat([\n runOnSource(focusin(), (comp, _se) => {\n Blocking.isBlocked(comp) ? noop() : Keying.focusIn(comp);\n }),\n run$1(focusShifted(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: se.event.newFocus });\n })\n ])),\n config('scroll-lock', [\n runOnAttached(() => {\n add$2(body(), scrollLockClass);\n }),\n runOnDetached(() => {\n remove$3(body(), scrollLockClass);\n })\n ]),\n ...spec.extraBehaviours\n ]),\n eventOrder: {\n [execute$5()]: ['dialog-events'],\n [attachedToDom()]: [\n 'scroll-lock',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'scroll-lock'\n ],\n ...spec.eventOrder\n }\n });\n };\n\n const renderClose = providersBackstage => Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close'),\n 'data-mce-name': 'close'\n }\n },\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate('Close') }))\n ]),\n components: [render$3('close', {\n tag: 'span',\n classes: ['tox-icon']\n }, providersBackstage.icons)],\n action: comp => {\n emit(comp, formCancelEvent);\n }\n });\n const renderTitle = (spec, dialogId, titleId, providersBackstage) => {\n const renderComponents = data => [text$2(providersBackstage.translate(data.title))];\n return {\n dom: {\n tag: 'h1',\n classes: ['tox-dialog__title'],\n attributes: { ...titleId.map(x => ({ id: x })).getOr({}) }\n },\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ titleChannel }-${ dialogId }`,\n initialData: spec,\n renderComponents\n })])\n };\n };\n const renderDragHandle = () => ({ dom: fromHtml('
') });\n const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container.sketch({\n dom: fromHtml('
'),\n components: [\n renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: handle => {\n return closest$1(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: () => [],\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n const renderModalHeader = (spec, dialogId, providersBackstage) => {\n const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage));\n const pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n const pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n const components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml('
'),\n components\n });\n };\n\n const getHeader = (title, dialogId, backstage) => renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, dialogId, backstage.shared.providers);\n const getBusySpec = (message, bs, providers, headerHeight) => ({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': providers.translate(message) },\n styles: {\n left: '0px',\n right: '0px',\n bottom: '0px',\n top: `${ headerHeight.getOr(0) }px`,\n position: 'absolute'\n }\n },\n behaviours: bs,\n components: [{ dom: fromHtml('
') }]\n });\n const getEventExtras = (lazyDialog, providers, extra) => ({\n onClose: () => extra.closeWindow(),\n onBlock: blockEvent => {\n const headerHeight = descendant(lazyDialog().element, '.tox-dialog__header').map(header => get$e(header));\n ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers, headerHeight));\n },\n onUnblock: () => {\n ModalDialog.setIdle(lazyDialog());\n }\n });\n const fullscreenClass = 'tox-dialog--fullscreen';\n const largeDialogClass = 'tox-dialog--width-lg';\n const mediumDialogClass = 'tox-dialog--width-md';\n const getDialogSizeClass = size => {\n switch (size) {\n case 'large':\n return Optional.some(largeDialogClass);\n case 'medium':\n return Optional.some(mediumDialogClass);\n default:\n return Optional.none();\n }\n };\n const updateDialogSizeClass = (size, component) => {\n const dialogBody = SugarElement.fromDom(component.element.dom);\n if (!has(dialogBody, fullscreenClass)) {\n remove$2(dialogBody, [\n largeDialogClass,\n mediumDialogClass\n ]);\n getDialogSizeClass(size).each(dialogSizeClass => add$2(dialogBody, dialogSizeClass));\n }\n };\n const toggleFullscreen = (comp, currentSize) => {\n const dialogBody = SugarElement.fromDom(comp.element.dom);\n const classes = get$9(dialogBody);\n const currentSizeClass = find$5(classes, c => c === largeDialogClass || c === mediumDialogClass).or(getDialogSizeClass(currentSize));\n toggle$3(dialogBody, [\n fullscreenClass,\n ...currentSizeClass.toArray()\n ]);\n };\n const renderModalDialog = (spec, dialogEvents, backstage) => build$1(renderDialog$1({\n ...spec,\n firstTabstop: 1,\n lazySink: backstage.shared.getSink,\n extraBehaviours: [\n memory({}),\n ...spec.extraBehaviours\n ],\n onEscape: comp => {\n emit(comp, formCancelEvent);\n },\n dialogEvents,\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [attachedToDom()]: [\n 'scroll-lock',\n Reflecting.name(),\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n Reflecting.name(),\n 'scroll-lock'\n ]\n }\n }));\n const mapMenuButtons = (buttons, menuItemStates = {}) => {\n const mapItems = button => {\n const items = map$2(button.items, item => {\n const cell = get$h(menuItemStates, item.name).getOr(Cell(false));\n return {\n ...item,\n storage: cell\n };\n });\n return {\n ...button,\n items\n };\n };\n return map$2(buttons, button => {\n return button.type === 'menu' ? mapItems(button) : button;\n });\n };\n const extractCellsToObject = buttons => foldl(buttons, (acc, button) => {\n if (button.type === 'menu') {\n const menuButton = button;\n return foldl(menuButton.items, (innerAcc, item) => {\n innerAcc[item.name] = item.storage;\n return innerAcc;\n }, acc);\n }\n return acc;\n }, {});\n\n const initCommonEvents = (fireApiEvent, extras) => [\n runWithTarget(focusin(), onFocus),\n fireApiEvent(formCloseEvent, (_api, spec, _event, self) => {\n active$1(getRootNode(self.element)).fold(noop, blur$1);\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, (api, spec, _event, self) => {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()),\n run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event))\n ];\n const initUrlDialog = (getInstanceApi, extras) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialog => {\n f(currentDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formActionEvent, (api, spec, event) => {\n spec.onAction(api, { name: event.name });\n })\n ];\n };\n const initDialog = (getInstanceApi, extras, getSink) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialogInit => {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formSubmitEvent, (api, spec) => spec.onSubmit(api)),\n fireApiEvent(formChangeEvent, (api, spec, event) => {\n spec.onChange(api, { name: event.name });\n }),\n fireApiEvent(formActionEvent, (api, spec, event, component) => {\n const focusIn = () => component.getSystem().isConnected() ? Keying.focusIn(component) : undefined;\n const isDisabled = focused => has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(val => val === 'true');\n const rootNode = getRootNode(component.element);\n const current = active$1(rootNode);\n spec.onAction(api, {\n name: event.name,\n value: event.value\n });\n active$1(rootNode).fold(focusIn, focused => {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(cur => contains(focused, cur) && isDisabled(cur))) {\n focusIn();\n } else {\n getSink().toOptional().filter(sink => !contains(sink.element, focused)).each(focusIn);\n }\n });\n }),\n fireApiEvent(formTabChangeEvent, (api, spec, event) => {\n spec.onTabChange(api, {\n newTabName: event.name,\n oldTabName: event.oldName\n });\n }),\n runOnDetached(component => {\n const api = getInstanceApi();\n Representing.setValue(component, api.getData());\n })\n ];\n };\n\n const makeButton = (button, backstage) => renderFooterButton(button, button.type, backstage);\n const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, button => button.name === buttonName).bind(memButton => memButton.memento.getOpt(compInSystem));\n const renderComponents = (_data, state) => {\n const footerButtons = state.map(s => s.footerButtons).getOr([]);\n const buttonGroups = partition$3(footerButtons, button => button.align === 'start');\n const makeGroup = (edge, buttons) => Container.sketch({\n dom: {\n tag: 'div',\n classes: [`tox-dialog__footer-${ edge }`]\n },\n components: map$2(buttons, button => button.memento.asSpec())\n });\n const startButtons = makeGroup('start', buttonGroups.pass);\n const endButtons = makeGroup('end', buttonGroups.fail);\n return [\n startButtons,\n endButtons\n ];\n };\n const renderFooter = (initSpec, dialogId, backstage) => {\n const updateState = (comp, data) => {\n const footerButtons = map$2(data.buttons, button => {\n const memButton = record(makeButton(button, backstage));\n return {\n name: button.name,\n align: button.align,\n memento: memButton\n };\n });\n const lookupByName = buttonName => lookup(comp, footerButtons, buttonName);\n return Optional.some({\n lookupByName,\n footerButtons\n });\n };\n return {\n dom: fromHtml('
'),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ footerChannel }-${ dialogId }`,\n initialData: initSpec,\n updateState,\n renderComponents\n })])\n };\n };\n const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage);\n const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage));\n\n const getCompByName = (access, name) => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form, name).orThunk(() => {\n const footer = access.getFooter();\n const footerState = footer.bind(f => Reflecting.getState(f).get());\n return footerState.bind(f => f.lookupByName(name));\n });\n } else {\n return Optional.none();\n }\n };\n const validateData$1 = (access, data) => {\n const root = access.getRoot();\n return Reflecting.getState(root).get().map(dialogState => getOrDie(asRaw('data', dialogState.dataValidator, data))).getOr(data);\n };\n const getDialogApi = (access, doRedial, menuItemStates) => {\n const withRoot = f => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const getData = () => {\n const root = access.getRoot();\n const valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n const representedValues = Representing.getValue(valueComp);\n const menuItemCurrentState = map$1(menuItemStates, cell => cell.get());\n return {\n ...representedValues,\n ...menuItemCurrentState\n };\n };\n const setData = newData => {\n withRoot(_ => {\n const prevData = instanceApi.getData();\n const mergedData = deepMerge(prevData, newData);\n const newInternalData = validateData$1(access, mergedData);\n const form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each(menuItemStates, (v, k) => {\n if (has$2(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n const setEnabled = (name, state) => {\n getCompByName(access, name).each(state ? Disabling.enable : Disabling.disable);\n };\n const focus = name => {\n getCompByName(access, name).each(Focusing.focus);\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const showTab = name => {\n withRoot(_ => {\n const body = access.getBody();\n const bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(b => b.isTabPanel())) {\n Composing.getCurrent(body).each(tabSection => {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n const redial = d => {\n withRoot(root => {\n const id = access.getId();\n const dialogInit = doRedial(d);\n const storedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons, menuItemStates);\n root.getSystem().broadcastOn([`${ dialogChannel }-${ id }`], dialogInit);\n root.getSystem().broadcastOn([`${ titleChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ bodyChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ footerChannel }-${ id }`], {\n ...dialogInit.internalDialog,\n buttons: storedMenuButtons\n });\n instanceApi.setData(dialogInit.initialData);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const instanceApi = {\n getData,\n setData,\n setEnabled,\n focus,\n block,\n unblock,\n showTab,\n redial,\n close,\n toggleFullscreen: access.toggleFullscreen\n };\n return instanceApi;\n };\n\n const renderDialog = (dialogInit, extra, backstage) => {\n const dialogId = generate$6('dialog');\n const internalDialog = dialogInit.internalDialog;\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const dialogSize = Cell(internalDialog.size);\n const getCompByName$1 = name => getCompByName(modalAccess, name);\n const dialogSizeClasses = getDialogSizeClass(dialogSize.get()).toArray();\n const updateState = (comp, incoming) => {\n dialogSize.set(incoming.internalDialog.size);\n updateDialogSizeClass(incoming.internalDialog.size, comp);\n return Optional.some(incoming);\n };\n const body = renderModalBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, backstage, getCompByName$1);\n const storedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storedMenuButtons);\n const footer = someIf(storedMenuButtons.length !== 0, renderModalFooter({ buttons: storedMenuButtons }, dialogId, backstage));\n const dialogEvents = initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink);\n const spec = {\n id: dialogId,\n header,\n body,\n footer,\n extraClasses: dialogSizeClasses,\n extraBehaviours: [Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: dialogInit\n })],\n extraStyles: {}\n };\n const dialog = renderModalDialog(spec, dialogEvents, backstage);\n const modalAccess = (() => {\n const getForm = () => {\n const outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n const toggleFullscreen$1 = () => {\n toggleFullscreen(dialog, dialogSize.get());\n };\n return {\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getBody: () => ModalDialog.getBody(dialog),\n getFooter: () => ModalDialog.getFooter(dialog),\n getFormWrapper: getForm,\n toggleFullscreen: toggleFullscreen$1\n };\n })();\n const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs = false, refreshDocking) => {\n const dialogId = generate$6('dialog');\n const dialogLabelId = generate$6('dialog-label');\n const dialogContentId = generate$6('dialog-content');\n const internalDialog = dialogInit.internalDialog;\n const getCompByName$1 = name => getCompByName(modalAccess, name);\n const dialogSize = Cell(internalDialog.size);\n const dialogSizeClass = getDialogSizeClass(dialogSize.get()).toArray();\n const updateState = (comp, incoming) => {\n dialogSize.set(incoming.internalDialog.size);\n updateDialogSizeClass(incoming.internalDialog.size, comp);\n refreshDocking();\n return Optional.some(incoming);\n };\n const memHeader = record(renderInlineHeader({\n title: internalDialog.title,\n draggable: true\n }, dialogId, dialogLabelId, backstage.shared.providers));\n const memBody = record(renderInlineBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, dialogContentId, backstage, ariaAttrs, getCompByName$1));\n const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storagedMenuButtons);\n const optMemFooter = someIf(storagedMenuButtons.length !== 0, record(renderInlineFooter({ buttons: storagedMenuButtons }, dialogId, backstage)));\n const dialogEvents = initDialog(() => instanceApi, {\n onBlock: event => {\n Blocking.block(dialog, (_comp, bs) => {\n const headerHeight = memHeader.getOpt(dialog).map(dialog => get$e(dialog.element));\n return getBusySpec(event.message, bs, backstage.shared.providers, headerHeight);\n });\n },\n onUnblock: () => {\n Blocking.unblock(dialog);\n },\n onClose: () => extra.closeWindow()\n }, backstage.shared.getSink);\n const inlineClass = 'tox-dialog-inline';\n const os = detect$1().os;\n const dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n inlineClass,\n ...dialogSizeClass\n ],\n attributes: {\n role: 'dialog',\n ...os.isMacOS() ? { 'aria-label': internalDialog.title } : { 'aria-labelledby': dialogLabelId }\n }\n },\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [execute$5()]: ['execute-on-form'],\n [attachedToDom()]: [\n 'reflecting',\n 'execute-on-form'\n ]\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: c => {\n emit(c, formCloseEvent);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem) && (name$3(elem) !== 'button' || get$g(elem, 'disabled') !== 'disabled'),\n firstTabstop: 1\n }),\n Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([\n runOnSource(focusin(), (comp, _se) => {\n Keying.focusIn(comp);\n }),\n run$1(focusShifted(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: se.event.newFocus });\n })\n ])),\n Blocking.config({ getRoot: () => Optional.some(dialog) }),\n Replacing.config({}),\n memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n ...optMemFooter.map(memFooter => memFooter.asSpec()).toArray()\n ]\n });\n const toggleFullscreen$1 = () => {\n toggleFullscreen(dialog, dialogSize.get());\n };\n const modalAccess = {\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getFooter: () => optMemFooter.map(memFooter => memFooter.get(dialog)),\n getBody: () => memBody.get(dialog),\n getFormWrapper: () => {\n const body = memBody.get(dialog);\n return Composing.getCurrent(body).getOr(body);\n },\n toggleFullscreen: toggleFullscreen$1\n };\n const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n const getUrlDialogApi = root => {\n const withRoot = f => {\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const sendMessage = data => {\n withRoot(root => {\n root.getSystem().broadcastOn([bodySendMessageChannel], data);\n });\n };\n return {\n block,\n unblock,\n close,\n sendMessage\n };\n };\n\n const SUPPORTED_MESSAGE_ACTIONS = [\n 'insertContent',\n 'setContent',\n 'execCommand',\n 'close',\n 'block',\n 'unblock'\n ];\n const isSupportedMessage = data => isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n const isCustomMessage = data => !isSupportedMessage(data) && isObject(data) && has$2(data, 'mceAction');\n const handleMessage = (editor, api, data) => {\n switch (data.mceAction) {\n case 'insertContent':\n editor.insertContent(data.content);\n break;\n case 'setContent':\n editor.setContent(data.content);\n break;\n case 'execCommand':\n const ui = isBoolean(data.ui) ? data.ui : false;\n editor.execCommand(data.cmd, ui, data.value);\n break;\n case 'close':\n api.close();\n break;\n case 'block':\n api.block(data.message);\n break;\n case 'unblock':\n api.unblock();\n break;\n }\n };\n const renderUrlDialog = (internalDialog, extra, editor, backstage) => {\n const dialogId = generate$6('dialog');\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const body = renderIframeBody(internalDialog);\n const footer = internalDialog.buttons.bind(buttons => {\n if (buttons.length === 0) {\n return Optional.none();\n } else {\n return Optional.some(renderModalFooter({ buttons }, dialogId, backstage));\n }\n });\n const dialogEvents = initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra));\n const styles = {\n ...internalDialog.height.fold(() => ({}), height => ({\n 'height': height + 'px',\n 'max-height': height + 'px'\n })),\n ...internalDialog.width.fold(() => ({}), width => ({\n 'width': width + 'px',\n 'max-width': width + 'px'\n }))\n };\n const classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n const iframeUri = new global(internalDialog.url, { base_uri: new global(window.location.href) });\n const iframeDomain = `${ iframeUri.protocol }://${ iframeUri.host }${ iframeUri.port ? ':' + iframeUri.port : '' }`;\n const messageHandlerUnbinder = unbindable();\n const updateState = (_comp, incoming) => Optional.some(incoming);\n const extraBehaviours = [\n Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: internalDialog\n }),\n config('messages', [\n runOnAttached(() => {\n const unbind = bind(SugarElement.fromDom(window), 'message', e => {\n if (iframeUri.isSameOrigin(new global(e.raw.origin))) {\n const data = e.raw.data;\n if (isSupportedMessage(data)) {\n handleMessage(editor, instanceApi, data);\n } else if (isCustomMessage(data)) {\n internalDialog.onMessage(instanceApi, data);\n }\n }\n });\n messageHandlerUnbinder.set(unbind);\n }),\n runOnDetached(messageHandlerUnbinder.clear)\n ]),\n Receiving.config({\n channels: {\n [bodySendMessageChannel]: {\n onReceive: (comp, data) => {\n descendant(comp.element, 'iframe').each(iframeEle => {\n const iframeWin = iframeEle.dom.contentWindow;\n if (isNonNullable(iframeWin)) {\n iframeWin.postMessage(data, iframeDomain);\n }\n });\n }\n }\n }\n })\n ];\n const spec = {\n id: dialogId,\n header,\n body,\n footer,\n extraClasses: classes,\n extraBehaviours,\n extraStyles: styles\n };\n const dialog = renderModalDialog(spec, dialogEvents, backstage);\n const instanceApi = getUrlDialogApi(dialog);\n return {\n dialog,\n instanceApi\n };\n };\n\n const setup$2 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = () => {\n ModalDialog.hide(alertDialog);\n callback();\n };\n const memFooterClose = record(renderFooterButton({\n context: 'any',\n name: 'close-alert',\n text: 'OK',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage));\n const titleSpec = pUntitled();\n const closeSpec = pClose(closeDialog, sharedBackstage.providers);\n const alertDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n onEscape: closeDialog,\n extraClasses: ['tox-alert-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [run$1(formCancelEvent, closeDialog)],\n eventOrder: {}\n }));\n ModalDialog.show(alertDialog);\n const footerCloseButton = memFooterClose.get(alertDialog);\n Focusing.focus(footerCloseButton);\n };\n return { open };\n };\n\n const setup$1 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = state => {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n const memFooterYes = record(renderFooterButton({\n context: 'any',\n name: 'yes',\n text: 'Yes',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'submit', backstage));\n const footerNo = renderFooterButton({\n context: 'any',\n name: 'no',\n text: 'No',\n primary: false,\n buttonType: Optional.some('secondary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage);\n const titleSpec = pUntitled();\n const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers);\n const confirmDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [\n footerNo,\n memFooterYes.asSpec()\n ]))),\n onEscape: () => closeDialog(false),\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run$1(formCancelEvent, () => closeDialog(false)),\n run$1(formSubmitEvent, () => closeDialog(true))\n ],\n eventOrder: {}\n }));\n ModalDialog.show(confirmDialog);\n const footerYesButton = memFooterYes.get(confirmDialog);\n Focusing.focus(footerYesButton);\n };\n return { open };\n };\n\n const validateData = (data, validator) => getOrDie(asRaw('data', validator, data));\n const isAlertOrConfirmDialog = target => closest(target, '.tox-alert-dialog') || closest(target, '.tox-confirm-dialog');\n const inlineAdditionalBehaviours = (editor, isStickyToolbar, isToolbarLocationTop) => {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: ['top'],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })];\n }\n };\n const setup = extras => {\n const editor = extras.editor;\n const isStickyToolbar$1 = isStickyToolbar(editor);\n const alertDialog = setup$2(extras.backstages.dialog);\n const confirmDialog = setup$1(extras.backstages.dialog);\n const open = (config, params, closeWindow) => {\n if (!isUndefined(params)) {\n if (params.inline === 'toolbar') {\n return openInlineDialog(config, extras.backstages.popup.shared.anchors.inlineDialog(), closeWindow, params);\n } else if (params.inline === 'bottom') {\n return openBottomInlineDialog(config, extras.backstages.popup.shared.anchors.inlineBottomDialog(), closeWindow, params);\n } else if (params.inline === 'cursor') {\n return openInlineDialog(config, extras.backstages.popup.shared.anchors.cursor(), closeWindow, params);\n }\n }\n return openModalDialog(config, closeWindow);\n };\n const openUrl = (config, closeWindow) => openModalUrlDialog(config, closeWindow);\n const openModalUrlDialog = (config, closeWindow) => {\n const factory = contents => {\n const dialog = renderUrlDialog(contents, {\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, editor, extras.backstages.dialog);\n ModalDialog.show(dialog.dialog);\n return dialog.instanceApi;\n };\n return DialogManager.openUrl(factory, config);\n };\n const openModalDialog = (config, closeWindow) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = internalInitialData;\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const dialog = renderDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, extras.backstages.dialog);\n ModalDialog.show(dialog.dialog);\n dialog.instanceApi.setData(initialData);\n return dialog.instanceApi;\n };\n return DialogManager.open(factory, config);\n };\n const openInlineDialog = (config$1, anchor, closeWindow, windowParams) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = validateData(internalInitialData, dataValidator);\n const inlineDialog = value$4();\n const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop();\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const refreshDocking = () => inlineDialog.on(dialog => {\n InlineView.reposition(dialog);\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(dialog);\n }\n });\n const dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking);\n const inlineDialogComp = build$1(InlineView.sketch({\n lazySink: extras.backstages.popup.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: windowParams.persistent ? { event: 'doNotDismissYet' } : {},\n ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n emit(dialogUi.dialog, formCancelEvent);\n })]),\n ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop)\n ]),\n isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n }));\n inlineDialog.set(inlineDialogComp);\n const getInlineDialogBounds = () => {\n const elem = editor.inline ? body() : SugarElement.fromDom(editor.getContainer());\n const bounds = box$1(elem);\n return Optional.some(bounds);\n };\n InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds);\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n const openBottomInlineDialog = (config$1, anchor, closeWindow, windowParams) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = validateData(internalInitialData, dataValidator);\n const inlineDialog = value$4();\n const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop();\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const refreshDocking = () => inlineDialog.on(dialog => {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n const dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor ScrollWindow ElementScroll', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking);\n const inlineDialogComp = build$1(InlineView.sketch({\n lazySink: extras.backstages.popup.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: windowParams.persistent ? { event: 'doNotDismissYet' } : {},\n ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n emit(dialogUi.dialog, formCancelEvent);\n })]),\n Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: [\n 'top',\n 'bottom'\n ],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })\n ]),\n isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n }));\n inlineDialog.set(inlineDialogComp);\n const getInlineDialogBounds = () => {\n return extras.backstages.popup.shared.getSink().toOptional().bind(s => {\n const optScrollingContext = detectWhenSplitUiMode(editor, s.element);\n const margin = 15;\n const bounds$1 = optScrollingContext.map(sc => getBoundsFrom(sc)).getOr(win());\n const contentAreaContainer = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const constrainedBounds = constrain(contentAreaContainer, bounds$1);\n return Optional.some(bounds(constrainedBounds.x, constrainedBounds.y, constrainedBounds.width, constrainedBounds.height - margin));\n });\n };\n InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds);\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor ScrollWindow ElementScroll ResizeWindow', refreshDocking);\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n const confirm = (message, callback) => {\n confirmDialog.open(message, callback);\n };\n const alert = (message, callback) => {\n alertDialog.open(message, callback);\n };\n const close = instanceApi => {\n instanceApi.close();\n };\n return {\n open,\n openUrl,\n alert,\n close,\n confirm\n };\n };\n\n const registerOptions = editor => {\n register$f(editor);\n register$e(editor);\n register(editor);\n };\n var Theme = () => {\n global$a.add('silver', editor => {\n registerOptions(editor);\n let popupSinkBounds = () => win();\n const {\n dialogs,\n popups,\n renderUI: renderModeUI\n } = setup$3(editor, { getPopupSinkBounds: () => popupSinkBounds() });\n const renderUI = () => {\n const renderResult = renderModeUI();\n const optScrollingContext = detectWhenSplitUiMode(editor, popups.getMothership().element);\n optScrollingContext.each(sc => {\n popupSinkBounds = () => {\n return getBoundsFrom(sc);\n };\n });\n return renderResult;\n };\n Autocompleter.register(editor, popups.backstage.shared);\n const windowMgr = setup({\n editor,\n backstages: {\n popup: popups.backstage,\n dialog: dialogs.backstage\n }\n });\n const notificationRegion = value$4();\n const getNotificationManagerImpl = () => NotificationManagerImpl(editor, { backstage: popups.backstage }, popups.getMothership(), notificationRegion);\n return {\n renderUI,\n getWindowManagerImpl: constant$1(windowMgr),\n getNotificationManagerImpl\n };\n });\n };\n\n Theme();\n\n})();\n","/**\n * TinyMCE version 7.4.1 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var typeOf$1 = function (x) {\n if (x === null) {\n return 'null';\n }\n if (x === undefined) {\n return 'undefined';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isEquatableType = function (x) {\n return [\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'function',\n 'xml',\n 'null'\n ].indexOf(x) !== -1;\n };\n\n var sort$1 = function (xs, compareFn) {\n var clone = Array.prototype.slice.call(xs);\n return clone.sort(compareFn);\n };\n\n var contramap = function (eqa, f) {\n return eq$2(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq$2 = function (f) {\n return { eq: f };\n };\n var tripleEq = eq$2(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq$2(function (x, y) {\n if (x.length !== y.length) {\n return false;\n }\n var len = x.length;\n for (var i = 0; i < len; i++) {\n if (!eqa.eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqSortedArray = function (eqa, compareFn) {\n return contramap(eqArray(eqa), function (xs) {\n return sort$1(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq$2(function (x, y) {\n var kx = Object.keys(x);\n var ky = Object.keys(y);\n if (!eqSortedArray(eqString).eq(kx, ky)) {\n return false;\n }\n var len = kx.length;\n for (var i = 0; i < len; i++) {\n var q = kx[i];\n if (!eqa.eq(x[q], y[q])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqAny = eq$2(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf$1(x);\n var ty = typeOf$1(y);\n if (tx !== ty) {\n return false;\n }\n if (isEquatableType(tx)) {\n return x === y;\n } else if (tx === 'array') {\n return eqArray(eqAny).eq(x, y);\n } else if (tx === 'object') {\n return eqRecord(eqAny).eq(x, y);\n }\n return false;\n });\n\n const getPrototypeOf$2 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$4(value, Object);\n const isArray$1 = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray$1(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const call = f => {\n f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf$1 = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map$3 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$e = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$2 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$5 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$e(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil$1 = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$2 = (xs, pred) => {\n return findUntil$1(xs, pred, never);\n };\n const findIndex$2 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$3(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$b(xs, 0);\n const last$2 = xs => get$b(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n const unique$1 = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const keys = Object.keys;\n const hasOwnProperty$1 = Object.hasOwnProperty;\n const each$d = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$2 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$d(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$d(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$4 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$d(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$a = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty$1.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n const stringArray = a => {\n const all = {};\n each$e(a, key => {\n all[key] = {};\n });\n return keys(all);\n };\n\n const isArrayLike = o => o.length !== undefined;\n const isArray = Array.isArray;\n const toArray$1 = obj => {\n if (!isArray(obj)) {\n const array = [];\n for (let i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n return array;\n } else {\n return obj;\n }\n };\n const each$c = (o, cb, s) => {\n if (!o) {\n return false;\n }\n s = s || o;\n if (isArrayLike(o)) {\n for (let n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n } else {\n for (const n in o) {\n if (has$2(o, n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n }\n }\n return true;\n };\n const map$1 = (array, callback) => {\n const out = [];\n each$c(array, (item, index) => {\n out.push(callback(item, index, array));\n });\n return out;\n };\n const filter$3 = (a, f) => {\n const o = [];\n each$c(a, (v, index) => {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n const indexOf = (a, v) => {\n if (a) {\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n const reduce = (collection, iteratee, accumulator, thisArg) => {\n let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (let i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n const findIndex$1 = (array, predicate, thisArg) => {\n for (let i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n const last$1 = collection => collection[collection.length - 1];\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$1 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$3(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$3(0, 0);\n };\n const nu$3 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$3,\n detect: detect$4,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$2(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$2(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$3(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$4 = blank(/^\\s+|\\s+$/g);\n const lTrim = blank(/^\\s+/g);\n const rTrim = blank(/\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$3 = s => !isNotEmpty(s);\n const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n const toInt = (value, radix = 10) => {\n const num = parseInt(value, radix);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$2 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu: nu$1,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform$4 = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform$4();\n\n const userAgent = window.navigator.userAgent;\n const platform$3 = detect$1();\n const browser$3 = platform$3.browser;\n const os$1 = platform$3.os;\n const deviceType = platform$3.deviceType;\n const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n const Env = {\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n documentMode: browser$3.isIE() ? document.documentMode || 7 : 10,\n cacheSuffix: null,\n container: null,\n canHaveCSP: !browser$3.isIE(),\n windowsPhone,\n browser: {\n current: browser$3.current,\n version: browser$3.version,\n isChromium: browser$3.isChromium,\n isEdge: browser$3.isEdge,\n isFirefox: browser$3.isFirefox,\n isIE: browser$3.isIE,\n isOpera: browser$3.isOpera,\n isSafari: browser$3.isSafari\n },\n os: {\n current: os$1.current,\n version: os$1.version,\n isAndroid: os$1.isAndroid,\n isChromeOS: os$1.isChromeOS,\n isFreeBSD: os$1.isFreeBSD,\n isiOS: os$1.isiOS,\n isLinux: os$1.isLinux,\n isMacOS: os$1.isMacOS,\n isSolaris: os$1.isSolaris,\n isWindows: os$1.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n const trim$3 = str => {\n return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n const is$3 = (obj, type) => {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n const makeMap$4 = (items, delim, map = {}) => {\n const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n let i = resolvedItems.length;\n while (i--) {\n map[resolvedItems[i]] = {};\n }\n return map;\n };\n const hasOwnProperty = has$2;\n const extend$3 = (obj, ...exts) => {\n for (let i = 0; i < exts.length; i++) {\n const ext = exts[i];\n for (const name in ext) {\n if (has$2(ext, name)) {\n const value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n const walk$4 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$c(o, (o, i) => {\n if (f.call(s, o, i, n) === false) {\n return false;\n } else {\n walk$4(o, f, n, s);\n return true;\n }\n });\n }\n };\n const resolve$3 = (n, o = window) => {\n const path = n.split('.');\n for (let i = 0, l = path.length; i < l; i++) {\n o = o[path[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n const explode$3 = (s, d) => {\n if (isArray$1(s)) {\n return s;\n } else if (s === '') {\n return [];\n } else {\n return map$1(s.split(d || ','), trim$3);\n }\n };\n const _addCacheSuffix = url => {\n const cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n const Tools = {\n trim: trim$3,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$c,\n map: map$1,\n grep: filter$3,\n inArray: indexOf,\n hasOwn: hasOwnProperty,\n extend: extend$3,\n walk: walk$4,\n resolve: resolve$3,\n explode: explode$3,\n _addCacheSuffix\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement$1 = element => isElement$7(element) && isPrototypeOf(element.dom);\n const isElement$7 = isType(ELEMENT);\n const isText$c = isType(TEXT);\n const isDocument$2 = isType(DOCUMENT);\n const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$3 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$d(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$9 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$9(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$9 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const hasNone = element => {\n const attrs = element.dom.attributes;\n return attrs === undefined || attrs === null || attrs.length === 0;\n };\n const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const read$4 = (element, attr) => {\n const value = get$9(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$4(element, attr);\n const nu = old.concat([id]);\n set$3(element, attr, nu.join(' '));\n return true;\n };\n const remove$8 = (element, attr, id) => {\n const nu = filter$5(read$4(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$3(element, attr, nu.join(' '));\n } else {\n remove$9(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$8 = element => read$4(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$7 = (element, clazz) => remove$8(element, 'class', clazz);\n const toggle$2 = (element, clazz) => {\n if (contains$2(get$8(element), clazz)) {\n return remove$7(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove$9(element, 'class');\n }\n };\n const remove$6 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$7(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$1 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$2(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$2(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n const fromDom$2 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$2\n };\n\n const toArray = (target, f) => {\n const r = [];\n const recurse = e => {\n r.push(e);\n return f(e);\n };\n let cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents$1 = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const siblings = element => {\n const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n return parent(element).map(children$1).map(filterSelf).getOr([]);\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const prevSiblings = element => reverse(toArray(element, prevSibling));\n const nextSiblings = element => toArray(element, nextSibling);\n const children$1 = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n const child$1 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$1(element, 0);\n const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n const childNodesCount = element => element.dom.childNodes.length;\n\n const getHead = doc => {\n const b = doc.dom.head;\n if (b === null || b === undefined) {\n throw new Error('Head is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$7(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText$c(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$4 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$4, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$2(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$2 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$3 = (scope, selector, isRoot) => ancestor$4(scope, e => is$1(e, selector), isRoot);\n const descendant$1 = (scope, selector) => one(selector, scope);\n const closest$3 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$3, scope, selector, isRoot);\n };\n\n const closest$2 = target => closest$3(target, '[contenteditable]');\n const isEditable$2 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest$2(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n }\n };\n const getRaw$1 = element => element.dom.contentEditable;\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$2 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$d(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$7 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$2(getOpt(element, 'style').map(trim$4), '')) {\n remove$9(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$4 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap$2 = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$3 = (marker, elements) => {\n each$e(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$4(e, x);\n });\n };\n const append = (parent, elements) => {\n each$e(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$e(children$1(element), rogue => {\n remove$4(rogue);\n });\n };\n const remove$4 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$1(wrapper);\n if (children.length > 0) {\n after$3(wrapper, children);\n }\n remove$4(wrapper);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$1(SugarElement.fromDom(div));\n };\n const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n const get$6 = element => element.dom.innerHTML;\n const set$1 = (element, content) => {\n const owner = owner$1(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$6(container);\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle$1 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle$1(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const get$5 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n const intoView = (element, alignToTop) => {\n const isSafari = detect$1().browser.isSafari();\n if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n element.dom.scrollIntoViewIfNeeded(false);\n } else {\n element.dom.scrollIntoView(alignToTop);\n }\n };\n\n const get$4 = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$5(SugarElement.fromDom(doc));\n return get$4(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const children = (scope, predicate) => filter$5(children$1(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$e(children$1(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n const ancestor$2 = (scope, predicate, isRoot) => ancestor$4(scope, predicate, isRoot).isSome();\n const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n const descendant = (scope, predicate) => descendant$2(scope, predicate).isSome();\n\n class DomTreeWalker {\n constructor(startNode, rootNode) {\n this.node = startNode;\n this.rootNode = rootNode;\n this.current = this.current.bind(this);\n this.next = this.next.bind(this);\n this.prev = this.prev.bind(this);\n this.prev2 = this.prev2.bind(this);\n }\n current() {\n return this.node;\n }\n next(shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n }\n prev(shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n }\n prev2(shallow) {\n this.node = this.findPreviousNode(this.node, shallow);\n return this.node;\n }\n findSibling(node, startName, siblingName, shallow) {\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n return undefined;\n }\n findPreviousNode(node, shallow) {\n if (node) {\n const sibling = node.previousSibling;\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (let child = sibling.lastChild; child; child = child.lastChild) {\n if (!child.lastChild) {\n return child;\n }\n }\n }\n return sibling;\n }\n const parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n return undefined;\n }\n }\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n const isZwsp$2 = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n const isZwsp$1 = text => {\n for (const c of text) {\n if (!isZwsp$2(c)) {\n return false;\n }\n }\n return true;\n };\n const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n const isNewLineChar = c => c === '\\n' || c === '\\r';\n const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n const tabSpace = repeat(' ', tabSpaces);\n const normalizedText = text.replace(/\\t/g, tabSpace);\n const result = foldl(normalizedText, (acc, c) => {\n if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n return {\n pcIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n pcIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n pcIsSpace: isNewLineChar(c),\n str: acc.str + c\n };\n }\n }, {\n pcIsSpace: false,\n str: ''\n });\n return result.str;\n };\n\n const isNodeType = type => {\n return node => {\n return !!node && node.nodeType === type;\n };\n };\n const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n const isElement$6 = isNodeType(1);\n const isHTMLElement = node => isElement$6(node) && isHTMLElement$1(SugarElement.fromDom(node));\n const isSVGElement = node => isElement$6(node) && node.namespaceURI === 'http://www.w3.org/2000/svg';\n const matchNodeName = name => {\n const lowerCasedName = name.toLowerCase();\n return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n };\n const matchNodeNames = names => {\n const lowerCasedNames = names.map(s => s.toLowerCase());\n return node => {\n if (node && node.nodeName) {\n const nodeName = node.nodeName.toLowerCase();\n return contains$2(lowerCasedNames, nodeName);\n }\n return false;\n };\n };\n const matchStyleValues = (name, values) => {\n const items = values.toLowerCase().split(' ');\n return node => {\n if (isElement$6(node)) {\n const win = node.ownerDocument.defaultView;\n if (win) {\n for (let i = 0; i < items.length; i++) {\n const computed = win.getComputedStyle(node, null);\n const cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n }\n return false;\n };\n };\n const hasAttribute = attrName => {\n return node => {\n return isElement$6(node) && node.hasAttribute(attrName);\n };\n };\n const isBogus$1 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n const isBogusAll = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n const hasContentEditableState = value => {\n return node => {\n if (isHTMLElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n const isText$b = isNodeType(3);\n const isCData = isNodeType(4);\n const isPi = isNodeType(7);\n const isComment = isNodeType(8);\n const isDocument$1 = isNodeType(9);\n const isDocumentFragment = isNodeType(11);\n const isBr$6 = matchNodeName('br');\n const isImg = matchNodeName('img');\n const isContentEditableTrue$3 = hasContentEditableState('true');\n const isContentEditableFalse$b = hasContentEditableState('false');\n const isTableCell$3 = matchNodeNames([\n 'td',\n 'th'\n ]);\n const isTableCellOrCaption = matchNodeNames([\n 'td',\n 'th',\n 'caption'\n ]);\n const isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isListItem$2 = matchNodeName('li');\n const isDetails = matchNodeName('details');\n const isSummary$1 = matchNodeName('summary');\n\n const defaultOptionValues = {\n skipBogus: true,\n includeZwsp: false,\n checkRootAsContent: false\n };\n const hasWhitespacePreserveParent = (node, rootNode, schema) => {\n const rootElement = SugarElement.fromDom(rootNode);\n const startNode = SugarElement.fromDom(node);\n const whitespaceElements = schema.getWhitespaceElements();\n const predicate = node => has$2(whitespaceElements, name(node));\n return ancestor$2(startNode, predicate, curry(eq, rootElement));\n };\n const isNamedAnchor = node => {\n return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n const isNonEmptyElement$1 = (node, schema) => {\n return isElement$6(node) && has$2(schema.getNonEmptyElements(), node.nodeName);\n };\n const isBookmark = hasAttribute('data-mce-bookmark');\n const hasNonEditableParent = node => parentElement(SugarElement.fromDom(node)).exists(parent => !isEditable$2(parent));\n const isWhitespace$1 = (node, rootNode, schema) => isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode, schema);\n const isText$a = (node, rootNode, schema, options) => isText$b(node) && !isWhitespace$1(node, rootNode, schema) && (!options.includeZwsp || !isZwsp$1(node.data));\n const isContentNode = (schema, node, rootNode, options) => {\n return isFunction(options.isContent) && options.isContent(node) || isNonEmptyElement$1(node, schema) || isBookmark(node) || isNamedAnchor(node) || isText$a(node, rootNode, schema, options) || isContentEditableFalse$b(node) || isContentEditableTrue$3(node) && hasNonEditableParent(node);\n };\n const isEmptyNode = (schema, targetNode, opts) => {\n const options = {\n ...defaultOptionValues,\n ...opts\n };\n if (options.checkRootAsContent) {\n if (isContentNode(schema, targetNode, targetNode, options)) {\n return false;\n }\n }\n let node = targetNode.firstChild;\n let brCount = 0;\n if (!node) {\n return true;\n }\n const walker = new DomTreeWalker(node, targetNode);\n do {\n if (options.skipBogus && isElement$6(node)) {\n const bogusValue = node.getAttribute('data-mce-bogus');\n if (bogusValue) {\n node = walker.next(bogusValue === 'all');\n continue;\n }\n }\n if (isComment(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBr$6(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContentNode(schema, node, targetNode, options)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n };\n const isEmpty$2 = (schema, elm, options) => {\n return isEmptyNode(schema, elm.dom, {\n checkRootAsContent: true,\n ...options\n });\n };\n const isContent$1 = (schema, node, options) => {\n return isContentNode(schema, node, node, {\n includeZwsp: defaultOptionValues.includeZwsp,\n ...options\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const repeatable = delay => {\n const intervalId = Cell(Optional.none());\n const revoke = () => intervalId.get().each(id => clearInterval(id));\n const clear = () => {\n revoke();\n intervalId.set(Optional.none());\n };\n const isSet = () => intervalId.get().isSome();\n const get = () => intervalId.get();\n const set = functionToRepeat => {\n revoke();\n intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value$2 = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const nodeNameToNamespaceType = name => {\n const lowerCaseName = name.toLowerCase();\n if (lowerCaseName === 'svg') {\n return 'svg';\n } else if (lowerCaseName === 'math') {\n return 'math';\n } else {\n return 'html';\n }\n };\n const isNonHtmlElementRootName = name => nodeNameToNamespaceType(name) !== 'html';\n const isNonHtmlElementRoot = node => isNonHtmlElementRootName(node.nodeName);\n const toScopeType = node => nodeNameToNamespaceType(node.nodeName);\n const namespaceElements = [\n 'svg',\n 'math'\n ];\n const createNamespaceTracker = () => {\n const currentScope = value$2();\n const current = () => currentScope.get().map(toScopeType).getOr('html');\n const track = node => {\n if (isNonHtmlElementRoot(node)) {\n currentScope.set(node);\n } else if (currentScope.get().exists(scopeNode => !scopeNode.contains(node))) {\n currentScope.clear();\n }\n return current();\n };\n const reset = () => {\n currentScope.clear();\n };\n return {\n track,\n current,\n reset\n };\n };\n\n const transparentBlockAttr = 'data-mce-block';\n const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n const makeSelectorFromSchemaMap = map => map$3(elementNames(map), name => {\n const escapedName = CSS.escape(name);\n return `${ escapedName }:` + map$3(namespaceElements, ns => `not(${ ns } ${ escapedName })`).join(':');\n }).join(',');\n const updateTransparent = (blocksSelector, transparent) => {\n if (isNonNullable(transparent.querySelector(blocksSelector))) {\n transparent.setAttribute(transparentBlockAttr, 'true');\n if (transparent.getAttribute('data-mce-selected') === 'inline-boundary') {\n transparent.removeAttribute('data-mce-selected');\n }\n return true;\n } else {\n transparent.removeAttribute(transparentBlockAttr);\n return false;\n }\n };\n const updateBlockStateOnChildren = (schema, scope) => {\n const transparentSelector = makeSelectorFromSchemaMap(schema.getTransparentElements());\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n return filter$5(scope.querySelectorAll(transparentSelector), transparent => updateTransparent(blocksSelector, transparent));\n };\n const trimEdge = (schema, el, leftSide) => {\n var _a;\n const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n if (isEmptyNode(schema, child, { checkRootAsContent: true })) {\n (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n return;\n }\n }\n };\n const split$2 = (schema, parentElm, splitElm) => {\n const range = document.createRange();\n const parentNode = parentElm.parentNode;\n if (parentNode) {\n range.setStartBefore(parentElm);\n range.setEndBefore(splitElm);\n const beforeFragment = range.extractContents();\n trimEdge(schema, beforeFragment, true);\n range.setStartAfter(splitElm);\n range.setEndAfter(parentElm);\n const afterFragment = range.extractContents();\n trimEdge(schema, afterFragment, false);\n if (!isEmptyNode(schema, beforeFragment, { checkRootAsContent: true })) {\n parentNode.insertBefore(beforeFragment, parentElm);\n }\n if (!isEmptyNode(schema, splitElm, { checkRootAsContent: true })) {\n parentNode.insertBefore(splitElm, parentElm);\n }\n if (!isEmptyNode(schema, afterFragment, { checkRootAsContent: true })) {\n parentNode.insertBefore(afterFragment, parentElm);\n }\n parentNode.removeChild(parentElm);\n }\n };\n const splitInvalidChildren = (schema, scope, transparentBlocks) => {\n const blocksElements = schema.getBlockElements();\n const rootNode = SugarElement.fromDom(scope);\n const isBlock = el => name(el) in blocksElements;\n const isRoot = el => eq(el, rootNode);\n each$e(fromDom$1(transparentBlocks), transparentBlock => {\n ancestor$4(transparentBlock, isBlock, isRoot).each(parentBlock => {\n const invalidChildren = children(transparentBlock, el => isBlock(el) && !schema.isValidChild(name(parentBlock), name(el)));\n if (invalidChildren.length > 0) {\n const stateScope = parentElement(parentBlock);\n each$e(invalidChildren, child => {\n ancestor$4(child, isBlock, isRoot).each(parentBlock => {\n split$2(schema, parentBlock.dom, child.dom);\n });\n });\n stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n }\n });\n });\n };\n const unwrapInvalidChildren = (schema, scope, transparentBlocks) => {\n each$e([\n ...transparentBlocks,\n ...isTransparentBlock(schema, scope) ? [scope] : []\n ], block => each$e(descendants(SugarElement.fromDom(block), block.nodeName.toLowerCase()), elm => {\n if (isTransparentInline(schema, elm.dom)) {\n unwrap(elm);\n }\n }));\n };\n const updateChildren = (schema, scope) => {\n const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n splitInvalidChildren(schema, scope, transparentBlocks);\n unwrapInvalidChildren(schema, scope, transparentBlocks);\n };\n const updateElement = (schema, target) => {\n if (isTransparentElement(schema, target)) {\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n updateTransparent(blocksSelector, target);\n }\n };\n const updateCaret = (schema, root, caretParent) => {\n const isRoot = el => eq(el, SugarElement.fromDom(root));\n const parents = parents$1(SugarElement.fromDom(caretParent), isRoot);\n get$b(parents, parents.length - 2).filter(isElement$7).fold(() => updateChildren(schema, root), scope => updateChildren(schema, scope.dom));\n };\n const hasBlockAttr = el => el.hasAttribute(transparentBlockAttr);\n const isTransparentElementName = (schema, name) => has$2(schema.getTransparentElements(), name);\n const isTransparentElement = (schema, node) => isElement$6(node) && isTransparentElementName(schema, node.nodeName);\n const isTransparentBlock = (schema, node) => isTransparentElement(schema, node) && hasBlockAttr(node);\n const isTransparentInline = (schema, node) => isTransparentElement(schema, node) && !hasBlockAttr(node);\n const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n\n const browser$2 = detect$1().browser;\n const firstElement = nodes => find$2(nodes, isElement$7);\n const getTableCaptionDeltaY = elm => {\n if (browser$2.isFirefox() && name(elm) === 'table') {\n return firstElement(children$1(elm)).filter(elm => {\n return name(elm) === 'caption';\n }).bind(caption => {\n return firstElement(nextSiblings(caption)).map(body => {\n const bodyTop = body.dom.offsetTop;\n const captionTop = caption.dom.offsetTop;\n const captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n const getPos = (body, elm, rootElm) => {\n let x = 0, y = 0;\n const doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n const pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x,\n y\n };\n }\n let offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n const castOffsetParent = offsetParent;\n x += castOffsetParent.offsetLeft || 0;\n y += castOffsetParent.offsetTop || 0;\n offsetParent = castOffsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n }\n return {\n x,\n y\n };\n };\n\n const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n let idCount = 0;\n const loadedStates = {};\n const edos = SugarElement.fromDom(documentOrShadowRoot);\n const doc = documentOrOwner(edos);\n const _setReferrerPolicy = referrerPolicy => {\n settings.referrerPolicy = referrerPolicy;\n };\n const _setContentCssCors = contentCssCors => {\n settings.contentCssCors = contentCssCors;\n };\n const addStyle = element => {\n append$1(getStyleContainer(edos), element);\n };\n const removeStyle = id => {\n const styleContainer = getStyleContainer(edos);\n descendant$1(styleContainer, '#' + id).each(remove$4);\n };\n const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n }));\n const load = url => new Promise((success, failure) => {\n let link;\n const urlWithSuffix = Tools._addCacheSuffix(url);\n const state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n const resolve = (callbacks, status) => {\n each$e(callbacks, call);\n state.status = status;\n state.passed = [];\n state.failed = [];\n if (link) {\n link.onload = null;\n link.onerror = null;\n link = null;\n }\n };\n const passed = () => resolve(state.passed, 2);\n const failed = () => resolve(state.failed, 3);\n if (success) {\n state.passed.push(success);\n }\n if (failure) {\n state.failed.push(failure);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n const linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n if (settings.contentCssCors) {\n set$3(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$3(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = passed;\n link.onerror = failed;\n addStyle(linkElem);\n set$3(linkElem, 'href', urlWithSuffix);\n });\n const loadRawCss = (key, css) => {\n const state = getOrCreateState(key);\n loadedStates[key] = state;\n state.count++;\n const styleElem = SugarElement.fromTag('style', doc.dom);\n setAll$1(styleElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n styleElem.dom.innerHTML = css;\n addStyle(styleElem);\n };\n const loadAll = urls => {\n const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n return loadedUrls.then(results => {\n const parts = partition$2(results, r => r.status === 'fulfilled');\n if (parts.fail.length > 0) {\n return Promise.reject(map$3(parts.fail, result => result.reason));\n } else {\n return map$3(parts.pass, result => result.value);\n }\n });\n };\n const unload = url => {\n const urlWithSuffix = Tools._addCacheSuffix(url);\n get$a(loadedStates, urlWithSuffix).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n const unloadRawCss = key => {\n get$a(loadedStates, key).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[key];\n removeStyle(state.id);\n }\n });\n };\n const unloadAll = urls => {\n each$e(urls, url => {\n unload(url);\n });\n };\n return {\n load,\n loadRawCss,\n loadAll,\n unload,\n unloadRawCss,\n unloadAll,\n _setReferrerPolicy,\n _setContentCssCors\n };\n };\n\n const create$c = () => {\n const map = new WeakMap();\n const forElement = (referenceElement, settings) => {\n const root = getRootNode(referenceElement);\n const rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(() => {\n const sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement };\n };\n const instance = create$c();\n\n const isSpan = node => node.nodeName.toLowerCase() === 'span';\n const isInlineContent = (node, schema) => isNonNullable(node) && (isContent$1(schema, node) || schema.isInline(node.nodeName.toLowerCase()));\n const surroundedByInlineContent = (node, root, schema) => {\n const prev = new DomTreeWalker(node, root).prev(false);\n const next = new DomTreeWalker(node, root).next(false);\n const prevIsInline = isUndefined(prev) || isInlineContent(prev, schema);\n const nextIsInline = isUndefined(next) || isInlineContent(next, schema);\n return prevIsInline && nextIsInline;\n };\n const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n const isKeepTextNode = (node, root, schema) => isText$b(node) && node.data.length > 0 && surroundedByInlineContent(node, root, schema);\n const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n const trimNode = (dom, node, schema, root) => {\n var _a;\n const rootNode = root || node;\n if (isElement$6(node) && isBookmarkNode$2(node)) {\n return node;\n }\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], schema, rootNode);\n }\n if (isElement$6(node)) {\n const currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument(node) && !isContent$1(schema, node) && !isKeepElement(node) && !isKeepTextNode(node, rootNode, schema)) {\n dom.remove(node);\n }\n return node;\n };\n\n const makeMap$3 = Tools.makeMap;\n const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const rawCharsRegExp = /[<>&\\\"\\']/g;\n const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n const asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n const baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n const reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': `'`\n };\n const nativeDecode = text => {\n const elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n const buildEntitiesLookup = (items, radix) => {\n const lookup = {};\n if (items) {\n const itemList = items.split(',');\n radix = radix || 10;\n for (let i = 0; i < itemList.length; i += 2) {\n const chr = String.fromCharCode(parseInt(itemList[i], radix));\n if (!baseEntities[chr]) {\n const entity = '&' + itemList[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n } else {\n return undefined;\n }\n };\n const namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeNamed = (text, attr, entities) => {\n const resolveEntities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || resolveEntities[chr] || chr;\n });\n };\n const getEncodeFunc = (name, entities) => {\n const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeCustomNamed = (text, attr) => {\n return encodeNamed(text, attr, entitiesMap);\n };\n const nameMap = makeMap$3(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n const decode = text => text.replace(entityRegExp, (all, numeric) => {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n const Entities = {\n encodeRaw,\n encodeAllRaw,\n encodeNumeric,\n encodeNamed,\n getEncodeFunc,\n decode\n };\n\n const split$1 = (items, delim) => {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n const isRegExp$1 = obj => isObject(obj) && obj.source && Object.prototype.toString.call(obj) === '[object RegExp]';\n const deepCloneElementRule = obj => {\n const helper = value => {\n if (isArray$1(value)) {\n return map$3(value, helper);\n } else if (isRegExp$1(value)) {\n return new RegExp(value.source, value.flags);\n } else if (isObject(value)) {\n return map$2(value, helper);\n } else {\n return value;\n }\n };\n return helper(obj);\n };\n\n const parseCustomElementsRules = value => {\n const customElementRegExp = /^(~)?(.+)$/;\n return bind$3(split$1(value, ','), rule => {\n const matches = customElementRegExp.exec(rule);\n if (matches) {\n const inline = matches[1] === '~';\n const cloneName = inline ? 'span' : 'div';\n const name = matches[2];\n return [{\n cloneName,\n name\n }];\n } else {\n return [];\n }\n });\n };\n\n const getGlobalAttributeSet = type => {\n return Object.freeze([\n 'id',\n 'accesskey',\n 'class',\n 'dir',\n 'lang',\n 'style',\n 'tabindex',\n 'title',\n 'role',\n ...type !== 'html4' ? [\n 'contenteditable',\n 'contextmenu',\n 'draggable',\n 'dropzone',\n 'hidden',\n 'spellcheck',\n 'translate',\n 'itemprop',\n 'itemscope',\n 'itemtype'\n ] : [],\n ...type !== 'html5-strict' ? ['xml:lang'] : []\n ]);\n };\n\n const getElementSetsAsStrings = type => {\n let blockContent;\n let phrasingContent;\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n const transparentContent = 'a ins del canvas map';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\n phrasingContent += ' audio canvas command data datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen svg';\n }\n if (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n const html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n }\n const flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n return {\n blockContent,\n phrasingContent,\n flowContent\n };\n };\n const getElementSets = type => {\n const {blockContent, phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const toArr = value => {\n return Object.freeze(value.split(' '));\n };\n return Object.freeze({\n blockContent: toArr(blockContent),\n phrasingContent: toArr(phrasingContent),\n flowContent: toArr(flowContent)\n });\n };\n\n const cachedSets = {\n 'html4': cached(() => getElementSets('html4')),\n 'html5': cached(() => getElementSets('html5')),\n 'html5-strict': cached(() => getElementSets('html5-strict'))\n };\n const getElementsPreset = (type, name) => {\n const {blockContent, phrasingContent, flowContent} = cachedSets[type]();\n if (name === 'blocks') {\n return Optional.some(blockContent);\n } else if (name === 'phrasing') {\n return Optional.some(phrasingContent);\n } else if (name === 'flow') {\n return Optional.some(flowContent);\n } else {\n return Optional.none();\n }\n };\n\n const makeSchema = type => {\n const globalAttributes = getGlobalAttributeSet(type);\n const {phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const schema = {};\n const addElement = (name, attributes, children) => {\n schema[name] = {\n attributes: mapToObject(attributes, constant({})),\n attributesOrder: attributes,\n children: mapToObject(children, constant({}))\n };\n };\n const add = (name, attributes = '', children = '') => {\n const childNames = split$1(children);\n const names = split$1(name);\n let ni = names.length;\n const allAttributes = [\n ...globalAttributes,\n ...split$1(attributes)\n ];\n while (ni--) {\n addElement(names[ni], allAttributes.slice(), childNames);\n }\n };\n const addAttrs = (name, attributes) => {\n const names = split$1(name);\n const attrs = split$1(attributes);\n let ni = names.length;\n while (ni--) {\n const schemaItem = schema[names[ni]];\n for (let i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n each$e(split$1(html4PhrasingContent), name => {\n add(name, '', phrasingContent);\n });\n const html4BlockContent = 'center dir isindex noframes';\n each$e(split$1(html4BlockContent), name => {\n add(name, '', flowContent);\n });\n }\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('dd div', '', flowContent);\n add('address dt caption', '', type === 'html4' ? phrasingContent : flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', type === 'html4' ? phrasingContent : flowContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp bdi', '', phrasingContent);\n add('summary', '', [\n phrasingContent,\n 'h1 h2 h3 h4 h5 h6'\n ].join(' '));\n add('canvas', 'width height', flowContent);\n add('data', 'value', phrasingContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n addElement('svg', 'id tabindex lang xml:space class style x y width height viewBox preserveAspectRatio zoomAndPan transform'.split(' '), []);\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('img', 'loading');\n addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading referrerpolicy');\n }\n if (type !== 'html4') {\n each$e([\n schema.video,\n schema.audio\n ], item => {\n delete item.children.audio;\n delete item.children.video;\n });\n }\n each$e(split$1('a form meter progress dfn'), name => {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n return schema;\n };\n\n const prefixToOperation = prefix => prefix === '-' ? 'remove' : 'add';\n const parseValidChild = name => {\n const validChildRegExp = /^(@?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)$/;\n return Optional.from(validChildRegExp.exec(name)).map(matches => ({\n preset: matches[1] === '@',\n name: matches[2]\n }));\n };\n const parseValidChildrenRules = value => {\n const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n return bind$3(split$1(value, ','), rule => {\n const matches = childRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const operation = prefix ? prefixToOperation(prefix) : 'replace';\n const name = matches[2];\n const validChildren = bind$3(split$1(matches[3], '|'), validChild => parseValidChild(validChild).toArray());\n return [{\n operation,\n name,\n validChildren\n }];\n } else {\n return [];\n }\n });\n };\n\n const parseValidElementsAttrDataIntoElement = (attrData, targetElement) => {\n const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n const hasPatternsRegExp = /[*?+]/;\n const {attributes, attributesOrder} = targetElement;\n return each$e(split$1(attrData, '|'), rule => {\n const matches = attrRuleRegExp.exec(rule);\n if (matches) {\n const attr = {};\n const attrType = matches[1];\n const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n const attrPrefix = matches[3];\n const value = matches[4];\n if (attrType === '!') {\n targetElement.attributesRequired = targetElement.attributesRequired || [];\n targetElement.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(Tools.inArray(attributesOrder, attrName), 1);\n return;\n }\n if (attrPrefix) {\n if (attrPrefix === '=') {\n targetElement.attributesDefault = targetElement.attributesDefault || [];\n targetElement.attributesDefault.push({\n name: attrName,\n value\n });\n attr.defaultValue = value;\n } else if (attrPrefix === '~') {\n targetElement.attributesForced = targetElement.attributesForced || [];\n targetElement.attributesForced.push({\n name: attrName,\n value\n });\n attr.forcedValue = value;\n } else if (attrPrefix === '<') {\n attr.validValues = Tools.makeMap(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n const attrPattern = attr;\n targetElement.attributePatterns = targetElement.attributePatterns || [];\n attrPattern.pattern = patternToRegExp(attrName);\n targetElement.attributePatterns.push(attrPattern);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n });\n };\n const cloneAttributesInto = (from, to) => {\n each$d(from.attributes, (value, key) => {\n to.attributes[key] = value;\n });\n to.attributesOrder.push(...from.attributesOrder);\n };\n const parseValidElementsRules = (globalElement, validElements) => {\n const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n return bind$3(split$1(validElements, ','), rule => {\n const matches = elementRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const elementName = matches[2];\n const outputName = matches[3];\n const attrsPrefix = matches[4];\n const attrData = matches[5];\n const element = {\n attributes: {},\n attributesOrder: []\n };\n globalElement.each(el => cloneAttributesInto(el, element));\n if (prefix === '#') {\n element.paddEmpty = true;\n } else if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (attrsPrefix === '!') {\n element.removeEmptyAttrs = true;\n }\n if (attrData) {\n parseValidElementsAttrDataIntoElement(attrData, element);\n }\n if (outputName) {\n element.outputName = elementName;\n }\n if (elementName === '@') {\n if (globalElement.isNone()) {\n globalElement = Optional.some(element);\n } else {\n return [];\n }\n }\n return [outputName ? {\n name: elementName,\n element,\n aliasName: outputName\n } : {\n name: elementName,\n element\n }];\n } else {\n return [];\n }\n });\n };\n\n const mapCache = {};\n const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode;\n const createMap = (defaultValue, extendWith = {}) => {\n const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n return extend$2(value, extendWith);\n };\n const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n const compileElementMap = (value, mode) => {\n if (value) {\n const styles = {};\n if (isString(value)) {\n value = { '*': value };\n }\n each$b(value, (value, key) => {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n });\n return styles;\n } else {\n return undefined;\n }\n };\n const Schema = (settings = {}) => {\n var _a;\n const elements = {};\n const children = {};\n let patternElements = [];\n const customElementsMap = {};\n const specialElements = {};\n const createLookupTable = (option, defaultValue, extendWith) => {\n const value = settings[option];\n if (!value) {\n let newValue = mapCache[option];\n if (!newValue) {\n newValue = createMap(defaultValue, extendWith);\n mapCache[option] = newValue;\n }\n return newValue;\n } else {\n return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n };\n const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n const schemaItems = makeSchema(schemaType);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n const validStyles = compileElementMap(settings.valid_styles);\n const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n const validClasses = compileElementMap(settings.valid_classes, 'map');\n const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre svg textarea summary', voidElementsMap);\n const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n const headings = 'h1 h2 h3 h4 h5 h6';\n const textBlockElementsMap = createLookupTable('text_block_elements', headings + ' p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n const blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary html body multicol listing', textBlockElementsMap);\n const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n const transparentElementsMap = createLookupTable('transparent_elements', 'a ins del canvas map');\n const wrapBlockElementsMap = createLookupTable('wrap_block_elements', 'pre ' + headings);\n each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n const addValidElements = validElements => {\n const globalElement = Optional.from(elements['@']);\n const hasPatternsRegExp = /[*?+]/;\n each$e(parseValidElementsRules(globalElement, validElements !== null && validElements !== void 0 ? validElements : ''), ({name, element, aliasName}) => {\n if (aliasName) {\n elements[aliasName] = element;\n }\n if (hasPatternsRegExp.test(name)) {\n const patternElement = element;\n patternElement.pattern = patternToRegExp(name);\n patternElements.push(patternElement);\n } else {\n elements[name] = element;\n }\n });\n };\n const setValidElements = validElements => {\n patternElements = [];\n each$e(keys(elements), name => {\n delete elements[name];\n });\n addValidElements(validElements);\n };\n const addCustomElement = (name, spec) => {\n var _a, _b;\n delete mapCache.text_block_elements;\n delete mapCache.block_elements;\n const inline = spec.extends ? !isBlock(spec.extends) : false;\n const cloneName = spec.extends;\n children[name] = cloneName ? children[cloneName] : {};\n customElementsMap[name] = cloneName !== null && cloneName !== void 0 ? cloneName : name;\n nonEmptyElementsMap[name.toUpperCase()] = {};\n nonEmptyElementsMap[name] = {};\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (cloneName && !elements[name] && elements[cloneName]) {\n const customRule = deepCloneElementRule(elements[cloneName]);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n } else {\n elements[name] = {\n attributesOrder: [],\n attributes: {}\n };\n }\n if (isArray$1(spec.attributes)) {\n const processAttrName = name => {\n customRule.attributesOrder.push(name);\n customRule.attributes[name] = {};\n };\n const customRule = (_a = elements[name]) !== null && _a !== void 0 ? _a : {};\n delete customRule.attributesDefault;\n delete customRule.attributesForced;\n delete customRule.attributePatterns;\n delete customRule.attributesRequired;\n customRule.attributesOrder = [];\n customRule.attributes = {};\n each$e(spec.attributes, attrName => {\n const globalAttrs = getGlobalAttributeSet(schemaType);\n parseValidChild(attrName).each(({preset, name}) => {\n if (preset) {\n if (name === 'global') {\n each$e(globalAttrs, processAttrName);\n }\n } else {\n processAttrName(name);\n }\n });\n });\n elements[name] = customRule;\n }\n if (isBoolean(spec.padEmpty)) {\n const customRule = (_b = elements[name]) !== null && _b !== void 0 ? _b : {};\n customRule.paddEmpty = spec.padEmpty;\n elements[name] = customRule;\n }\n if (isArray$1(spec.children)) {\n const customElementChildren = {};\n const processNodeName = name => {\n customElementChildren[name] = {};\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(spec.children, child => {\n parseValidChild(child).each(({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n });\n children[name] = customElementChildren;\n }\n if (cloneName) {\n each$d(children, (element, elmName) => {\n if (element[cloneName]) {\n children[elmName] = element = extend$2({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n }\n };\n const addCustomElementsFromString = customElements => {\n each$e(parseCustomElementsRules(customElements !== null && customElements !== void 0 ? customElements : ''), ({name, cloneName}) => {\n addCustomElement(name, { extends: cloneName });\n });\n };\n const addCustomElements = customElements => {\n if (isObject(customElements)) {\n each$d(customElements, (spec, name) => addCustomElement(name, spec));\n } else if (isString(customElements)) {\n addCustomElementsFromString(customElements);\n }\n };\n const addValidChildren = validChildren => {\n each$e(parseValidChildrenRules(validChildren !== null && validChildren !== void 0 ? validChildren : ''), ({operation, name, validChildren}) => {\n const parent = operation === 'replace' ? { '#comment': {} } : children[name];\n const processNodeName = name => {\n if (operation === 'remove') {\n delete parent[name];\n } else {\n parent[name] = {};\n }\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(validChildren, ({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n children[name] = parent;\n });\n };\n const getElementRule = name => {\n const element = elements[name];\n if (element) {\n return element;\n }\n let i = patternElements.length;\n while (i--) {\n const patternElement = patternElements[i];\n if (patternElement.pattern.test(name)) {\n return patternElement;\n }\n }\n return undefined;\n };\n const setup = () => {\n if (!settings.valid_elements) {\n each$b(schemaItems, (element, name) => {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n each$b(split$1('strong/b em/i'), item => {\n const items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n each$b(textInlineElementsMap, (_val, name) => {\n if (elements[name]) {\n if (settings.padd_empty_block_inline_children) {\n elements[name].paddInEmptyBlock = true;\n }\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('ol ul blockquote a table tbody'), name => {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li summary'), name => {\n if (elements[name]) {\n elements[name].paddEmpty = true;\n }\n });\n each$b(split$1('span'), name => {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n each$b(schemaItems, (element, name) => {\n children[name] = element.children;\n });\n }\n delete elements.svg;\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$b({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, (parents, item) => {\n if (elements[item]) {\n elements[item].parentsRequired = split$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$b(explode$2(settings.invalid_elements), item => {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n };\n const getValidStyles = constant(validStyles);\n const getInvalidStyles = constant(invalidStyles);\n const getValidClasses = constant(validClasses);\n const getBoolAttrs = constant(boolAttrMap);\n const getBlockElements = constant(blockElementsMap);\n const getTextBlockElements = constant(textBlockElementsMap);\n const getTextInlineElements = constant(textInlineElementsMap);\n const getVoidElements = constant(Object.seal(voidElementsMap));\n const getSelfClosingElements = constant(selfClosingElementsMap);\n const getNonEmptyElements = constant(nonEmptyElementsMap);\n const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n const getWhitespaceElements = constant(whitespaceElementsMap);\n const getTransparentElements = constant(transparentElementsMap);\n const getWrapBlockElements = constant(wrapBlockElementsMap);\n const getSpecialElements = constant(Object.seal(specialElements));\n const isValidChild = (name, child) => {\n const parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n const isValid = (name, attr) => {\n const rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n const attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n let i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(attr)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n const isBlock = name => has$2(getBlockElements(), name);\n const isInline = name => !startsWith(name, '#') && isValid(name) && !isBlock(name);\n const isWrapper = name => has$2(getWrapBlockElements(), name) || isInline(name);\n const getCustomElements = constant(customElementsMap);\n setup();\n return {\n type: schemaType,\n children,\n elements,\n getValidStyles,\n getValidClasses,\n getBlockElements,\n getInvalidStyles,\n getVoidElements,\n getTextBlockElements,\n getTextInlineElements,\n getBoolAttrs,\n getElementRule,\n getSelfClosingElements,\n getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements,\n getWhitespaceElements,\n getTransparentElements,\n getSpecialElements,\n isValidChild,\n isValid,\n isBlock,\n isInline,\n isWrapper,\n getCustomElements,\n addValidElements,\n setValidElements,\n addCustomElements,\n addValidChildren\n };\n };\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\d+|\\d+)%?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const getColorFormat = colorString => {\n if (rgbRegex.test(colorString)) {\n return 'rgb';\n } else if (rgbaRegex.test(colorString)) {\n return 'rgba';\n }\n return 'other';\n };\n const fromString = rgbaString => {\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n\n const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n const Styles = (settings = {}, schema) => {\n const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n const trimRightRegExp = /\\s+$/;\n const encodingLookup = {};\n let validStyles;\n let invalidStyles;\n const invisibleChar = zeroWidth;\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n for (let i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n const self = {\n parse: css => {\n const styles = {};\n let isEncoded = false;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope || self;\n const compress = (prefix, suffix, noJoin) => {\n const top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n const right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n const bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n const left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n const box = [\n top,\n right,\n bottom,\n left\n ];\n let i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n const canCompress = key => {\n const value = styles[key];\n if (!value) {\n return;\n }\n const values = value.indexOf(',') > -1 ? [value] : value.split(' ');\n let i = values.length;\n while (i--) {\n if (values[i] !== values[0]) {\n return false;\n }\n }\n styles[key] = values[0];\n return true;\n };\n const compress2 = (target, a, b, c) => {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n const encode = str => {\n isEncoded = true;\n return encodingLookup[str];\n };\n const decode = (str, keepSlashes) => {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, str => {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n const decodeSingleHexSequence = escSeq => {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n const decodeHexSequences = value => {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n const processUrl = (match, url, url2, url3, str, str2) => {\n str = str || str2;\n if (str) {\n str = decode(str);\n return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n }\n url = decode(url || url2 || url3 || '');\n if (!settings.allow_script_urls) {\n const scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return `url('` + url.replace(/\\'/g, `\\\\'`) + `')`;\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, str => {\n return str.replace(/[;:]/g, encode);\n });\n let matches;\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n let value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n if (getColorFormat(value) === 'rgb') {\n fromString(value).each(rgba => {\n value = rgbaToHexString(toString(rgba)).toLowerCase();\n });\n }\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: (styles, elementName) => {\n let css = '';\n const serializeStyles = (elemName, validStyleList) => {\n const styleList = validStyleList[elemName];\n if (styleList) {\n for (let i = 0, l = styleList.length; i < l; i++) {\n const name = styleList[i];\n const value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n const isValid = (name, elemName) => {\n if (!invalidStyles || !elemName) {\n return true;\n }\n let styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elemName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*', validStyles);\n serializeStyles(elementName, validStyles);\n } else {\n each$d(styles, (value, name) => {\n if (value && isValid(name, elementName)) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n return self;\n };\n\n const deprecated = {\n keyLocation: true,\n layerX: true,\n layerY: true,\n returnValue: true,\n webkitMovementX: true,\n webkitMovementY: true,\n keyIdentifier: true,\n mozPressure: true\n };\n const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n const clone$3 = (originalEvent, data) => {\n const event = data !== null && data !== void 0 ? data : {};\n for (const name in originalEvent) {\n if (!has$2(deprecated, name)) {\n event[name] = originalEvent[name];\n }\n }\n if (isNonNullable(originalEvent.composedPath)) {\n event.composedPath = () => originalEvent.composedPath();\n }\n if (isNonNullable(originalEvent.getModifierState)) {\n event.getModifierState = keyArg => originalEvent.getModifierState(keyArg);\n }\n if (isNonNullable(originalEvent.getTargetRanges)) {\n event.getTargetRanges = () => originalEvent.getTargetRanges();\n }\n return event;\n };\n const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n var _a;\n const event = clone$3(originalEvent, data);\n event.type = type;\n if (isNullable(event.target)) {\n event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n }\n if (needsNormalizing(originalEvent)) {\n event.preventDefault = () => {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n }\n };\n event.stopPropagation = () => {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n }\n };\n event.stopImmediatePropagation = () => {\n event.isImmediatePropagationStopped = always;\n event.stopPropagation();\n };\n if (!hasIsDefaultPrevented(event)) {\n event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n event.isPropagationStopped = event.cancelBubble === true ? always : never;\n event.isImmediatePropagationStopped = never;\n }\n }\n return event;\n };\n\n const eventExpandoPrefix = 'mce-data-';\n const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n const addEvent = (target, name, callback, capture) => {\n target.addEventListener(name, callback, capture || false);\n };\n const removeEvent = (target, name, callback, capture) => {\n target.removeEventListener(name, callback, capture || false);\n };\n const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n const fix = (originalEvent, data) => {\n const event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n const eventDoc = event.target.ownerDocument || document;\n const doc = eventDoc.documentElement;\n const body = eventDoc.body;\n const mouseEvent = event;\n mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n return event;\n };\n const bindOnReady = (win, callback, eventUtils) => {\n const doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n const isDocReady = () => {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n const readyHandler = () => {\n removeEvent(win, 'DOMContentLoaded', readyHandler);\n removeEvent(win, 'load', readyHandler);\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n win = null;\n };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n if (!eventUtils.domLoaded) {\n addEvent(win, 'load', readyHandler);\n }\n };\n class EventUtils {\n constructor() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n bind(target, names, callback, scope) {\n const self = this;\n let callbackList;\n const win = window;\n const defaultNativeHandler = evt => {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || isText$b(target) || isComment(target)) {\n return callback;\n }\n let id;\n if (!target[self.expando]) {\n id = self.count++;\n target[self.expando] = id;\n self.events[id] = {};\n } else {\n id = target[self.expando];\n }\n scope = scope || target;\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n let name = namesList[i];\n let nativeHandler = defaultNativeHandler;\n let capture = false;\n let fakeName = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = evt => {\n const event = fix(evt || win.event);\n event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(event, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback(fix({ type: name }));\n } else {\n callbackList.push({\n func: callback,\n scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n }\n unbind(target, names, callback) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n const id = target[this.expando];\n if (id) {\n let eventMap = this.events[id];\n if (names) {\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n const name = namesList[i];\n const callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n let ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n const nativeHandler = callbackList.nativeHandler;\n const fakeName = callbackList.fakeName, capture = callbackList.capture;\n const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n newCallbackList.nativeHandler = nativeHandler;\n newCallbackList.fakeName = fakeName;\n newCallbackList.capture = capture;\n eventMap[name] = newCallbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n each$d(eventMap, (callbackList, name) => {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (const name in eventMap) {\n if (has$2(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n }\n fire(target, name, args) {\n return this.dispatch(target, name, args);\n }\n dispatch(target, name, args) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n const event = fix({\n type: name,\n target\n }, args);\n do {\n const id = target[this.expando];\n if (id) {\n this.executeHandlers(event, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !event.isPropagationStopped());\n return this;\n }\n clean(target) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n if (target[this.expando]) {\n this.unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n this.unbind(target);\n const children = target.getElementsByTagName('*');\n let i = children.length;\n while (i--) {\n target = children[i];\n if (target[this.expando]) {\n this.unbind(target);\n }\n }\n }\n return this;\n }\n destroy() {\n this.events = {};\n }\n cancel(e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n }\n executeHandlers(evt, id) {\n const container = this.events[id];\n const callbackList = container && container[evt.type];\n if (callbackList) {\n for (let i = 0, l = callbackList.length; i < l; i++) {\n const callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n }\n }\n EventUtils.Event = new EventUtils();\n\n const each$a = Tools.each;\n const grep = Tools.grep;\n const internalStyleName = 'data-mce-style';\n const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n const legacySetAttribute = (elm, name, value) => {\n if (isNullable(value) || value === '') {\n remove$9(elm, name);\n } else {\n set$3(elm, name, value);\n }\n };\n const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n const findNodeIndex = (node, normalized) => {\n let idx = 0;\n if (node) {\n for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n const nodeType = tempNode.nodeType;\n if (normalized && isText$b(tempNode)) {\n if (nodeType === lastNodeType || !tempNode.data.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n const updateInternalStyleAttr = (styles, elm) => {\n const rawValue = get$9(elm, 'style');\n const value = styles.serialize(styles.parse(rawValue), name(elm));\n legacySetAttribute(elm, internalStyleName, value);\n };\n const convertStyleToString = (cssValue, cssName) => {\n if (isNumber(cssValue)) {\n return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n } else {\n return cssValue;\n }\n };\n const applyStyle$1 = ($elm, cssName, cssValue) => {\n const normalizedName = camelCaseToHyphens(cssName);\n if (isNullable(cssValue) || cssValue === '') {\n remove$5($elm, normalizedName);\n } else {\n set$2($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n }\n };\n const setupAttrHooks = (styles, settings, getContext) => {\n const keepValues = settings.keep_values;\n const keepUrlHook = {\n set: (elm, value, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (isFunction(settings.url_converter) && isNonNullable(value)) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n }\n const internalName = 'data-mce-' + name;\n legacySetAttribute(sugarElm, internalName, value);\n legacySetAttribute(sugarElm, name, value);\n },\n get: (elm, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n }\n };\n const attrHooks = {\n style: {\n set: (elm, value) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (keepValues) {\n legacySetAttribute(sugarElm, internalStyleName, value);\n }\n remove$9(sugarElm, 'style');\n if (isString(value)) {\n setAll(sugarElm, styles.parse(value));\n }\n },\n get: elm => {\n const sugarElm = SugarElement.fromDom(elm);\n const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n return styles.serialize(styles.parse(value), name(sugarElm));\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n const DOMUtils = (doc, settings = {}) => {\n const addedStyles = {};\n const win = window;\n const files = {};\n let counter = 0;\n const stdMode = true;\n const boxModel = true;\n const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n const boundEvents = [];\n const schema = settings.schema ? settings.schema : Schema({});\n const styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n const blockElementsMap = schema.getBlockElements();\n const isBlock = node => {\n if (isString(node)) {\n return has$2(blockElementsMap, node);\n } else {\n return isElement$6(node) && (has$2(blockElementsMap, node.nodeName) || isTransparentBlock(schema, node));\n }\n };\n const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n const _get = elm => {\n const value = get(elm);\n return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n };\n const getAttrib = (elm, name, defaultVal = '') => {\n let value;\n const $elm = _get(elm);\n if (isNonNullable($elm) && isElement$7($elm)) {\n const hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm.dom, name);\n } else {\n value = get$9($elm, name);\n }\n }\n return isNonNullable(value) ? value : defaultVal;\n };\n const getAttribs = elm => {\n const node = get(elm);\n return isNullable(node) ? [] : node.attributes;\n };\n const setAttrib = (elm, name, value) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const val = value === '' ? null : value;\n const originalValue = get$9($elm, name);\n const hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm.dom, val, name);\n } else {\n legacySetAttribute($elm, name, val);\n }\n if (originalValue !== val && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm.dom,\n attrName: name,\n attrValue: val\n });\n }\n }\n });\n };\n const clone = (node, deep) => {\n return node.cloneNode(deep);\n };\n const getRoot = () => settings.root_element || doc.body;\n const getViewPort = argWin => {\n const vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n const setStyle = (elm, name, value) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n applyStyle$1($elm, name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const setStyles = (elm, stylesArg) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n each$d(stylesArg, (v, n) => {\n applyStyle$1($elm, n, v);\n });\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const getStyle = (elm, name, computed) => {\n const $elm = get(elm);\n if (isNullable($elm) || !isHTMLElement($elm) && !isSVGElement($elm)) {\n return undefined;\n }\n if (computed) {\n return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n } else {\n name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n if (name === 'float') {\n name = 'cssFloat';\n }\n return $elm.style ? $elm.style[name] : undefined;\n }\n };\n const getSize = elm => {\n const $elm = get(elm);\n if (!$elm) {\n return {\n w: 0,\n h: 0\n };\n }\n let w = getStyle($elm, 'width');\n let h = getStyle($elm, 'height');\n if (!w || w.indexOf('px') === -1) {\n w = '0';\n }\n if (!h || h.indexOf('px') === -1) {\n h = '0';\n }\n return {\n w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n h: parseInt(h, 10) || $elm.offsetHeight || $elm.clientHeight\n };\n };\n const getRect = elm => {\n const $elm = get(elm);\n const pos = getPos$1($elm);\n const size = getSize($elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n const is = (elm, selector) => {\n if (!elm) {\n return false;\n }\n const elms = isArray$1(elm) ? elm : [elm];\n return exists(elms, e => {\n return is$1(SugarElement.fromDom(e), selector);\n });\n };\n const getParents = (elm, selector, root, collect) => {\n const result = [];\n let node = get(elm);\n collect = collect === undefined;\n const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (isString(selector)) {\n if (selector === '*') {\n selector = isElement$6;\n } else {\n const selectorVal = selector;\n selector = node => is(node, selectorVal);\n }\n }\n while (node) {\n if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n const getParent = (node, selector, root) => {\n const parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n const _findSib = (node, selector, name) => {\n let func = selector;\n if (node) {\n if (isString(selector)) {\n func = node => {\n return is(node, selector);\n };\n }\n for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n if (isFunction(func) && func(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n const isParentNode = node => isFunction(node.querySelectorAll);\n const select = (selector, scope) => {\n var _a, _b;\n const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n };\n const run = function (elm, func, scope) {\n const context = scope !== null && scope !== void 0 ? scope : this;\n if (isArray$1(elm)) {\n const result = [];\n each$a(elm, (e, i) => {\n const node = get(e);\n if (node) {\n result.push(func.call(context, node, i));\n }\n });\n return result;\n } else {\n const node = get(elm);\n return !node ? false : func.call(context, node);\n }\n };\n const setAttribs = (elm, attrs) => {\n run(elm, $elm => {\n each$d(attrs, (value, name) => {\n setAttrib($elm, name, value);\n });\n });\n };\n const setHTML = (elm, html) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n set$1($elm, html);\n });\n };\n const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n const newElm = isString(name) ? doc.createElement(name) : name;\n if (isNonNullable(attrs)) {\n setAttribs(newElm, attrs);\n }\n if (html) {\n if (!isString(html) && html.nodeType) {\n newElm.appendChild(html);\n } else if (isString(html)) {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n const decode = Entities.decode;\n const encode = Entities.encodeAllRaw;\n const createHTML = (name, attrs, html = '') => {\n let outHtml = '<' + name;\n for (const key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n return outHtml + ' />';\n } else {\n return outHtml + '>' + html + '';\n }\n };\n const createFragment = html => {\n const container = doc.createElement('div');\n const frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n let node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n const remove = (node, keepChildren) => {\n return run(node, n => {\n const $node = SugarElement.fromDom(n);\n if (keepChildren) {\n each$e(children$1($node), child => {\n if (isText$c(child) && child.dom.length === 0) {\n remove$4(child);\n } else {\n before$3($node, child);\n }\n });\n }\n remove$4($node);\n return $node.dom;\n });\n };\n const removeAllAttribs = e => run(e, e => {\n const attrs = e.attributes;\n for (let i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n const parseStyle = cssText => styles.parse(cssText);\n const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n const addStyle = cssText => {\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n let styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n const head = doc.head;\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n const loadCSS = urls => {\n if (!urls) {\n urls = '';\n }\n each$e(urls.split(','), url => {\n files[url] = true;\n styleSheetLoader.load(url).catch(noop);\n });\n };\n const toggleClass = (elm, cls, state) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const classes = cls.split(' ');\n each$e(classes, c => {\n if (isNonNullable(state)) {\n const fn = state ? add$2 : remove$6;\n fn($elm, c);\n } else {\n toggle$1($elm, c);\n }\n });\n }\n });\n };\n const addClass = (elm, cls) => {\n toggleClass(elm, cls, true);\n };\n const removeClass = (elm, cls) => {\n toggleClass(elm, cls, false);\n };\n const hasClass = (elm, cls) => {\n const $elm = _get(elm);\n const classes = cls.split(' ');\n return isNonNullable($elm) && forall(classes, c => has($elm, c));\n };\n const show = elm => {\n run(elm, e => remove$5(SugarElement.fromDom(e), 'display'));\n };\n const hide = elm => {\n run(elm, e => set$2(SugarElement.fromDom(e), 'display', 'none'));\n };\n const isHidden = elm => {\n const $elm = _get(elm);\n return isNonNullable($elm) && is$2(getRaw($elm, 'display'), 'none');\n };\n const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n const getOuterHTML = elm => {\n const $elm = _get(elm);\n if (isNonNullable($elm)) {\n return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n } else {\n return '';\n }\n };\n const setOuterHTML = (elm, html) => {\n run(elm, $elm => {\n if (isElement$6($elm)) {\n $elm.outerHTML = html;\n }\n });\n };\n const insertAfter = (node, reference) => {\n const referenceNode = get(reference);\n return run(node, node => {\n const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n if (parent) {\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n }\n return node;\n });\n };\n const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n var _a;\n const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n if (keepChildren) {\n each$a(grep(elm.childNodes), node => {\n replacee.appendChild(node);\n });\n }\n (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n return elm;\n });\n const rename = (elm, name) => {\n if (elm.nodeName !== name.toUpperCase()) {\n const newElm = create(name);\n each$a(getAttribs(elm), attrNode => {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n return newElm;\n } else {\n return elm;\n }\n };\n const findCommonAncestor = (a, b) => {\n let ps = a;\n while (ps) {\n let pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n } else {\n return ps;\n }\n };\n const isEmpty = (node, elements, options) => {\n if (isPlainObject(elements)) {\n const isContent = node => {\n const name = node.nodeName.toLowerCase();\n return Boolean(elements[name]);\n };\n return isEmptyNode(schema, node, {\n ...options,\n isContent\n });\n } else {\n return isEmptyNode(schema, node, options);\n }\n };\n const createRng = () => doc.createRange();\n const split = (parentElm, splitElm, replacementElm) => {\n let range = createRng();\n let beforeFragment;\n let afterFragment;\n if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n const parentNode = parentElm.parentNode;\n range.setStart(parentNode, findNodeIndex(parentElm));\n range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n beforeFragment = range.extractContents();\n range = createRng();\n range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n range.setEnd(parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode.insertBefore(trimNode(self, beforeFragment, schema), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment, schema), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n } else {\n return undefined;\n }\n };\n const bind = (target, name, func, scope) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n } else {\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n }\n };\n const unbind = (target, name, func) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\n } else {\n if (boundEvents.length > 0 && (target === doc || target === win)) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n const fire = (target, name, evt) => events.dispatch(target, name, evt);\n const getContentEditable = node => {\n if (node && isHTMLElement(node)) {\n const contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n const getContentEditableParent = node => {\n const root = getRoot();\n let state = null;\n for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n state = getContentEditable(tempNode);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n const isEditable = node => {\n if (isNonNullable(node)) {\n const scope = isElement$6(node) ? node : node.parentElement;\n return isNonNullable(scope) && isHTMLElement(scope) && isEditable$2(SugarElement.fromDom(scope));\n } else {\n return false;\n }\n };\n const destroy = () => {\n if (boundEvents.length > 0) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n each$d(files, (_, url) => {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n };\n const isChildOf = (node, parent) => {\n return node === parent || parent.contains(node);\n };\n const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n const self = {\n doc,\n settings,\n win,\n files,\n stdMode,\n boxModel,\n styleSheetLoader,\n boundEvents,\n styles,\n schema,\n events,\n isBlock: isBlock,\n root: null,\n clone,\n getRoot,\n getViewPort,\n getRect,\n getSize,\n getParent,\n getParents: getParents,\n get,\n getNext,\n getPrev,\n select,\n is,\n add,\n create,\n createHTML,\n createFragment,\n remove,\n setStyle,\n getStyle: getStyle,\n setStyles,\n removeAllAttribs,\n setAttrib,\n setAttribs,\n getAttrib,\n getPos: getPos$1,\n parseStyle,\n serializeStyle,\n addStyle,\n loadCSS,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n show,\n hide,\n isHidden,\n uniqueId,\n setHTML,\n getOuterHTML,\n setOuterHTML,\n decode,\n encode,\n insertAfter,\n replace,\n rename,\n findCommonAncestor,\n run,\n getAttribs,\n isEmpty,\n createRng,\n nodeIndex: findNodeIndex,\n split,\n bind: bind,\n unbind: unbind,\n fire,\n dispatch,\n getContentEditable,\n getContentEditableParent,\n isEditable,\n destroy,\n isChildOf,\n dumpRng\n };\n const attrHooks = setupAttrHooks(styles, settings, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n const DOM$b = DOMUtils.DOM;\n const QUEUED = 0;\n const LOADING = 1;\n const LOADED = 2;\n const FAILED = 3;\n class ScriptLoader {\n constructor(settings = {}) {\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = false;\n this.settings = settings;\n }\n _setReferrerPolicy(referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n }\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const dom = DOM$b;\n let elm;\n const cleanup = () => {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n const done = () => {\n cleanup();\n resolve();\n };\n const error = () => {\n cleanup();\n reject('Failed to load script: ' + url);\n };\n const id = dom.uniqueId();\n elm = document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n if (this.settings.referrerPolicy) {\n dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n }\n elm.onload = done;\n elm.onerror = error;\n (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n });\n }\n isDone(url) {\n return this.states[url] === LOADED;\n }\n markDone(url) {\n this.states[url] = LOADED;\n }\n add(url) {\n const self = this;\n self.queue.push(url);\n const state = self.states[url];\n if (state === undefined) {\n self.states[url] = QUEUED;\n }\n return new Promise((resolve, reject) => {\n if (!self.scriptLoadedCallbacks[url]) {\n self.scriptLoadedCallbacks[url] = [];\n }\n self.scriptLoadedCallbacks[url].push({\n resolve,\n reject\n });\n });\n }\n load(url) {\n return this.add(url);\n }\n remove(url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n }\n loadQueue() {\n const queue = this.queue;\n this.queue = [];\n return this.loadScripts(queue);\n }\n loadScripts(scripts) {\n const self = this;\n const execCallbacks = (name, url) => {\n get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n each$e(callbacks, callback => callback[name](url));\n });\n delete self.scriptLoadedCallbacks[url];\n };\n const processResults = results => {\n const failures = filter$5(results, result => result.status === 'rejected');\n if (failures.length > 0) {\n return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n } else {\n return Promise.resolve();\n }\n };\n const load = urls => Promise.allSettled(map$3(urls, url => {\n if (self.states[url] === LOADED) {\n execCallbacks('resolve', url);\n return Promise.resolve();\n } else if (self.states[url] === FAILED) {\n execCallbacks('reject', url);\n return Promise.reject(url);\n } else {\n self.states[url] = LOADING;\n return self.loadScript(url).then(() => {\n self.states[url] = LOADED;\n execCallbacks('resolve', url);\n const queue = self.queue;\n if (queue.length > 0) {\n self.queue = [];\n return load(queue).then(processResults);\n } else {\n return Promise.resolve();\n }\n }, () => {\n self.states[url] = FAILED;\n execCallbacks('reject', url);\n return Promise.reject(url);\n });\n }\n }));\n const processQueue = urls => {\n self.loading = true;\n return load(urls).then(results => {\n self.loading = false;\n const nextQueuedItem = self.queueLoadedCallbacks.shift();\n Optional.from(nextQueuedItem).each(call);\n return processResults(results);\n });\n };\n const uniqueScripts = stringArray(scripts);\n if (self.loading) {\n return new Promise((resolve, reject) => {\n self.queueLoadedCallbacks.push(() => {\n processQueue(uniqueScripts).then(resolve, reject);\n });\n });\n } else {\n return processQueue(uniqueScripts);\n }\n }\n }\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n const isDuplicated = (items, item) => {\n const firstIndex = items.indexOf(item);\n return firstIndex !== -1 && items.indexOf(item, firstIndex + 1) > firstIndex;\n };\n const isRaw = str => isObject(str) && has$2(str, 'raw');\n const isTokenised = str => isArray$1(str) && str.length > 1;\n const data = {};\n const currentCode = Cell('en');\n const getLanguageData = () => get$a(data, currentCode.get());\n const getData$1 = () => map$2(data, value => ({ ...value }));\n const setCode = newCode => {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n const getCode = () => currentCode.get();\n const add$1 = (code, items) => {\n let langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n const lcNames = map$3(keys(items), name => name.toLowerCase());\n each$d(items, (translation, name) => {\n const lcName = name.toLowerCase();\n if (lcName !== name && isDuplicated(lcNames, lcName)) {\n if (!has$2(items, lcName)) {\n langData[lcName] = translation;\n }\n langData[name] = translation;\n } else {\n langData[lcName] = translation;\n }\n });\n };\n const translate = text => {\n const langData = getLanguageData().getOr({});\n const toString = obj => {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n const isEmpty = text => text === '' || text === null || text === undefined;\n const getLangData = text => {\n const textStr = toString(text);\n return has$2(langData, textStr) ? toString(langData[textStr]) : get$a(langData, textStr.toLowerCase()).map(toString).getOr(textStr);\n };\n const removeContext = str => str.replace(/{context:\\w+}$/, '');\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n const values = text.slice(1);\n const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n const hasCode = code => has$2(data, code);\n const I18n = {\n getData: getData$1,\n setCode,\n getCode,\n add: add$1,\n translate,\n isRtl: isRtl$1,\n hasCode\n };\n\n const AddOnManager = () => {\n const items = [];\n const urls = {};\n const lookup = {};\n const _listeners = [];\n const runListeners = (name, state) => {\n const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n each$e(matchedListeners, listener => listener.resolve());\n };\n const isLoaded = name => has$2(urls, name);\n const isAdded = name => has$2(lookup, name);\n const get = name => {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n const loadLanguagePack = (name, languages) => {\n const language = I18n.getCode();\n const wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n };\n const requireLangPack = (name, languages) => {\n if (AddOnManager.languageLoad !== false) {\n if (isLoaded(name)) {\n loadLanguagePack(name, languages);\n } else {\n waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n }\n }\n };\n const add = (id, addOn) => {\n items.push(addOn);\n lookup[id] = { instance: addOn };\n runListeners(id, 'added');\n return addOn;\n };\n const remove = name => {\n delete urls[name];\n delete lookup[name];\n };\n const createUrl = (baseUrl, dep) => {\n if (isString(dep)) {\n return isString(baseUrl) ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n } else {\n return dep;\n }\n };\n const load = (name, addOnUrl) => {\n if (urls[name]) {\n return Promise.resolve();\n }\n let urlString = isString(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n const done = () => {\n runListeners(name, 'loaded');\n return Promise.resolve();\n };\n if (lookup[name]) {\n return done();\n } else {\n return ScriptLoader.ScriptLoader.add(urlString).then(done);\n }\n };\n const waitFor = (name, state = 'added') => {\n if (state === 'added' && isAdded(name)) {\n return Promise.resolve();\n } else if (state === 'loaded' && isLoaded(name)) {\n return Promise.resolve();\n } else {\n return new Promise(resolve => {\n _listeners.push({\n name,\n state,\n resolve\n });\n });\n }\n };\n return {\n items,\n urls,\n lookup,\n get,\n requireLangPack,\n add,\n remove,\n createUrl,\n load,\n waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n AddOnManager.ModelManager = AddOnManager();\n\n const first$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$3(scope, selector, isRoot).isSome();\n\n const annotation = constant('mce-annotation');\n const dataAnnotation = constant('data-mce-annotation');\n const dataAnnotationId = constant('data-mce-annotation-uid');\n const dataAnnotationActive = constant('data-mce-annotation-active');\n const dataAnnotationClasses = constant('data-mce-annotation-classes');\n const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n const isRoot$1 = root => node => eq(node, root);\n const identify = (editor, annotationName) => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const root = SugarElement.fromDom(editor.getBody());\n const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n const newStart = child$1(start, rng.startOffset).getOr(start);\n const closest = closest$3(newStart, selector, isRoot$1(root));\n return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n const elements = findMarkers(editor, uid);\n return {\n uid,\n name,\n elements\n };\n })));\n };\n const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$1(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n const findMarkers = (editor, uid) => {\n const body = SugarElement.fromDom(editor.getBody());\n const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n };\n const findAll = (editor, name) => {\n const body = SugarElement.fromDom(editor.getBody());\n const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n const directory = {};\n each$e(markers, m => {\n if (!isBogusElement(m, body)) {\n const uid = get$9(m, dataAnnotationId());\n const nodesAlready = get$a(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n }\n });\n return directory;\n };\n\n const setup$y = (editor, registry) => {\n const changeCallbacks = Cell({});\n const initData = () => ({\n listeners: [],\n previous: value$2()\n });\n const withCallbacks = (name, f) => {\n updateCallbacks(name, data => {\n f(data);\n return data;\n });\n };\n const updateCallbacks = (name, f) => {\n const callbackMap = changeCallbacks.get();\n const data = get$a(callbackMap, name).getOrThunk(initData);\n const outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n const fireCallbacks = (name, uid, elements) => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(true, name, {\n uid,\n nodes: map$3(elements, elem => elem.dom)\n }));\n });\n };\n const fireNoAnnotation = name => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(false, name));\n });\n };\n const toggleActiveAttr = (uid, state) => {\n each$e(findMarkers(editor, uid), elem => {\n if (state) {\n set$3(elem, dataAnnotationActive(), 'true');\n } else {\n remove$9(elem, dataAnnotationActive());\n }\n });\n };\n const onNodeChange = last(() => {\n const annotations = sort(registry.getNames());\n each$e(annotations, name => {\n updateCallbacks(name, data => {\n const prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(() => {\n prev.each(uid => {\n fireNoAnnotation(name);\n data.previous.clear();\n toggleActiveAttr(uid, false);\n });\n }, ({uid, name, elements}) => {\n if (!is$2(prev, uid)) {\n prev.each(uid => toggleActiveAttr(uid, false));\n fireCallbacks(name, uid, elements);\n data.previous.set(uid);\n toggleActiveAttr(uid, true);\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', () => {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', () => {\n onNodeChange.throttle();\n });\n const addListener = (name, f) => {\n updateCallbacks(name, data => ({\n previous: data.previous,\n listeners: data.listeners.concat([f])\n }));\n };\n return { addListener };\n };\n\n const setup$x = (editor, registry) => {\n const dataAnnotation$1 = dataAnnotation();\n const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n const removeDirectAnnotation = node => {\n var _a, _b;\n node.attr(dataAnnotationId(), null);\n node.attr(dataAnnotation(), null);\n node.attr(dataAnnotationActive(), null);\n const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => node.attr(name, null));\n const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n const newClassList = difference(classList, [annotation()].concat(customClasses));\n node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n node.attr(dataAnnotationClasses(), null);\n node.attr(dataAnnotationAttributes(), null);\n };\n editor.serializer.addTempAttr(dataAnnotationActive());\n editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n for (const node of nodes) {\n identifyParserNode(node).each(settings => {\n if (settings.persistent === false) {\n if (node.name === 'span') {\n node.unwrap();\n } else {\n removeDirectAnnotation(node);\n }\n }\n });\n }\n });\n };\n\n const create$b = () => {\n const annotations = {};\n const register = (name, settings) => {\n annotations[name] = {\n name,\n settings\n };\n };\n const lookup = name => get$a(annotations, name).map(a => a.settings);\n const getNames = () => keys(annotations);\n return {\n register,\n lookup,\n getNames\n };\n };\n\n const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$1 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const add = (element, classes) => {\n each$e(classes, x => {\n add$2(element, x);\n });\n };\n const remove$3 = (element, classes) => {\n each$e(classes, x => {\n remove$6(element, x);\n });\n };\n\n const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow$1 = original => clone$2(original, false);\n const deep$1 = original => clone$2(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$4(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$4(original, nu);\n const children = children$1(original);\n append(nu, children);\n remove$4(original);\n return nu;\n };\n\n const TextWalker = (startNode, rootNode, isBoundary = never) => {\n const walker = new DomTreeWalker(startNode, rootNode);\n const walk = direction => {\n let next;\n do {\n next = walker[direction]();\n } while (next && !isText$b(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$b);\n };\n return {\n current: () => Optional.from(walker.current()).filter(isText$b),\n next: () => walk('next'),\n prev: () => walk('prev'),\n prev2: () => walk('prev2')\n };\n };\n\n const TextSeeker = (dom, isBoundary) => {\n const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$b(node);\n const walk = (node, offset, walker, process) => {\n if (isText$b(node)) {\n const newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Optional.some({\n container: node,\n offset: newOffset\n });\n }\n }\n return walker().bind(next => walk(next.container, next.offset, walker, process));\n };\n const backwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.prev().map(prev => ({\n container: prev,\n offset: prev.length\n })), process).getOrNull();\n };\n const forwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.next().map(next => ({\n container: next,\n offset: 0\n })), process).getOrNull();\n };\n return {\n backwards,\n forwards\n };\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api$1 = NodeValue(isText$c, 'text');\n const get$3 = element => api$1.get(element);\n const getOption = element => api$1.getOption(element);\n const set = (element, value) => api$1.set(element, value);\n\n const tableCells = [\n 'td',\n 'th'\n ];\n const tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n const textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n const listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n const lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n const wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n const lazyLookup = items => {\n let lookup;\n return node => {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n const isTable$1 = node => name(node) === 'table';\n const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n const isTextBlock$2 = lazyLookup(textBlocks);\n const isList = lazyLookup(lists);\n const isListItem$1 = lazyLookup(listItems$1);\n const isTableSection = lazyLookup(tableSections);\n const isTableCell$2 = lazyLookup(tableCells);\n const isWsPreserveElement = lazyLookup(wsElements);\n\n const getLastChildren$1 = elm => {\n const children = [];\n let rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n const removeTrailingBr = elm => {\n const allBrs = descendants(elm, 'br');\n const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n if (allBrs.length === brs.length) {\n each$e(brs, remove$4);\n }\n };\n const createPaddingBr = () => {\n const br = SugarElement.fromTag('br');\n set$3(br, 'data-mce-bogus', '1');\n return br;\n };\n const fillWithPaddingBr = elm => {\n empty(elm);\n append$1(elm, createPaddingBr());\n };\n const trimBlockTrailingBr = (elm, schema) => {\n lastChild(elm).each(lastChild => {\n prevSibling(lastChild).each(lastChildPrevSibling => {\n if (schema.isBlock(name(elm)) && isBr$5(lastChild) && schema.isBlock(name(lastChildPrevSibling))) {\n remove$4(lastChild);\n }\n });\n });\n };\n\n const ZWSP$1 = zeroWidth;\n const isZwsp = isZwsp$2;\n const trim$2 = removeZwsp;\n const insert$5 = editor => editor.insertContent(ZWSP$1, { preserve_zwsp: true });\n\n const isElement$5 = isElement$6;\n const isText$9 = isText$b;\n const isCaretContainerBlock$1 = node => {\n if (isText$9(node)) {\n node = node.parentNode;\n }\n return isElement$5(node) && node.hasAttribute('data-mce-caret');\n };\n const isCaretContainerInline = node => isText$9(node) && isZwsp(node.data);\n const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n const insertInline$1 = (node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n const parentNode = node.parentNode;\n if (!before) {\n const sibling = node.nextSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer$1(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n }\n } else {\n const sibling = node.previousSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer$1(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n const isBeforeInline = pos => {\n const container = pos.container();\n if (!isText$b(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n const isAfterInline = pos => {\n const container = pos.container();\n if (!isText$b(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n const insertBlock = (blockName, node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createPaddingBr().dom);\n const parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n }\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n const trimBogusBr = elm => {\n var _a;\n const brs = elm.getElementsByTagName('br');\n const lastBr = brs[brs.length - 1];\n if (isBogus$1(lastBr)) {\n (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n }\n };\n const showCaretContainerBlock = caretContainer => {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('data-mce-style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n const round$2 = Math.round;\n const clone$1 = rect => {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round$2(rect.left),\n top: round$2(rect.top),\n bottom: round$2(rect.bottom),\n right: round$2(rect.right),\n width: round$2(rect.width),\n height: round$2(rect.height)\n };\n };\n const collapse = (rect, toStart) => {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n const isAbove$1 = (rect1, rect2) => {\n const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n const isBelow$1 = (rect1, rect2) => {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n const boundingClientRectFromRects = rects => {\n return foldl(rects, (acc, rect) => {\n return acc.fold(() => Optional.some(rect), prevRect => {\n const left = Math.min(rect.left, prevRect.left);\n const top = Math.min(rect.top, prevRect.top);\n const right = Math.max(rect.right, prevRect.right);\n const bottom = Math.max(rect.bottom, prevRect.bottom);\n return Optional.some({\n top,\n right,\n bottom,\n left,\n width: right - left,\n height: bottom - top\n });\n });\n }, Optional.none());\n };\n const distanceToRectEdgeFromXY = (rect, x, y) => {\n const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n };\n const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n const getSelectedNode = range => {\n const startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n const getNode$1 = (container, offset) => {\n if (isElement$6(container) && container.hasChildNodes()) {\n const childNodes = container.childNodes;\n const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n const getNodeUnsafe = (container, offset) => {\n if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n const extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n const or = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n const and = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n const isContentEditableTrue$2 = isContentEditableTrue$3;\n const isContentEditableFalse$a = isContentEditableFalse$b;\n const isBr$4 = isBr$6;\n const isText$8 = isText$b;\n const isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n const isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isTable = matchNodeNames(['table']);\n const isCaretContainer$1 = isCaretContainer$2;\n const isCaretCandidate$3 = node => {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$8(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n };\n const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$a(node);\n const isInEditable = (node, root) => {\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (isNonUiContentEditableFalse(tempNode)) {\n return false;\n }\n if (isContentEditableTrue$2(tempNode)) {\n return true;\n }\n }\n return true;\n };\n const isAtomicContentEditableFalse = node => {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n return result || isContentEditableTrue$2(elm);\n }, false);\n };\n const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n const isElement$4 = isElement$6;\n const isCaretCandidate$2 = isCaretCandidate$3;\n const isBlock$2 = matchStyleValues('display', 'block table');\n const isFloated = matchStyleValues('float', 'left right');\n const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n const isText$7 = isText$b;\n const isBr$3 = isBr$6;\n const nodeIndex$1 = DOMUtils.nodeIndex;\n const resolveIndex$1 = getNodeUnsafe;\n const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n const isRange = rng => !!rng.setStart && !!rng.setEnd;\n const isHiddenWhiteSpaceRange = range => {\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$b(container)) {\n const text = container.data;\n if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n const getBrClientRect = brNode => {\n const doc = brNode.ownerDocument;\n const rng = createRange$1(doc);\n const nbsp$1 = doc.createTextNode(nbsp);\n const parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n const clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n const getBoundingClientRectWebKitText = rng => {\n const sc = rng.startContainer;\n const ec = rng.endContainer;\n const so = rng.startOffset;\n const eo = rng.endOffset;\n if (sc === ec && isText$b(ec) && so === 0 && eo === 1) {\n const newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(newRng);\n } else {\n return null;\n }\n };\n const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n const getBoundingClientRect$1 = item => {\n var _a;\n let clientRect;\n const clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n }\n return clientRect;\n };\n const collapseAndInflateWidth = (clientRect, toStart) => {\n const newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n const getCaretPositionClientRects = caretPosition => {\n const clientRects = [];\n const addUniqueAndValidRect = clientRect => {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n const addCharacterOffset = (container, offset) => {\n const range = createRange$1(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n return;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n }\n }\n };\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (isText$7(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$4(container)) {\n if (caretPosition.isAtEnd()) {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$2(beforeNode) || isBlock$2(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n const CaretPosition = (container, offset, clientRects) => {\n const isAtStart = () => {\n if (isText$7(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n const isAtEnd = () => {\n if (isText$7(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n const toRange = () => {\n const range = createRange$1(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n const getClientRects = () => {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n const isVisible = () => getClientRects().length > 0;\n const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n return {\n container: constant(container),\n offset: constant(offset),\n toRange,\n getClientRects,\n isVisible,\n isAtStart,\n isAtEnd,\n isEqual,\n getNode\n };\n };\n CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$2(pos1.getClientRects()), isAbove$1).getOr(false);\n CaretPosition.isBelow = (pos1, pos2) => lift2(last$2(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n CaretPosition.isTextPosition = pos => pos ? isText$b(pos.container()) : false;\n CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n const trimEmptyTextNode$1 = (dom, node) => {\n if (isText$b(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const insertNode = (dom, rng, node) => {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n const insertFragment = (dom, rng, frag) => {\n const firstChild = Optional.from(frag.firstChild);\n const lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n };\n const rangeInsertNode = (dom, rng, node) => {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n const isText$6 = isText$b;\n const isBogus = isBogus$1;\n const nodeIndex = DOMUtils.nodeIndex;\n const normalizedParent = node => {\n const parentNode = node.parentNode;\n if (isBogus(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n const getChildNodes = node => {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, (result, node) => {\n if (isBogus(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n const normalizedTextOffset = (node, offset) => {\n let tempNode = node;\n while (tempNode = tempNode.previousSibling) {\n if (!isText$6(tempNode)) {\n break;\n }\n offset += tempNode.data.length;\n }\n return offset;\n };\n const equal = a => b => a === b;\n const normalizedNodeIndex = node => {\n let nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n const numTextFragments = reduce(nodes, (result, node, i) => {\n if (isText$6(node) && isText$6(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal(node), node);\n return index - numTextFragments;\n };\n const createPathItem = node => {\n const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n const parentsUntil$1 = (root, node, predicate) => {\n const parents = [];\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (predicate && predicate(tempNode)) {\n break;\n }\n parents.push(tempNode);\n }\n return parents;\n };\n const create$a = (root, caretPosition) => {\n let path = [];\n let container = caretPosition.container();\n let offset = caretPosition.offset();\n let outputOffset;\n if (isText$6(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n const childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n let parents = parentsUntil$1(root, container);\n parents = filter$3(parents, not(isBogus$1));\n path = path.concat(map$1(parents, node => {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n const resolvePathItem = (node, name, index) => {\n let nodes = getChildNodes(node);\n nodes = filter$3(nodes, (node, index) => {\n return !isText$6(node) || !isText$6(nodes[index - 1]);\n });\n nodes = filter$3(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n const findTextPosition = (container, offset) => {\n let node = container;\n let targetOffset = 0;\n while (isText$6(node)) {\n const dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$6(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$6(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n const resolve$1 = (root, path) => {\n if (!path) {\n return null;\n }\n const parts = path.split(',');\n const paths = parts[0].split('/');\n const offset = parts.length > 1 ? parts[1] : 'before';\n const container = reduce(paths, (result, value) => {\n const match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!match) {\n return null;\n }\n if (match[1] === 'text()') {\n match[1] = '#text';\n }\n return resolvePathItem(result, match[1], parseInt(match[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$6(container) && container.parentNode) {\n let nodeOffset;\n if (offset === 'after') {\n nodeOffset = nodeIndex(container) + 1;\n } else {\n nodeOffset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, nodeOffset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n const isContentEditableFalse$9 = isContentEditableFalse$b;\n const getNormalizedTextOffset$1 = (trim, container, offset) => {\n let trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (let node = container.previousSibling; node && isText$b(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n const getPoint = (dom, trim, normalized, rng, start) => {\n const container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const point = [];\n const root = dom.getRoot();\n if (isText$b(container)) {\n point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n } else {\n let after = 0;\n const childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (let node = container; node && node !== root; node = node.parentNode) {\n point.push(dom.nodeIndex(node, normalized));\n }\n return point;\n };\n const getLocation = (trim, selection, normalized, rng) => {\n const dom = selection.dom;\n const start = getPoint(dom, trim, normalized, rng, true);\n const forward = selection.isForward();\n const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n if (!selection.isCollapsed()) {\n const end = getPoint(dom, trim, normalized, rng, false);\n return {\n start,\n end,\n forward,\n ...fakeCaret\n };\n } else {\n return {\n start,\n forward,\n ...fakeCaret\n };\n }\n };\n const findIndex = (dom, name, element) => {\n let count = 0;\n Tools.each(dom.select(name), node => {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n } else if (node === element) {\n return false;\n } else {\n count++;\n return;\n }\n });\n return count;\n };\n const moveEndPoint$1 = (rng, start) => {\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n if (isElement$6(container) && container.nodeName === 'TR') {\n const childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n if (start) {\n rng.setStart(container, offset);\n } else {\n rng.setEnd(container, offset);\n }\n }\n }\n };\n const normalizeTableCellSelection = rng => {\n moveEndPoint$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n const findSibling = (node, offset) => {\n if (isElement$6(node)) {\n node = getNode$1(node, offset);\n if (isContentEditableFalse$9(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$b(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n let sibling = node.previousSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n }\n return undefined;\n };\n const findAdjacentContentEditableFalseElm = rng => {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n const getOffsetBookmark = (trim, normalized, selection) => {\n const element = selection.getNode();\n const rng = selection.getRng();\n if (element.nodeName === 'IMG' || isContentEditableFalse$9(element)) {\n const name = element.nodeName;\n return {\n name,\n index: findIndex(selection.dom, name, element)\n };\n }\n const sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n const name = sibling.tagName;\n return {\n name,\n index: findIndex(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n const getCaretBookmark = selection => {\n const rng = selection.getRng();\n return {\n start: create$a(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$a(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n forward: selection.isForward()\n };\n };\n const getRangeBookmark = selection => {\n return {\n rng: selection.getRng(),\n forward: selection.isForward()\n };\n };\n const createBookmarkSpan = (dom, id, filled) => {\n const args = {\n 'data-mce-type': 'bookmark',\n id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n const getPersistentBookmark = (selection, filled) => {\n const dom = selection.dom;\n let rng = selection.getRng();\n const id = dom.uniqueId();\n const collapsed = selection.isCollapsed();\n const element = selection.getNode();\n const name = element.nodeName;\n const forward = selection.isForward();\n if (name === 'IMG') {\n return {\n name,\n index: findIndex(dom, name, element)\n };\n }\n const rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id,\n keep: true,\n forward\n });\n return {\n id,\n forward\n };\n };\n const getBookmark$3 = (selection, type, normalized = false) => {\n if (type === 2) {\n return getOffsetBookmark(trim$2, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const generate = cases => {\n if (!isArray$1(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$e(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray$1(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$e(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n const hasBlockTrigger = (pattern, trigger) => (pattern.type === 'block-command' || pattern.type === 'block-format') && pattern.trigger === trigger;\n const normalizePattern = pattern => {\n var _a;\n const err = message => Result.error({\n message,\n pattern\n });\n const formatOrCmd = (name, onFormat, onCommand) => {\n if (pattern.format !== undefined) {\n let formats;\n if (isArray$1(pattern.format)) {\n if (!forall(pattern.format, isString)) {\n return err(name + ' pattern has non-string items in the `format` array');\n }\n formats = pattern.format;\n } else if (isString(pattern.format)) {\n formats = [pattern.format];\n } else {\n return err(name + ' pattern has non-string `format` parameter');\n }\n return Result.value(onFormat(formats));\n } else if (pattern.cmd !== undefined) {\n if (!isString(pattern.cmd)) {\n return err(name + ' pattern has non-string `cmd` parameter');\n }\n return Result.value(onCommand(pattern.cmd, pattern.value));\n } else {\n return err(name + ' pattern is missing both `format` and `cmd` parameters');\n }\n };\n if (!isObject(pattern)) {\n return err('Raw pattern is not an object');\n }\n if (!isString(pattern.start)) {\n return err('Raw pattern is missing `start` parameter');\n }\n if (pattern.end !== undefined) {\n if (!isString(pattern.end)) {\n return err('Inline pattern has non-string `end` parameter');\n }\n if (pattern.start.length === 0 && pattern.end.length === 0) {\n return err('Inline pattern has empty `start` and `end` parameters');\n }\n let start = pattern.start;\n let end = pattern.end;\n if (end.length === 0) {\n end = start;\n start = '';\n }\n return formatOrCmd('Inline', format => ({\n type: 'inline-format',\n start,\n end,\n format\n }), (cmd, value) => ({\n type: 'inline-command',\n start,\n end,\n cmd,\n value\n }));\n } else if (pattern.replacement !== undefined) {\n if (!isString(pattern.replacement)) {\n return err('Replacement pattern has non-string `replacement` parameter');\n }\n if (pattern.start.length === 0) {\n return err('Replacement pattern has empty `start` parameter');\n }\n return Result.value({\n type: 'inline-command',\n start: '',\n end: pattern.start,\n cmd: 'mceInsertContent',\n value: pattern.replacement\n });\n } else {\n const trigger = (_a = pattern.trigger) !== null && _a !== void 0 ? _a : 'space';\n if (pattern.start.length === 0) {\n return err('Block pattern has empty `start` parameter');\n }\n return formatOrCmd('Block', formats => ({\n type: 'block-format',\n start: pattern.start,\n format: formats[0],\n trigger\n }), (command, commandValue) => ({\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue,\n trigger\n }));\n }\n };\n const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n inlinePatterns: getInlinePatterns(patterns),\n blockPatterns: getBlockPatterns(patterns),\n dynamicPatternsLookup\n });\n const filterByTrigger = (patterns, trigger) => {\n return {\n ...patterns,\n blockPatterns: filter$5(patterns.blockPatterns, pattern => hasBlockTrigger(pattern, trigger))\n };\n };\n const fromRawPatterns = patterns => {\n const normalized = partition$1(map$3(patterns, normalizePattern));\n each$e(normalized.errors, err => console.error(err.message, err.pattern));\n return normalized.values;\n };\n const fromRawPatternsLookup = lookupFn => {\n return ctx => {\n const rawPatterns = lookupFn(ctx);\n return fromRawPatterns(rawPatterns);\n };\n };\n\n const deviceDetection$1 = detect$1().deviceType;\n const isTouch = deviceDetection$1.isTouch();\n const DOM$a = DOMUtils.DOM;\n const getHash = value => {\n const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n return foldl(items, (output, item) => {\n const arr = item.split('=');\n const key = arr[0];\n const val = arr.length > 1 ? arr[1] : key;\n output[trim$4(key)] = trim$4(val);\n return output;\n }, {});\n };\n const isRegExp = x => is$4(x, RegExp);\n const option = name => editor => editor.options.get(name);\n const stringOrObjectProcessor = value => isString(value) || isObject(value);\n const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n const valid = isString(value);\n if (valid) {\n if (value.indexOf('=') !== -1) {\n const bodyObj = getHash(value);\n return {\n value: get$a(bodyObj, editor.id).getOr(defaultValue),\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string.'\n };\n }\n };\n const register$7 = editor => {\n const registerOption = editor.options.register;\n registerOption('id', {\n processor: 'string',\n default: editor.id\n });\n registerOption('selector', { processor: 'string' });\n registerOption('target', { processor: 'object' });\n registerOption('suffix', { processor: 'string' });\n registerOption('cache_suffix', { processor: 'string' });\n registerOption('base_url', { processor: 'string' });\n registerOption('referrer_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('language_load', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline', {\n processor: 'boolean',\n default: false\n });\n registerOption('iframe_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('doctype', {\n processor: 'string',\n default: ''\n });\n registerOption('document_base_url', {\n processor: 'string',\n default: editor.documentBaseUrl\n });\n registerOption('body_id', {\n processor: bodyOptionProcessor(editor, 'tinymce'),\n default: 'tinymce'\n });\n registerOption('body_class', {\n processor: bodyOptionProcessor(editor),\n default: ''\n });\n registerOption('content_security_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('br_in_pre', {\n processor: 'boolean',\n default: true\n });\n registerOption('forced_root_block', {\n processor: value => {\n const valid = isString(value) && isNotEmpty(value);\n if (valid) {\n return {\n value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a non-empty string.'\n };\n }\n },\n default: 'p'\n });\n registerOption('forced_root_block_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('newline_behavior', {\n processor: value => {\n const valid = contains$2([\n 'block',\n 'linebreak',\n 'invert',\n 'default'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: block, linebreak, invert or default.'\n };\n },\n default: 'default'\n });\n registerOption('br_newline_selector', {\n processor: 'string',\n default: '.mce-toc h2,figcaption,caption'\n });\n registerOption('no_newline_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('keep_styles', {\n processor: 'boolean',\n default: true\n });\n registerOption('end_container_on_empty_block', {\n processor: value => {\n if (isBoolean(value)) {\n return {\n valid: true,\n value\n };\n } else if (isString(value)) {\n return {\n valid: true,\n value\n };\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: 'blockquote'\n });\n registerOption('font_size_style_values', {\n processor: 'string',\n default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n });\n registerOption('font_size_legacy_values', {\n processor: 'string',\n default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n });\n registerOption('font_size_classes', {\n processor: 'string',\n default: ''\n });\n registerOption('automatic_uploads', {\n processor: 'boolean',\n default: true\n });\n registerOption('images_reuse_filename', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_replace_blob_uris', {\n processor: 'boolean',\n default: true\n });\n registerOption('icons', {\n processor: 'string',\n default: ''\n });\n registerOption('icons_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_base_path', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_credentials', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_upload_handler', { processor: 'function' });\n registerOption('language', {\n processor: 'string',\n default: 'en'\n });\n registerOption('language_url', {\n processor: 'string',\n default: ''\n });\n registerOption('entity_encoding', {\n processor: 'string',\n default: 'named'\n });\n registerOption('indent', {\n processor: 'boolean',\n default: true\n });\n registerOption('indent_before', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_after', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_use_margin', {\n processor: 'boolean',\n default: false\n });\n registerOption('indentation', {\n processor: 'string',\n default: '40px'\n });\n registerOption('content_css', {\n processor: value => {\n const valid = value === false || isString(value) || isArrayOf(value, isString);\n if (valid) {\n if (isString(value)) {\n return {\n value: map$3(value.split(','), trim$4),\n valid\n };\n } else if (isArray$1(value)) {\n return {\n value,\n valid\n };\n } else if (value === false) {\n return {\n value: [],\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be false, a string or an array of strings.'\n };\n }\n },\n default: isInline$1(editor) ? [] : ['default']\n });\n registerOption('content_style', { processor: 'string' });\n registerOption('content_css_cors', {\n processor: 'boolean',\n default: false\n });\n registerOption('font_css', {\n processor: value => {\n const valid = isString(value) || isArrayOf(value, isString);\n if (valid) {\n const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$4);\n return {\n value: newValue,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a string or an array of strings.'\n };\n }\n },\n default: []\n });\n registerOption('inline_boundaries', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline_boundaries_selector', {\n processor: 'string',\n default: 'a[href],code,span.mce-annotation'\n });\n registerOption('object_resizing', {\n processor: value => {\n const valid = isBoolean(value) || isString(value);\n if (valid) {\n if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n return {\n value: '',\n valid\n };\n } else {\n return {\n value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: !isTouch\n });\n registerOption('resize_img_proportional', {\n processor: 'boolean',\n default: true\n });\n registerOption('event_root', { processor: 'string' });\n registerOption('service_message', { processor: 'string' });\n registerOption('theme', {\n processor: value => value === false || isString(value) || isFunction(value),\n default: 'silver'\n });\n registerOption('theme_url', { processor: 'string' });\n registerOption('formats', { processor: 'object' });\n registerOption('format_empty_lines', {\n processor: 'boolean',\n default: false\n });\n registerOption('format_noneditable_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('preview_styles', {\n processor: value => {\n const valid = value === false || isString(value);\n if (valid) {\n return {\n value: value === false ? '' : value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string'\n };\n }\n },\n default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n });\n registerOption('custom_ui_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('hidden_input', {\n processor: 'boolean',\n default: true\n });\n registerOption('submit_patch', {\n processor: 'boolean',\n default: true\n });\n registerOption('encoding', { processor: 'string' });\n registerOption('add_form_submit_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('add_unload_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_undo_redo_levels', {\n processor: 'number',\n default: 0\n });\n registerOption('disable_nodechange', {\n processor: 'boolean',\n default: false\n });\n registerOption('readonly', {\n processor: 'boolean',\n default: false\n });\n registerOption('editable_root', {\n processor: 'boolean',\n default: true\n });\n registerOption('plugins', {\n processor: 'string[]',\n default: []\n });\n registerOption('external_plugins', { processor: 'object' });\n registerOption('forced_plugins', { processor: 'string[]' });\n registerOption('model', {\n processor: 'string',\n default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n });\n registerOption('model_url', { processor: 'string' });\n registerOption('block_unsupported_drop', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual_table_class', {\n processor: 'string',\n default: 'mce-item-table'\n });\n registerOption('visual_anchor_class', {\n processor: 'string',\n default: 'mce-item-anchor'\n });\n registerOption('iframe_aria_text', {\n processor: 'string',\n default: 'Rich Text Area. Press ALT-0 for help.'\n });\n registerOption('setup', { processor: 'function' });\n registerOption('init_instance_callback', { processor: 'function' });\n registerOption('url_converter', {\n processor: 'function',\n default: editor.convertURL\n });\n registerOption('url_converter_scope', {\n processor: 'object',\n default: editor\n });\n registerOption('urlconverter_callback', { processor: 'function' });\n registerOption('allow_conditional_comments', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_html_data_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_svg_data_urls', { processor: 'boolean' });\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_script_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_mathml_annotation_encodings', {\n processor: value => {\n const valid = isArrayOf(value, isString);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be an array of strings.'\n };\n },\n default: []\n });\n registerOption('convert_fonts_to_spans', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('fix_list_elements', {\n processor: 'boolean',\n default: false\n });\n registerOption('preserve_cdata', {\n processor: 'boolean',\n default: false\n });\n registerOption('remove_trailing_brs', {\n processor: 'boolean',\n default: true\n });\n registerOption('pad_empty_with_br', {\n processor: 'boolean',\n default: false\n });\n registerOption('inline_styles', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('element_format', {\n processor: 'string',\n default: 'html'\n });\n registerOption('entities', { processor: 'string' });\n registerOption('schema', {\n processor: 'string',\n default: 'html5'\n });\n registerOption('convert_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('relative_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('remove_script_host', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_elements', { processor: stringOrObjectProcessor });\n registerOption('extended_valid_elements', { processor: 'string' });\n registerOption('invalid_elements', { processor: 'string' });\n registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n registerOption('valid_children', { processor: 'string' });\n registerOption('valid_classes', { processor: stringOrObjectProcessor });\n registerOption('valid_elements', { processor: 'string' });\n registerOption('valid_styles', { processor: stringOrObjectProcessor });\n registerOption('verify_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('auto_focus', { processor: value => isString(value) || value === true });\n registerOption('browser_spellcheck', {\n processor: 'boolean',\n default: false\n });\n registerOption('protect', { processor: 'array' });\n registerOption('images_file_types', {\n processor: 'string',\n default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n });\n registerOption('deprecation_warnings', {\n processor: 'boolean',\n default: true\n });\n registerOption('a11y_advanced_options', {\n processor: 'boolean',\n default: false\n });\n registerOption('api_key', { processor: 'string' });\n registerOption('license_key', { processor: 'string' });\n registerOption('paste_block_drop', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_data_images', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_preprocess', { processor: 'function' });\n registerOption('paste_postprocess', { processor: 'function' });\n registerOption('paste_webkit_styles', {\n processor: 'string',\n default: 'none'\n });\n registerOption('paste_remove_styles_if_webkit', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_merge_formats', {\n processor: 'boolean',\n default: true\n });\n registerOption('smart_paste', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_as_text', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_tab_spaces', {\n processor: 'number',\n default: 4\n });\n registerOption('text_patterns', {\n processor: value => {\n if (isArrayOf(value, isObject) || value === false) {\n const patterns = value === false ? [] : value;\n return {\n value: fromRawPatterns(patterns),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of objects or false.'\n };\n }\n },\n default: [\n {\n start: '*',\n end: '*',\n format: 'italic'\n },\n {\n start: '**',\n end: '**',\n format: 'bold'\n },\n {\n start: '#',\n format: 'h1',\n trigger: 'space'\n },\n {\n start: '##',\n format: 'h2',\n trigger: 'space'\n },\n {\n start: '###',\n format: 'h3',\n trigger: 'space'\n },\n {\n start: '####',\n format: 'h4',\n trigger: 'space'\n },\n {\n start: '#####',\n format: 'h5',\n trigger: 'space'\n },\n {\n start: '######',\n format: 'h6',\n trigger: 'space'\n },\n {\n start: '1.',\n cmd: 'InsertOrderedList',\n trigger: 'space'\n },\n {\n start: '*',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '-',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '>',\n cmd: 'mceBlockQuote',\n trigger: 'space'\n },\n {\n start: '---',\n cmd: 'InsertHorizontalRule',\n trigger: 'space'\n }\n ]\n });\n registerOption('text_patterns_lookup', {\n processor: value => {\n if (isFunction(value)) {\n return {\n value: fromRawPatternsLookup(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a single function'\n };\n }\n },\n default: _ctx => []\n });\n registerOption('noneditable_class', {\n processor: 'string',\n default: 'mceNonEditable'\n });\n registerOption('editable_class', {\n processor: 'string',\n default: 'mceEditable'\n });\n registerOption('noneditable_regexp', {\n processor: value => {\n if (isArrayOf(value, isRegExp)) {\n return {\n value,\n valid: true\n };\n } else if (isRegExp(value)) {\n return {\n value: [value],\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a RegExp or an array of RegExp.'\n };\n }\n },\n default: []\n });\n registerOption('table_tab_navigation', {\n processor: 'boolean',\n default: true\n });\n registerOption('highlight_on_focus', {\n processor: 'boolean',\n default: true\n });\n registerOption('xss_sanitization', {\n processor: 'boolean',\n default: true\n });\n registerOption('details_initial_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('details_serialized_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('init_content_sync', {\n processor: 'boolean',\n default: false\n });\n registerOption('newdocument_content', {\n processor: 'string',\n default: ''\n });\n registerOption('sandbox_iframes', {\n processor: 'boolean',\n default: true\n });\n registerOption('sandbox_iframes_exclusions', {\n processor: 'string[]',\n default: [\n 'youtube.com',\n 'youtu.be',\n 'vimeo.com',\n 'player.vimeo.com',\n 'dailymotion.com',\n 'embed.music.apple.com',\n 'open.spotify.com',\n 'giphy.com',\n 'dai.ly',\n 'codepen.io'\n ]\n });\n registerOption('convert_unsafe_embeds', {\n processor: 'boolean',\n default: true\n });\n editor.on('ScriptsLoaded', () => {\n registerOption('directionality', {\n processor: 'string',\n default: I18n.isRtl() ? 'rtl' : undefined\n });\n registerOption('placeholder', {\n processor: 'string',\n default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n });\n });\n };\n const getIframeAttrs = option('iframe_attrs');\n const getDocType = option('doctype');\n const getDocumentBaseUrl = option('document_base_url');\n const getBodyId = option('body_id');\n const getBodyClass = option('body_class');\n const getContentSecurityPolicy = option('content_security_policy');\n const shouldPutBrInPre$1 = option('br_in_pre');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n const getNewlineBehavior = option('newline_behavior');\n const getBrNewLineSelector = option('br_newline_selector');\n const getNoNewLineSelector = option('no_newline_selector');\n const shouldKeepStyles = option('keep_styles');\n const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n const isAutomaticUploadsEnabled = option('automatic_uploads');\n const shouldReuseFileName = option('images_reuse_filename');\n const shouldReplaceBlobUris = option('images_replace_blob_uris');\n const getIconPackName = option('icons');\n const getIconsUrl = option('icons_url');\n const getImageUploadUrl = option('images_upload_url');\n const getImageUploadBasePath = option('images_upload_base_path');\n const getImagesUploadCredentials = option('images_upload_credentials');\n const getImagesUploadHandler = option('images_upload_handler');\n const shouldUseContentCssCors = option('content_css_cors');\n const getReferrerPolicy = option('referrer_policy');\n const getLanguageCode = option('language');\n const getLanguageUrl = option('language_url');\n const shouldIndentUseMargin = option('indent_use_margin');\n const getIndentation = option('indentation');\n const getContentCss = option('content_css');\n const getContentStyle = option('content_style');\n const getFontCss = option('font_css');\n const getDirectionality = option('directionality');\n const getInlineBoundarySelector = option('inline_boundaries_selector');\n const getObjectResizing = option('object_resizing');\n const getResizeImgProportional = option('resize_img_proportional');\n const getPlaceholder = option('placeholder');\n const getEventRoot = option('event_root');\n const getServiceMessage = option('service_message');\n const getTheme = option('theme');\n const getThemeUrl = option('theme_url');\n const getModel = option('model');\n const getModelUrl = option('model_url');\n const isInlineBoundariesEnabled = option('inline_boundaries');\n const getFormats = option('formats');\n const getPreviewStyles = option('preview_styles');\n const canFormatEmptyLines = option('format_empty_lines');\n const getFormatNoneditableSelector = option('format_noneditable_selector');\n const getCustomUiSelector = option('custom_ui_selector');\n const isInline$1 = option('inline');\n const hasHiddenInput = option('hidden_input');\n const shouldPatchSubmit = option('submit_patch');\n const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n const shouldAddUnloadTrigger = option('add_unload_trigger');\n const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n const shouldDisableNodeChange = option('disable_nodechange');\n const isReadOnly$1 = option('readonly');\n const hasEditableRoot$1 = option('editable_root');\n const hasContentCssCors = option('content_css_cors');\n const getPlugins = option('plugins');\n const getExternalPlugins$1 = option('external_plugins');\n const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n const isVisualAidsEnabled = option('visual');\n const getVisualAidsTableClass = option('visual_table_class');\n const getVisualAidsAnchorClass = option('visual_anchor_class');\n const getIframeAriaText = option('iframe_aria_text');\n const getSetupCallback = option('setup');\n const getInitInstanceCallback = option('init_instance_callback');\n const getUrlConverterCallback = option('urlconverter_callback');\n const getAutoFocus = option('auto_focus');\n const shouldBrowserSpellcheck = option('browser_spellcheck');\n const getProtect = option('protect');\n const shouldPasteBlockDrop = option('paste_block_drop');\n const shouldPasteDataImages = option('paste_data_images');\n const getPastePreProcess = option('paste_preprocess');\n const getPastePostProcess = option('paste_postprocess');\n const getNewDocumentContent = option('newdocument_content');\n const getPasteWebkitStyles = option('paste_webkit_styles');\n const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n const shouldPasteMergeFormats = option('paste_merge_formats');\n const isSmartPasteEnabled = option('smart_paste');\n const isPasteAsTextEnabled = option('paste_as_text');\n const getPasteTabSpaces = option('paste_tab_spaces');\n const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n const getTextPatterns = option('text_patterns');\n const getTextPatternsLookup = option('text_patterns_lookup');\n const getNonEditableClass = option('noneditable_class');\n const getEditableClass = option('editable_class');\n const getNonEditableRegExps = option('noneditable_regexp');\n const shouldPreserveCData = option('preserve_cdata');\n const shouldHighlightOnFocus = option('highlight_on_focus');\n const shouldSanitizeXss = option('xss_sanitization');\n const shouldUseDocumentWrite = option('init_content_sync');\n const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n const hasTableTabNavigation = option('table_tab_navigation');\n const getDetailsInitialState = option('details_initial_state');\n const getDetailsSerializedState = option('details_serialized_state');\n const shouldSandboxIframes = option('sandbox_iframes');\n const getSandboxIframesExclusions = editor => editor.options.get('sandbox_iframes_exclusions');\n const shouldConvertUnsafeEmbeds = option('convert_unsafe_embeds');\n const getLicenseKey = option('license_key');\n const getApiKey = option('api_key');\n\n const isElement$3 = isElement$6;\n const isText$5 = isText$b;\n const removeNode$1 = node => {\n const parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n const trimCount = text => {\n const trimmedText = trim$2(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n const deleteZwspChars = caretContainer => {\n let idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n const removeUnchanged = (caretContainer, pos) => {\n remove$2(caretContainer);\n return pos;\n };\n const removeTextAndReposition = (caretContainer, pos) => {\n const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n const after = trimCount(caretContainer.data.substr(pos.offset()));\n const text = before.text + after.text;\n if (text.length > 0) {\n deleteZwspChars(caretContainer);\n return CaretPosition(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n const removeElementAndReposition = (caretContainer, pos) => {\n const parentNode = pos.container();\n const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$2(caretContainer);\n return newPosition;\n };\n const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n const remove$2 = caretContainerNode => {\n if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode$1(caretContainerNode);\n }\n }\n if (isText$5(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n const isContentEditableFalse$8 = isContentEditableFalse$b;\n const isMedia$1 = isMedia$2;\n const isTableCell$1 = isTableCell$3;\n const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n const getAbsoluteClientRect = (root, element, before) => {\n const clientRect = collapse(element.getBoundingClientRect(), before);\n let scrollX;\n let scrollY;\n if (root.tagName === 'BODY') {\n const docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n const rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n let margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n const trimInlineCaretContainers = root => {\n var _a, _b;\n const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n const node = fakeCaretTargetNodes[i].dom;\n let sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n const FakeCaret = (editor, root, isBlock, hasFocus) => {\n const lastVisualCaret = value$2();\n let cursorInterval;\n let caretContainerNode;\n const caretBlock = getForcedRootBlock(editor);\n const dom = editor.dom;\n const show = (before, element) => {\n let rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n const caretContainer = insertBlock(caretBlock, element, before);\n const clientRect = getAbsoluteClientRect(root, element, before);\n dom.setStyle(caretContainer, 'top', clientRect.top);\n dom.setStyle(caretContainer, 'caret-color', 'transparent');\n caretContainerNode = caretContainer;\n const caret = dom.create('div', {\n 'class': 'mce-visual-caret',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(caret, { ...clientRect });\n dom.add(root, caret);\n lastVisualCaret.set({\n caret,\n element,\n before\n });\n if (before) {\n dom.addClass(caret, 'mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainer, 0);\n rng.setEnd(caretContainer, 0);\n } else {\n caretContainerNode = insertInline$1(element, before);\n rng = element.ownerDocument.createRange();\n if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n const hide = () => {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$2(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(caretState => {\n dom.remove(caretState.caret);\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n clearInterval(cursorInterval);\n cursorInterval = undefined;\n }\n };\n const startBlink = () => {\n cursorInterval = setInterval(() => {\n lastVisualCaret.on(caretState => {\n if (hasFocus()) {\n dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n } else {\n dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n }\n });\n }, 500);\n };\n const reposition = () => {\n lastVisualCaret.on(caretState => {\n const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n dom.setStyles(caretState.caret, { ...clientRect });\n });\n };\n const destroy = () => clearInterval(cursorInterval);\n const getCss = () => '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n return {\n show,\n hide,\n getCss,\n reposition,\n destroy\n };\n };\n const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n const isInlineFakeCaretTarget = node => isContentEditableFalse$8(node) || isMedia$1(node);\n const isFakeCaretTarget = node => {\n const isTarget = isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n return isTarget && parentElement(SugarElement.fromDom(node)).exists(isEditable$2);\n };\n\n const isContentEditableTrue$1 = isContentEditableTrue$3;\n const isContentEditableFalse$7 = isContentEditableFalse$b;\n const isMedia = isMedia$2;\n const isBlockLike = matchStyleValues('display', 'block table table-cell table-row table-caption list-item');\n const isCaretContainer = isCaretContainer$2;\n const isCaretContainerBlock = isCaretContainerBlock$1;\n const isElement$2 = isElement$6;\n const isText$4 = isText$b;\n const isCaretCandidate$1 = isCaretCandidate$3;\n const isForwards = direction => direction > 0;\n const isBackwards = direction => direction < 0;\n const skipCaretContainers = (walk, shallow) => {\n let node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n const walker = new DomTreeWalker(node, rootNode);\n const isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n let tempNode;\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getEditingHost = (node, rootNode) => {\n const isCETrue = node => isContentEditableTrue$1(node.dom);\n const isRoot = node => node.dom === rootNode;\n return ancestor$4(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n };\n const getParentBlock$3 = (node, rootNode) => {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n if (!caretPosition) {\n return Optional.none();\n }\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (!isElement$2(container)) {\n return Optional.none();\n }\n return Optional.from(container.childNodes[offset + relativeOffset]);\n };\n const beforeAfter = (before, node) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const range = doc.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n const lean = (left, root, node) => {\n const siblingName = left ? 'previousSibling' : 'nextSibling';\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n let sibling = tempNode[siblingName];\n if (sibling && isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, tempNode)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n const before$2 = curry(beforeAfter, true);\n const after$2 = curry(beforeAfter, false);\n const normalizeRange = (direction, root, range) => {\n let node;\n const leanLeft = curry(lean, true, root);\n const leanRight = curry(lean, false, root);\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n const block = isText$4(container) ? container.parentNode : container;\n const location = block.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = block.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = block.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$b(container)) {\n if (isCaretContainer(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer$1(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n return range;\n }\n }\n return range;\n };\n const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$7);\n const getNormalizedRangeEndPoint = (direction, root, range) => {\n const normalizedRange = normalizeRange(direction, root, range);\n return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n };\n const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n const getVisualCaretPosition = (walkFn, caretPosition) => {\n let pos = caretPosition;\n while (pos = walkFn(pos)) {\n if (pos.isVisible()) {\n return pos;\n }\n }\n return pos;\n };\n const isMoveInsideSameBlock = (from, to) => {\n const inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$6(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n const isContentEditableFalse$6 = isContentEditableFalse$b;\n const isText$3 = isText$b;\n const isElement$1 = isElement$6;\n const isBr$2 = isBr$6;\n const isCaretCandidate = isCaretCandidate$3;\n const isAtomic = isAtomic$1;\n const isEditableCaretCandidate = isEditableCaretCandidate$1;\n const getParents$3 = (node, root) => {\n const parents = [];\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n parents.push(tempNode);\n tempNode = tempNode.parentNode;\n }\n return parents;\n };\n const nodeAtIndex = (container, offset) => {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n const getCaretCandidatePosition = (direction, node) => {\n if (isForwards(direction)) {\n if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$2(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n const moveForwardFromBr = (root, nextNode) => {\n const nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$3(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n const findCaretPosition$1 = (direction, startPos, root) => {\n let node;\n let nextNode;\n let innerNode;\n let caretPosition;\n if (!isElement$1(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n caretPosition = CaretPosition.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n const container = caretPosition.container();\n let offset = caretPosition.offset();\n if (isText$3(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate(nextNode)) {\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, nextNode.data.length);\n }\n return CaretPosition.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate(nextNode)) {\n if (isBr$2(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n const rootContentEditableFalseElm = last$1(filter$5(getParents$3(container, root), isContentEditableFalse$6));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n const CaretWalker = root => ({\n next: caretPosition => {\n return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n });\n\n const walkToPositionIn = (forward, root, start) => {\n const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n const isBeforeOrStart = position => {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n const isAfterOrEnd = position => {\n if (CaretPosition.isTextPosition(position)) {\n const container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n const shouldSkipPosition = (forward, from, to) => {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n const fromPosition = (forward, root, pos) => {\n const walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Optional.some(to);\n }\n });\n const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n const positionIn = (forward, element) => {\n const startNode = forward ? element.firstChild : element.lastChild;\n if (isText$b(startNode)) {\n return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate$3(startNode)) {\n return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Optional.none();\n }\n };\n const nextPosition = curry(fromPosition, true);\n const prevPosition = curry(fromPosition, false);\n const firstPositionIn = curry(positionIn, true);\n const lastPositionIn = curry(positionIn, false);\n\n const CARET_ID = '_mce_caret';\n const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n const getParentCaretContainer = (body, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== body) {\n if (isCaretNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n\n const isStringPathBookmark = bookmark => isString(bookmark.start);\n const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n const isIdBookmark = bookmark => has$2(bookmark, 'id');\n const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n const addBogus = (dom, node) => {\n if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n node.innerHTML = '
';\n }\n return node;\n };\n const resolveCaretPositionBookmark = (dom, bookmark) => {\n const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n return lift2(startPos, endPos, (start, end) => {\n const range = dom.createRng();\n range.setStart(start.container(), start.offset());\n range.setEnd(end.container(), end.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const insertZwsp = (node, rng) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n const isEmpty$1 = node => !node.hasChildNodes();\n const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n const padEmptyCaretContainer = (root, node, rng) => {\n if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n const setEndPoint = (dom, start, bookmark, rng) => {\n const point = bookmark[start ? 'start' : 'end'];\n const root = dom.getRoot();\n if (point) {\n let node = root;\n let offset = point[0];\n for (let i = point.length - 1; node && i >= 1; i--) {\n const children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (isText$b(node)) {\n offset = Math.min(point[0], node.data.length);\n }\n if (isElement$6(node)) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n const isValidTextNode = node => isText$b(node) && node.data.length > 0;\n const restoreEndPoint = (dom, suffix, bookmark) => {\n const marker = dom.get(bookmark.id + '_' + suffix);\n const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n const keep = bookmark.keep;\n if (marker && markerParent) {\n let container;\n let offset;\n if (suffix === 'start') {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n container = marker.nextSibling;\n offset = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker) + 1;\n }\n }\n } else {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n }\n }\n }\n if (!keep) {\n const prev = marker.previousSibling;\n const next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), node => {\n if (isText$b(node)) {\n node.data = node.data.replace(/\\uFEFF/g, '');\n }\n });\n let otherMarker;\n while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(otherMarker, true);\n }\n if (isText$b(next) && isText$b(prev) && !Env.browser.isOpera()) {\n const idx = prev.data.length;\n prev.appendData(next.data);\n dom.remove(next);\n container = prev;\n offset = idx;\n }\n }\n return Optional.some(CaretPosition(container, offset));\n } else {\n return Optional.none();\n }\n };\n const resolvePaths = (dom, bookmark) => {\n const range = dom.createRng();\n if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n return Optional.some({\n range,\n forward: isForwardBookmark(bookmark)\n });\n } else {\n return Optional.none();\n }\n };\n const resolveId = (dom, bookmark) => {\n const startPos = restoreEndPoint(dom, 'start', bookmark);\n const endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n const range = dom.createRng();\n range.setStart(addBogus(dom, spos.container()), spos.offset());\n range.setEnd(addBogus(dom, epos.container()), epos.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n const range = dom.createRng();\n range.selectNode(elm);\n return {\n range,\n forward: true\n };\n });\n const resolve = (selection, bookmark) => {\n const dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return resolveCaretPositionBookmark(dom, bookmark);\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Optional.some({\n range: bookmark.rng,\n forward: isForwardBookmark(bookmark)\n });\n }\n }\n return Optional.none();\n };\n\n const getBookmark$2 = (selection, type, normalized) => {\n return getBookmark$3(selection, type, normalized);\n };\n const moveToBookmark = (selection, bookmark) => {\n resolve(selection, bookmark).each(({range, forward}) => {\n selection.setRng(range, forward);\n });\n };\n const isBookmarkNode$1 = node => {\n return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n const is = expected => actual => expected === actual;\n const isNbsp = is(nbsp);\n const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$2(chr);\n\n const getRanges$1 = selection => {\n const ranges = [];\n if (selection) {\n for (let i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n const getSelectedNodes = ranges => {\n return bind$3(ranges, range => {\n const node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n const hasMultipleRanges = selection => {\n return getRanges$1(selection).length > 1;\n };\n\n const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n const getCellsFromElementOrRanges = (ranges, element) => {\n const selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n const getClosestTable = (cell, isRoot) => ancestor$3(cell, 'table', isRoot);\n\n const getStartNode = rng => {\n const sc = rng.startContainer, so = rng.startOffset;\n if (isText$b(sc)) {\n return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n } else {\n return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n }\n };\n const getEndNode = rng => {\n const ec = rng.endContainer, eo = rng.endOffset;\n if (isText$b(ec)) {\n return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n } else {\n return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n }\n };\n const getFirstChildren = node => {\n return firstChild(node).fold(constant([node]), child => {\n return [node].concat(getFirstChildren(child));\n });\n };\n const getLastChildren = node => {\n return lastChild(node).fold(constant([node]), child => {\n if (name(child) === 'br') {\n return prevSibling(child).map(sibling => {\n return [node].concat(getLastChildren(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(child));\n }\n });\n };\n const hasAllContentsSelected = (elm, rng) => {\n return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n const end = find$2(getLastChildren(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n const moveEndPoint = (dom, rng, node, start) => {\n const root = node;\n const walker = new DomTreeWalker(node, root);\n const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase()));\n let currentNode = node;\n do {\n if (isText$b(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n if (start) {\n rng.setStart(currentNode, 0);\n } else {\n rng.setEnd(currentNode, currentNode.data.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n if (start) {\n rng.setStartBefore(currentNode);\n } else {\n if (currentNode.nodeName === 'BR') {\n rng.setEndBefore(currentNode);\n } else {\n rng.setEndAfter(currentNode);\n }\n }\n return;\n }\n } while (currentNode = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n const hasAnyRanges = editor => {\n const sel = editor.selection.getSel();\n return isNonNullable(sel) && sel.rangeCount > 0;\n };\n const runOnRanges = (editor, executor) => {\n const fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$e(fakeSelectionNodes, elem => {\n const node = elem.dom;\n const fakeNodeRng = editor.dom.createRng();\n fakeNodeRng.setStartBefore(node);\n fakeNodeRng.setEndAfter(node);\n executor(fakeNodeRng, true);\n });\n } else {\n executor(editor.selection.getRng(), false);\n }\n };\n const preserve = (selection, fillBookmark, executor) => {\n const bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$1(node);\n const isElementDirectlySelected = (dom, node) => {\n if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n const value = parseInt(selectedAttr, 10);\n return !isNaN(value) && value > 0;\n } else {\n return false;\n }\n };\n const preserveSelection = (editor, action, shouldMoveStart) => {\n const {selection, dom} = editor;\n const selectedNodeBeforeAction = selection.getNode();\n const isSelectedBeforeNodeNoneditable = isContentEditableFalse$b(selectedNodeBeforeAction);\n preserve(selection, true, () => {\n action();\n });\n const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$b(selectedNodeBeforeAction);\n if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n editor.selection.select(selectedNodeBeforeAction);\n } else if (shouldMoveStart(selection.getStart())) {\n moveStartToNearestText(dom, selection);\n }\n };\n const moveStartToNearestText = (dom, selection) => {\n var _a, _b;\n const rng = selection.getRng();\n const {startContainer, startOffset} = rng;\n const selectedNode = selection.getNode();\n if (isElementDirectlySelected(dom, selectedNode)) {\n return;\n }\n if (isElement$6(startContainer)) {\n const nodes = startContainer.childNodes;\n const root = dom.getRoot();\n let walker;\n if (startOffset < nodes.length) {\n const startNode = nodes[startOffset];\n walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n } else {\n const startNode = nodes[nodes.length - 1];\n walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n walker.next(true);\n }\n for (let node = walker.current(); node; node = walker.next()) {\n if (dom.getContentEditable(node) === 'false') {\n return;\n } else if (isText$b(node) && !isWhiteSpaceNode$1(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n const getNonWhiteSpaceSibling = (node, next, inc) => {\n if (node) {\n const nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n return node;\n }\n }\n }\n return undefined;\n };\n const isTextBlock$1 = (schema, node) => !!schema.getTextBlockElements()[node.nodeName.toLowerCase()] || isTransparentBlock(schema, node);\n const isValid = (ed, parent, child) => {\n return ed.schema.isValidChild(parent, child);\n };\n const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n if (isNonNullable(node) && isText$b(node)) {\n const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n const isEmptyTextNode$1 = node => {\n return isNonNullable(node) && isText$b(node) && node.length === 0;\n };\n const isWrapNoneditableTarget = (editor, node) => {\n const baseDataSelector = '[data-mce-cef-wrappable]';\n const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n return is$1(SugarElement.fromDom(node), selector);\n };\n const isWrappableNoneditable = (editor, node) => {\n const dom = editor.dom;\n return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n };\n const replaceVars = (value, vars) => {\n if (isFunction(value)) {\n return value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, (str, name) => {\n return vars[name] || str;\n });\n }\n return value;\n };\n const isEq$5 = (str1, str2) => {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n const normalizeStyleValue = (value, name) => {\n if (isNullable(value)) {\n return null;\n } else {\n let strValue = String(value);\n if (name === 'color' || name === 'backgroundColor') {\n strValue = rgbaToHexString(strValue);\n }\n if (name === 'fontWeight' && value === 700) {\n strValue = 'bold';\n }\n if (name === 'fontFamily') {\n strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return strValue;\n }\n };\n const getStyle = (dom, node, name) => {\n const style = dom.getStyle(node, name);\n return normalizeStyleValue(style, name);\n };\n const getTextDecoration = (dom, node) => {\n let decoration;\n dom.getParent(node, n => {\n if (isElement$6(n)) {\n decoration = dom.getStyle(n, 'text-decoration');\n return !!decoration && decoration !== 'none';\n } else {\n return false;\n }\n });\n return decoration;\n };\n const getParents$2 = (dom, node, selector) => {\n return dom.getParents(node, selector, dom.getRoot());\n };\n const isFormatPredicate = (editor, formatName, predicate) => {\n const formats = editor.formatter.get(formatName);\n return isNonNullable(formats) && exists(formats, predicate);\n };\n const isVariableFormatName = (editor, formatName) => {\n const hasVariableValues = format => {\n const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n return exists([\n 'styles',\n 'attributes'\n ], key => get$a(format, key).exists(field => {\n const fieldValues = isArray$1(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n }));\n };\n return isFormatPredicate(editor, formatName, hasVariableValues);\n };\n const areSimilarFormats = (editor, formatName, otherFormatName) => {\n const validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n return isFormatPredicate(editor, formatName, fmt1 => {\n const filteredFmt1 = filterObj(fmt1);\n return isFormatPredicate(editor, otherFormatName, fmt2 => {\n const filteredFmt2 = filterObj(fmt2);\n return equal$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n const isBlockFormat = format => hasNonNullableKey(format, 'block');\n const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n const getEmptyCaretContainers = node => {\n const nodes = [];\n let tempNode = node;\n while (tempNode) {\n if (isText$b(tempNode) && tempNode.data !== ZWSP$1 || tempNode.childNodes.length > 1) {\n return [];\n }\n if (isElement$6(tempNode)) {\n nodes.push(tempNode);\n }\n tempNode = tempNode.firstChild;\n }\n return nodes;\n };\n const isCaretContainerEmpty = node => {\n return getEmptyCaretContainers(node).length > 0;\n };\n const isEmptyCaretFormatElement = element => {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n const isBookmarkNode = isBookmarkNode$1;\n const getParents$1 = getParents$2;\n const isWhiteSpaceNode = isWhiteSpaceNode$1;\n const isTextBlock = isTextBlock$1;\n const isBogusBr = node => {\n return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n const findParentContentEditable = (dom, node) => {\n let parent = node;\n while (parent) {\n if (isElement$6(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n const walkText = (start, node, offset, predicate) => {\n const str = node.data;\n if (start) {\n for (let i = offset; i > 0; i--) {\n if (predicate(str.charAt(i - 1))) {\n return i;\n }\n }\n } else {\n for (let i = offset; i < str.length; i++) {\n if (predicate(str.charAt(i))) {\n return i;\n }\n }\n }\n return -1;\n };\n const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n let lastTextNode;\n const rootNode = dom.getParent(container, dom.isBlock) || body;\n const walk = (container, offset, pred) => {\n const textSeeker = TextSeeker(dom);\n const walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, (text, textOffset) => {\n if (isBookmarkNode(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n const spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none());\n };\n const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n const sibling = container[siblingName];\n if (isText$b(container) && isEmpty$3(container.data) && sibling) {\n container = sibling;\n }\n const parents = getParents$1(dom, container);\n for (let i = 0; i < parents.length; i++) {\n for (let y = 0; y < formatList.length; y++) {\n const curFormat = formatList[y];\n if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n const findBlockEndPoint = (dom, formatList, container, siblingName) => {\n var _a;\n let node = container;\n const root = dom.getRoot();\n const format = formatList[0];\n if (isBlockFormat(format)) {\n node = format.wrapper ? null : dom.getParent(container, format.block, root);\n }\n if (!node) {\n const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH,SUMMARY')) !== null && _a !== void 0 ? _a : root;\n node = dom.getParent(isText$b(container) ? container.parentNode : container, node => node !== root && isTextBlock(dom.schema, node), scopeRoot);\n }\n if (node && isBlockFormat(format) && format.wrapper) {\n node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node && node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq$5(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n const parent = container.parentNode;\n if (isNonNullable(container[siblingName])) {\n return false;\n } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n return true;\n } else {\n return isAtBlockBoundary$1(dom, root, parent, siblingName);\n }\n };\n const findParentContainer = (dom, formatList, container, offset, start) => {\n let parent = container;\n const siblingName = start ? 'previousSibling' : 'nextSibling';\n const root = dom.getRoot();\n if (isText$b(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (parent) {\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$b(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n const expandRng = (dom, rng, formatList, includeTrailingSpace = false) => {\n let {startContainer, startOffset, endContainer, endOffset} = rng;\n const format = formatList[0];\n if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$b(endContainer)) {\n endOffset = endContainer.data.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isSelfOrParentBookmark(startContainer)) {\n startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (isText$b(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isSelfOrParentBookmark(endContainer)) {\n endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (isText$b(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n const startPoint = findWordEndPoint(dom, dom.getRoot(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, dom.getRoot(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(({container, offset}) => {\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$b(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$b(endContainer) || endOffset === endContainer.data.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(dom, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(dom, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n if (isText$b(endContainer)) {\n endOffset = endContainer.data.length;\n }\n }\n }\n }\n if (isElement$6(startContainer) && startContainer.parentNode) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$6(endContainer) && endContainer.parentNode) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const walk$3 = (dom, rng, callback) => {\n var _a;\n const startOffset = rng.startOffset;\n const startContainer = getNode$1(rng.startContainer, startOffset);\n const endOffset = rng.endOffset;\n const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n const exclude = nodes => {\n const firstNode = nodes[0];\n if (isText$b(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n const lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$b(lastNode)) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n const collectSiblings = (node, name, endNode) => {\n const siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n const walkBoundary = (startNode, endNode, next) => {\n const siblingName = next ? 'nextSibling' : 'previousSibling';\n for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\n if (dom.isChildOf(startContainer, endContainer)) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (dom.isChildOf(endContainer, startContainer)) {\n return walkBoundary(endContainer, ancestor);\n }\n const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n const siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n\n const validBlocks = [\n 'pre[class*=language-][contenteditable=\"false\"]',\n 'figure.image',\n 'div[data-ephox-embed-iri]',\n 'div.tiny-pageembed',\n 'div.mce-toc',\n 'div[data-mce-toc]'\n ];\n const isZeroWidth = elem => isText$c(elem) && get$3(elem) === ZWSP$1;\n const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', parent => {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem.dom)) {\n return 'caret';\n } else if (exists(validBlocks, selector => is$1(elem, selector))) {\n return 'valid-block';\n } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n\n const applyWordGrab = (editor, rng) => {\n const r = expandRng(editor.dom, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n const {uid = masterUId, ...otherData} = data;\n add$2(elem, annotation());\n set$3(elem, `${ dataAnnotationId() }`, uid);\n set$3(elem, `${ dataAnnotation() }`, annotationName);\n const {attributes = {}, classes = []} = decorate(uid, otherData);\n setAll$1(elem, attributes);\n add(elem, classes);\n if (directAnnotation) {\n if (classes.length > 0) {\n set$3(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n }\n const attributeNames = keys(attributes);\n if (attributeNames.length > 0) {\n set$3(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n }\n }\n };\n const removeDirectAnnotation = elem => {\n remove$6(elem, annotation());\n remove$9(elem, `${ dataAnnotationId() }`);\n remove$9(elem, `${ dataAnnotation() }`);\n remove$9(elem, `${ dataAnnotationActive() }`);\n const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => remove$9(elem, name));\n remove$3(elem, customClasses);\n remove$9(elem, `${ dataAnnotationClasses() }`);\n remove$9(elem, `${ dataAnnotationAttributes() }`);\n };\n const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n const master = SugarElement.fromTag('span', eDoc);\n applyAnnotation(master, uid, data, annotationName, decorate, false);\n return master;\n };\n const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n const newWrappers = [];\n const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n const wrapper = value$2();\n const finishWrapper = () => {\n wrapper.clear();\n };\n const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n const nu = shallow$1(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n const processElements = elems => {\n each$e(elems, processElement);\n };\n const processElement = elem => {\n const ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n const children = children$1(elem);\n processElements(children);\n finishWrapper();\n break;\n }\n case 'valid-block': {\n finishWrapper();\n applyAnnotation(elem, uid, data, annotationName, decorate, true);\n break;\n }\n case 'valid': {\n const w = getOrOpenWrapper();\n wrap$2(elem, w);\n break;\n }\n }\n };\n const processNodes = nodes => {\n const elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$3(editor.dom, rng, nodes => {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n const annotateWithBookmark = (editor, name, settings, data) => {\n editor.undoManager.transact(() => {\n const selection = editor.selection;\n const initialRng = selection.getRng();\n const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n const masterUid = generate$1('mce-annotation');\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n const wrapper = makeAnnotation(editor.getDoc(), masterUid, data, name, settings.decorate);\n set$1(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom);\n selection.select(wrapper.dom);\n } else {\n preserve(selection, false, () => {\n runOnRanges(editor, selectionRng => {\n annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n const Annotator = editor => {\n const registry = create$b();\n setup$x(editor, registry);\n const changes = setup$y(editor, registry);\n const isSpan = isTag('span');\n const removeAnnotations = elements => {\n each$e(elements, element => {\n if (isSpan(element)) {\n unwrap(element);\n } else {\n removeDirectAnnotation(element);\n }\n });\n };\n return {\n register: (name, settings) => {\n registry.register(name, settings);\n },\n annotate: (name, data) => {\n registry.lookup(name).each(settings => {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: (name, callback) => {\n changes.addListener(name, callback);\n },\n remove: name => {\n identify(editor, Optional.some(name)).each(({elements}) => {\n const bookmark = editor.selection.getBookmark();\n removeAnnotations(elements);\n editor.selection.moveToBookmark(bookmark);\n });\n },\n removeAll: name => {\n const bookmark = editor.selection.getBookmark();\n each$d(findAll(editor, name), (elements, _) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n getAll: name => {\n const directory = findAll(editor, name);\n return map$2(directory, elems => map$3(elems, elem => elem.dom));\n }\n };\n };\n\n const BookmarkManager = selection => {\n return {\n getBookmark: curry(getBookmark$2, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n const isXYWithinRange = (clientX, clientY, range) => {\n if (range.collapsed) {\n return false;\n } else {\n return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n }\n };\n\n const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n const fireRemove = editor => {\n editor.dispatch('remove');\n };\n const fireDetach = editor => {\n editor.dispatch('detach');\n };\n const fireSwitchMode = (editor, mode) => {\n editor.dispatch('SwitchMode', { mode });\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const firePreInit = editor => {\n editor.dispatch('PreInit');\n };\n const firePostRender = editor => {\n editor.dispatch('PostRender');\n };\n const fireInit = editor => {\n editor.dispatch('Init');\n };\n const firePlaceholderToggle = (editor, state) => {\n editor.dispatch('PlaceholderToggle', { state });\n };\n const fireError = (editor, errorType, error) => {\n editor.dispatch(errorType, error);\n };\n const fireFormatApply = (editor, format, node, vars) => {\n editor.dispatch('FormatApply', {\n format,\n node,\n vars\n });\n };\n const fireFormatRemove = (editor, format, node, vars) => {\n editor.dispatch('FormatRemove', {\n format,\n node,\n vars\n });\n };\n const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n const fireAutocompleterStart = (editor, args) => {\n editor.dispatch('AutocompleterStart', args);\n };\n const fireAutocompleterUpdate = (editor, args) => {\n editor.dispatch('AutocompleterUpdate', args);\n };\n const fireAutocompleterUpdateActiveRange = (editor, args) => {\n editor.dispatch('AutocompleterUpdateActiveRange', args);\n };\n const fireAutocompleterEnd = editor => {\n editor.dispatch('AutocompleterEnd');\n };\n const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n content: html,\n internal\n });\n const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n node,\n internal\n });\n const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n const fireEditableRootStateChange = (editor, state) => editor.dispatch('EditableRootStateChange', { state });\n\n const VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n modifierPressed: e => {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: e => {\n return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n const elementSelectionAttr = 'data-mce-selected';\n const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object,details';\n const abs = Math.abs;\n const round$1 = Math.round;\n const resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n const ControlSelection = (selection, editor) => {\n const dom = editor.dom;\n const editableDoc = editor.getDoc();\n const rootDocument = document;\n const rootElement = editor.getBody();\n let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n let width;\n let height;\n let startScrollWidth;\n let startScrollHeight;\n const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n const isEventOnImageOutsideRange = (evt, range) => {\n if (isTouchEvent(evt)) {\n const touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n const contextMenuSelectImage = evt => {\n const target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n const getResizeTargets = elm => {\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else {\n return [elm];\n }\n };\n const isResizable = elm => {\n const selector = getObjectResizing(editor);\n if (!selector || editor.mode.isReadOnly()) {\n return false;\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$1(SugarElement.fromDom(elm), selector);\n }\n };\n const createGhostElement = (dom, elm) => {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else if (isTable$2(elm)) {\n const isNorth = startsWith(selectedHandle.name, 'n');\n const rowSelect = isNorth ? head : last$2;\n const tableElm = elm.cloneNode(true);\n rowSelect(dom.select('tr', tableElm)).each(tr => {\n const cells = dom.select('td,th', tr);\n dom.setStyle(tr, 'height', null);\n each$e(cells, cell => dom.setStyle(cell, 'height', null));\n });\n return tableElm;\n } else {\n return elm.cloneNode(true);\n }\n };\n const setSizeProp = (element, name, value) => {\n if (isNonNullable(value)) {\n const targets = getResizeTargets(element);\n each$e(targets, target => {\n if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n dom.setStyle(target, name, value);\n } else {\n dom.setAttrib(target, name, '' + value);\n }\n });\n }\n };\n const setGhostElmSize = (ghostElm, width, height) => {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n const resizeGhostElement = e => {\n let deltaX, deltaY, proportional;\n let resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round$1(width * ratio);\n width = round$1(height / ratio);\n } else {\n width = round$1(height / ratio);\n height = round$1(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n const endGhostResize = () => {\n const wasResizeStarted = resizeStarted;\n resizeStarted = false;\n if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n const showResizeRect = targetElm => {\n unbindResizeHandleEvents();\n const position = dom.getPos(targetElm, rootElement);\n const selectedElmX = position.x;\n const selectedElmY = position.y;\n const rect = targetElm.getBoundingClientRect();\n const targetWidth = rect.width || rect.right - rect.left;\n const targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n const e = editor.dispatch('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each$d(resizeHandles, (handle, name) => {\n const startDrag = e => {\n const target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(dom, selectedElm);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = 'false';\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n selectedElmGhost.removeAttribute(elementSelectionAttr);\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n let handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n dom.bind(handleElm, 'mousedown', e => {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect(false);\n }\n };\n const throttledShowResizeRect = first$1(showResizeRect, 0);\n const hideResizeRect = (removeSelected = true) => {\n throttledShowResizeRect.cancel();\n unbindResizeHandleEvents();\n if (selectedElm && removeSelected) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$d(resizeHandles, (value, name) => {\n const handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n const updateResizeRect = e => {\n if (resizeStarted || editor.removed || editor.composing) {\n return;\n }\n const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).filter(e => dom.isEditable(e.parentElement) || e.nodeName === 'IMG' && dom.isEditable(e)).getOrUndefined();\n const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n img.removeAttribute(elementSelectionAttr);\n });\n if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement) && editor.hasFocus()) {\n disableGeckoResize();\n const startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n throttledShowResizeRect.throttle(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n const unbindResizeHandleEvents = () => {\n each$d(resizeHandles, handle => {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n const disableGeckoResize = () => {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', () => {\n disableGeckoResize();\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n editor.on('keyup compositionend', e => {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n updateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n const destroy = () => {\n throttledShowResizeRect.cancel();\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable,\n showResizeRect,\n hideResizeRect,\n updateResizeRect,\n destroy\n };\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$9 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$9 };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint$1 = (win, x, y) => {\n const doc = win.document;\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$2 = situ => situ.fold(identity, identity, identity);\n const before$1 = adt$2.before;\n const on = adt$2.on;\n const after$1 = adt$2.after;\n const Situ = {\n before: before$1,\n on,\n after: after$1,\n cata,\n getStart: getStart$2\n };\n\n const adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart$1 = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$1.domRange;\n const relative = adt$1.relative;\n const exact = adt$1.exact;\n const getWin = selection => {\n const start = getStart$1(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n const preprocess = selection => selection.match({\n domRange: rng => {\n const start = SugarElement.fromDom(rng.startContainer);\n const finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$e(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const toNative = selection => {\n const win = SimSelection.getWin(selection).dom;\n const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n const filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n const fromPoint = (clientX, clientY, doc) => {\n const win = defaultView(SugarElement.fromDom(doc));\n return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n const rng = doc.createRange();\n rng.setStart(simRange.start.dom, simRange.soffset);\n rng.setEnd(simRange.finish.dom, simRange.foffset);\n return rng;\n }).getOrUndefined();\n };\n\n const isEq$4 = (rng1, rng2) => {\n return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n const findParent = (node, rootNode, predicate) => {\n let currentNode = node;\n while (currentNode && currentNode !== rootNode) {\n if (predicate(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n const hasBrBeforeAfter = (dom, node, left) => {\n const parentNode = node.parentNode;\n if (parentNode) {\n const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n let currentNode;\n while (currentNode = walker[left ? 'prev' : 'next']()) {\n if (isBr$6(currentNode)) {\n return true;\n }\n }\n }\n return false;\n };\n const isPrevNode = (node, name) => {\n var _a;\n return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n };\n const hasContentEditableFalseParent$1 = (root, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== root) {\n if (isContentEditableFalse$b(currentNode)) {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n };\n const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n const body = dom.getRoot();\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n const parentNode = startNode.parentNode;\n let lastInlineElement;\n let node;\n if (!parentNode) {\n return Optional.none();\n }\n const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n }\n const walker = new DomTreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Optional.none();\n }\n if (isText$b(node) && node.data.length > 0) {\n if (!hasParentWithName(node, body, 'A')) {\n return Optional.some(CaretPosition(node, left ? node.data.length : 0));\n }\n return Optional.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Optional.none();\n }\n lastInlineElement = node;\n }\n if (isComment(lastInlineElement)) {\n return Optional.none();\n }\n if (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n const normalizeEndPoint = (dom, collapsed, start, rng) => {\n const body = dom.getRoot();\n let node;\n let normalized = false;\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n let directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$6(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (isDocument$1(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer$2(node)) {\n return Optional.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Optional.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = isText$b(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent$1(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isDetails(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && !isTable$2(container)) {\n node = container;\n const walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$b(node) && node.data.length > 0) {\n offset = directionLeft ? 0 : node.data.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (isText$b(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$6(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$b(container) && offset === container.data.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n const normalize$2 = (dom, rng) => {\n const collapsed = rng.collapsed, normRng = rng.cloneRange();\n const startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(pos => {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(pos => {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n };\n\n const splitText = (node, offset) => {\n return node.splitText(offset);\n };\n const split = rng => {\n let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$b(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.data.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n startContainer = endContainer = newContainer;\n endOffset = newContainer.data.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$b(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$b(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n endContainer = newContainer;\n endOffset = newContainer.data.length;\n }\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const RangeUtils = dom => {\n const walk = (rng, callback) => {\n return walk$3(dom, rng, callback);\n };\n const split$1 = split;\n const normalize = rng => {\n return normalize$2(dom, rng).fold(never, normalizedRng => {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n const expand = (rng, options = { type: 'word' }) => {\n if (options.type === 'word') {\n const rangeLike = expandRng(dom, rng, [{ inline: 'span' }]);\n const newRange = dom.createRng();\n newRange.setStart(rangeLike.startContainer, rangeLike.startOffset);\n newRange.setEnd(rangeLike.endContainer, rangeLike.endOffset);\n return newRange;\n }\n return rng;\n };\n return {\n walk,\n split: split$1,\n expand,\n normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$7(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$7(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$2 = element => api.get(element);\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner = element => documentOrOwner(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n const find = element => {\n const doc = getDocument();\n const scroll = get$5(doc);\n const frames = pathTo(element, Navigation);\n const offset = viewport(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n };\n\n const excludeFromDescend = element => name(element) === 'textarea';\n const fireScrollIntoViewEvent = (editor, data) => {\n const scrollEvent = editor.dispatch('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n const fireAfterScrollIntoViewEvent = (editor, data) => {\n editor.dispatch('AfterScrollIntoView', data);\n };\n const descend = (element, offset) => {\n const children = children$1(element);\n if (children.length === 0 || excludeFromDescend(element)) {\n return {\n element,\n offset\n };\n } else if (offset < children.length && !excludeFromDescend(children[offset])) {\n return {\n element: children[offset],\n offset: 0\n };\n } else {\n const last = children[children.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element,\n offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$c(last)) {\n return {\n element: last,\n offset: get$3(last).length\n };\n } else {\n return {\n element: last,\n offset: children$1(last).length\n };\n }\n }\n }\n };\n const markerInfo = (element, cleanupFun) => {\n const pos = absolute(element);\n const height = get$2(element);\n return {\n element,\n bottom: pos.top + height,\n height,\n pos,\n cleanup: cleanupFun\n };\n };\n const createMarker$1 = (element, offset) => {\n const startPoint = descend(element, offset);\n const span = SugarElement.fromHtml('' + ZWSP$1 + '');\n before$3(startPoint.element, span);\n return markerInfo(span, () => remove$4(span));\n };\n const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n const withMarker = (editor, f, rng, alignToTop) => {\n preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n };\n const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n const data = {\n elm: marker.element.dom,\n alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n const scrollTop = get$5(doc).top;\n f(editor, doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n const applyWithMarker = (editor, f, rng, alignToTop) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n const withElement = (editor, element, f, alignToTop) => {\n const doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n const preserveWith = (editor, f, rng) => {\n const startElement = rng.startContainer;\n const startOffset = rng.startOffset;\n const endElement = rng.endContainer;\n const endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n const newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n const scrollToMarker = (editor, marker, viewHeight, alignToTop, doc) => {\n const pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n const y = pos.top - viewHeight + marker.height;\n to(-editor.getBody().getBoundingClientRect().left, y, doc);\n }\n };\n const intoWindowIfNeeded = (editor, doc, scrollTop, viewHeight, marker, alignToTop) => {\n const viewportBottom = viewHeight + scrollTop;\n const markerTop = marker.pos.top;\n const markerBottom = marker.bottom;\n const largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(editor, marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(editor, marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(editor, marker, viewHeight, alignToTop === true, doc);\n }\n };\n const intoWindow = (editor, doc, scrollTop, marker, alignToTop) => {\n const viewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, doc, scrollTop, viewHeight, marker, alignToTop);\n };\n const intoFrame = (editor, doc, scrollTop, marker, alignToTop) => {\n const frameViewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, doc, scrollTop, frameViewHeight, marker, alignToTop);\n const op = find(marker.element);\n const viewportBounds = getBounds(window);\n if (op.top < viewportBounds.y) {\n intoView(marker.element, alignToTop !== false);\n } else if (op.top > viewportBounds.bottom) {\n intoView(marker.element, alignToTop === true);\n }\n };\n const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n const scrollElementIntoView = (editor, element, alignToTop) => {\n const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n const scrollRangeIntoView = (editor, rng, alignToTop) => {\n const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n const focus$1 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n const hasFocus$1 = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const clamp$1 = (offset, element) => {\n const max = isText$c(element) ? get$3(element).length : children$1(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n const shouldStore = editor => editor.inline || Env.browser.isFirefox();\n const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const readRange = win => {\n const selection = win.getSelection();\n const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n const getBookmark$1 = root => {\n const win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n const bookmarkToNativeRng = bookmark => {\n const rng = document.createRange();\n try {\n rng.setStart(bookmark.start.dom, bookmark.soffset);\n rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n return Optional.some(rng);\n } catch (_) {\n return Optional.none();\n }\n };\n const store = editor => {\n const newBookmark = shouldStore(editor) ? getBookmark$1(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n const getRng = editor => {\n const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n };\n const restore = editor => {\n getRng(editor).each(rng => editor.selection.setRng(rng));\n };\n\n const isEditorUIElement$1 = elm => {\n const className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n const wrappedSetTimeout = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n const wrappedSetInterval = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setInterval(callback, time);\n };\n const Delay = {\n setEditorTimeout: (editor, callback, time) => {\n return wrappedSetTimeout(() => {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: (editor, callback, time) => {\n const timer = wrappedSetInterval(() => {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n }\n };\n\n const isManualNodeChange = e => {\n return e.type === 'nodechange' && e.selectionChange;\n };\n const registerPageMouseUp = (editor, throttledStore) => {\n const mouseUpPage = () => {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', () => {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n const registerMouseUp = (editor, throttledStore) => {\n editor.on('mouseup touchend', _e => {\n throttledStore.throttle();\n });\n };\n const registerEditorEvents = (editor, throttledStore) => {\n registerMouseUp(editor, throttledStore);\n editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n const register$6 = editor => {\n const throttledStore = first$1(() => {\n store(editor);\n }, 0);\n editor.on('init', () => {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', () => {\n throttledStore.cancel();\n });\n };\n\n let documentFocusInHandler;\n const DOM$9 = DOMUtils.DOM;\n const isEditorUIElement = elm => {\n return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n };\n const isEditorContentAreaElement = elm => {\n const classList = elm.classList;\n if (classList !== undefined) {\n return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n } else {\n return false;\n }\n };\n const isUIElement = (editor, elm) => {\n const customSelector = getCustomUiSelector(editor);\n const parent = DOM$9.getParent(elm, elm => {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n const getActiveElement = editor => {\n try {\n const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(root).fold(() => document.body, x => x.dom);\n } catch (ex) {\n return document.body;\n }\n };\n const registerEvents$1 = (editorManager, e) => {\n const editor = e.editor;\n register$6(editor);\n const toggleContentAreaOnFocus = (editor, fn) => {\n if (shouldHighlightOnFocus(editor) && editor.inline !== true) {\n const contentArea = SugarElement.fromDom(editor.getContainer());\n fn(contentArea, 'tox-edit-focus');\n }\n };\n editor.on('focusin', () => {\n const focusedEditor = editorManager.focusedEditor;\n if (isEditorContentAreaElement(getActiveElement(editor))) {\n toggleContentAreaOnFocus(editor, add$2);\n }\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.dispatch('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.dispatch('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', () => {\n Delay.setEditorTimeout(editor, () => {\n const focusedEditor = editorManager.focusedEditor;\n if (!isEditorContentAreaElement(getActiveElement(editor)) || focusedEditor !== editor) {\n toggleContentAreaOnFocus(editor, remove$6);\n }\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = e => {\n const activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(target => {\n const elem = target;\n if (elem.ownerDocument === document) {\n if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n activeEditor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$9.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n const unregisterDocumentEvents = (editorManager, e) => {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor && documentFocusInHandler) {\n DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n const setup$w = editorManager => {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n const hasContentEditableFalseParent = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'false') !== null;\n const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (!contains(root, node)) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n const normalizeSelection = (editor, rng) => {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n return firstPositionIn(elm.dom);\n }).fold(() => {\n editor.selection.normalize();\n }, caretPos => editor.selection.setRng(caretPos.toRange()));\n };\n const focusBody = body => {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n const hasInlineFocus = editor => {\n const rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n const hasUiFocus = editor => {\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n };\n const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n const focusEditor = editor => {\n const selection = editor.selection;\n const body = editor.getBody();\n let rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n const restoreBookmark = editor => {\n getRng(editor).each(bookmarkRng => {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n };\n if (!hasFocus(editor) && editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\n const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n if (!hasContentEditableFalseParent(editor, contentEditableHost)) {\n focusBody(body);\n }\n focusBody(contentEditableHost);\n if (!editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.browser.isOpera()) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.browser.isFirefox() || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n const activateEditor = editor => editor.editorManager.setActive(editor);\n const focus = (editor, skipFocus) => {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n const isEditableRange = (dom, rng) => {\n if (rng.collapsed) {\n return dom.isEditable(rng.startContainer);\n } else {\n return dom.isEditable(rng.startContainer) && dom.isEditable(rng.endContainer);\n }\n };\n\n const getEndpointElement = (root, rng, start, real, resolve) => {\n const container = start ? rng.startContainer : rng.endContainer;\n const offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n };\n const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n const getEnd = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n const skipEmptyTextNodes = (node, forwards) => {\n const orig = node;\n while (node && isText$b(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n const getNode = (root, rng) => {\n if (!rng) {\n return root;\n }\n let startContainer = rng.startContainer;\n let endContainer = rng.endContainer;\n const startOffset = rng.startOffset;\n const endOffset = rng.endOffset;\n let node = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n node = startContainer.childNodes[startOffset];\n }\n }\n }\n if (isText$b(startContainer) && isText$b(endContainer)) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n node = startContainer;\n }\n }\n }\n const elm = isText$b(node) ? node.parentNode : node;\n return isHTMLElement(elm) ? elm : root;\n };\n const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n const selectedBlocks = [];\n const root = dom.getRoot();\n const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n const end = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (start && start !== root) {\n selectedBlocks.push(start);\n }\n if (start && end && start !== end) {\n let node;\n const walker = new DomTreeWalker(start, root);\n while ((node = walker.next()) && node !== end) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (end && start !== end && end !== root) {\n selectedBlocks.push(end);\n }\n return selectedBlocks;\n };\n const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n const idx = dom.nodeIndex(node);\n const rng = dom.createRng();\n rng.setStart(parent, idx);\n rng.setEnd(parent, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n }));\n\n const processRanges = (editor, ranges) => map$3(ranges, range => {\n const evt = editor.dispatch('GetSelectionRange', { range });\n return evt.range !== range ? evt.range : range;\n });\n\n const typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n const walk$2 = (node, root, prev) => {\n const startName = prev ? 'lastChild' : 'firstChild';\n const siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n return undefined;\n };\n const isEmptyTextNode = node => {\n var _a;\n const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (!isWhitespaceText(text)) {\n return false;\n }\n const parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n return false;\n }\n return true;\n };\n const isNonEmptyElement = node => {\n const isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n };\n class AstNode {\n static create(name, attrs) {\n const node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$d(attrs, (value, attrName) => {\n node.attr(attrName, value);\n });\n }\n return node;\n }\n constructor(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n replace(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n }\n attr(name, value) {\n const self = this;\n if (!isString(name)) {\n if (isNonNullable(name)) {\n each$d(name, (value, key) => {\n self.attr(key, value);\n });\n }\n return self;\n }\n const attrs = self.attributes;\n if (attrs) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name,\n value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n return undefined;\n }\n clone() {\n const self = this;\n const clone = new AstNode(self.name, self.type);\n const selfAttrs = self.attributes;\n if (selfAttrs) {\n const cloneAttrs = [];\n cloneAttrs.map = {};\n for (let i = 0, l = selfAttrs.length; i < l; i++) {\n const selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n return clone;\n }\n wrap(wrapper) {\n const self = this;\n if (self.parent) {\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n }\n return self;\n }\n unwrap() {\n const self = this;\n for (let node = self.firstChild; node;) {\n const next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n }\n remove() {\n const self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else if (prev) {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else if (next) {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n }\n append(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n const last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n }\n insert(node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n const parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else if (refNode.prev) {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else if (refNode.next) {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n }\n getAll(name) {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n }\n children() {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n }\n empty() {\n const self = this;\n if (self.firstChild) {\n const nodes = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n }\n isEmpty(elements, whitespace = {}, predicate) {\n var _a;\n const self = this;\n let node = self.firstChild;\n if (isNonEmptyElement(self)) {\n return false;\n }\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attr('data-mce-bogus')) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !isEmptyTextNode(node)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n }\n walk(prev) {\n return walk$2(this, null, prev);\n }\n }\n\n const unescapedTextParents = Tools.makeMap('NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT', ' ');\n const containsZwsp = node => isString(node.nodeValue) && node.nodeValue.includes(ZWSP$1);\n const getTemporaryNodeSelector = tempAttrs => `${ tempAttrs.length === 0 ? '' : `${ map$3(tempAttrs, attr => `[${ attr }]`).join(',') },` }[data-mce-bogus=\"all\"]`;\n const getTemporaryNodes = (tempAttrs, body) => body.querySelectorAll(getTemporaryNodeSelector(tempAttrs));\n const createZwspCommentWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_COMMENT, node => containsZwsp(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);\n const createUnescapedZwspTextWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_TEXT, node => {\n if (containsZwsp(node)) {\n const parent = node.parentNode;\n return parent && has$2(unescapedTextParents, parent.nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n } else {\n return NodeFilter.FILTER_SKIP;\n }\n });\n const hasZwspComment = body => createZwspCommentWalker(body).nextNode() !== null;\n const hasUnescapedZwspText = body => createUnescapedZwspTextWalker(body).nextNode() !== null;\n const hasTemporaryNode = (tempAttrs, body) => body.querySelector(getTemporaryNodeSelector(tempAttrs)) !== null;\n const trimTemporaryNodes = (tempAttrs, body) => {\n each$e(getTemporaryNodes(tempAttrs, body), elm => {\n const element = SugarElement.fromDom(elm);\n if (get$9(element, 'data-mce-bogus') === 'all') {\n remove$4(element);\n } else {\n each$e(tempAttrs, attr => {\n if (has$1(element, attr)) {\n remove$9(element, attr);\n }\n });\n }\n });\n };\n const emptyAllNodeValuesInWalker = walker => {\n let curr = walker.nextNode();\n while (curr !== null) {\n curr.nodeValue = null;\n curr = walker.nextNode();\n }\n };\n const emptyZwspComments = compose(emptyAllNodeValuesInWalker, createZwspCommentWalker);\n const emptyUnescapedZwspTexts = compose(emptyAllNodeValuesInWalker, createUnescapedZwspTextWalker);\n const trim$1 = (body, tempAttrs) => {\n const conditionalTrims = [\n {\n condition: curry(hasTemporaryNode, tempAttrs),\n action: curry(trimTemporaryNodes, tempAttrs)\n },\n {\n condition: hasZwspComment,\n action: emptyZwspComments\n },\n {\n condition: hasUnescapedZwspText,\n action: emptyUnescapedZwspTexts\n }\n ];\n let trimmed = body;\n let cloned = false;\n each$e(conditionalTrims, ({condition, action}) => {\n if (condition(trimmed)) {\n if (!cloned) {\n trimmed = body.cloneNode(true);\n cloned = true;\n }\n action(trimmed);\n }\n });\n return trimmed;\n };\n\n const cleanupBogusElements = parent => {\n const bogusElements = descendants(parent, '[data-mce-bogus]');\n each$e(bogusElements, elem => {\n const bogusValue = get$9(elem, 'data-mce-bogus');\n if (bogusValue === 'all') {\n remove$4(elem);\n } else if (isBr$5(elem)) {\n before$3(elem, SugarElement.fromText(zeroWidth));\n remove$4(elem);\n } else {\n unwrap(elem);\n }\n });\n };\n const cleanupInputNames = parent => {\n const inputs = descendants(parent, 'input');\n each$e(inputs, input => {\n remove$9(input, 'name');\n });\n };\n\n const trimEmptyContents = (editor, html) => {\n const blockName = getForcedRootBlock(editor);\n const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>( | |\\\\s|\\u00a0|
|)<\\\\/${ blockName }>[\\r\\n]*|
[\\r\\n]*)$`);\n return html.replace(emptyRegExp, '');\n };\n const getPlainTextContent = (editor, body) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$3(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0'\n });\n set$1(offscreenDiv, body.innerHTML);\n cleanupBogusElements(offscreenDiv);\n cleanupInputNames(offscreenDiv);\n const root = getContentContainer(dos);\n append$1(root, offscreenDiv);\n const content = trim$2(offscreenDiv.dom.innerText);\n remove$4(offscreenDiv);\n return content;\n };\n const getContentFromBody = (editor, args, body) => {\n let content;\n if (args.format === 'raw') {\n content = Tools.trim(trim$2(trim$1(body, editor.serializer.getTempAttrs()).innerHTML));\n } else if (args.format === 'text') {\n content = getPlainTextContent(editor, body);\n } else if (args.format === 'tree') {\n content = editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n return shouldTrim && isString(content) ? Tools.trim(content) : content;\n };\n const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n const makeMap$1 = Tools.makeMap;\n const Writer = settings => {\n const html = [];\n settings = settings || {};\n const indent = settings.indent;\n const indentBefore = makeMap$1(settings.indent_before || '');\n const indentAfter = makeMap$1(settings.indent_after || '');\n const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n const htmlOutput = settings.element_format !== 'xhtml';\n return {\n start: (name, attrs, empty) => {\n if (indent && indentBefore[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: name => {\n let value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: (text, raw) => {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: text => {\n html.push('');\n },\n comment: text => {\n html.push('');\n },\n pi: (name, text) => {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: text => {\n html.push('', indent ? '\\n' : '');\n },\n reset: () => {\n html.length = 0;\n },\n getContent: () => {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n const HtmlSerializer = (settings = {}, schema = Schema()) => {\n const writer = Writer(settings);\n settings.validate = 'validate' in settings ? settings.validate : true;\n const serialize = node => {\n const validate = settings.validate;\n const handlers = {\n 3: node => {\n var _a;\n writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n },\n 8: node => {\n var _a;\n writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 7: node => {\n writer.pi(node.name, node.value);\n },\n 10: node => {\n var _a;\n writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 4: node => {\n var _a;\n writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 11: node => {\n let tempNode = node;\n if (tempNode = tempNode.firstChild) {\n do {\n walk(tempNode);\n } while (tempNode = tempNode.next);\n }\n }\n };\n writer.reset();\n const walk = node => {\n var _a;\n const handler = handlers[node.type];\n if (!handler) {\n const name = node.name;\n const isEmpty = name in schema.getVoidElements();\n let attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n const sortedAttrs = [];\n sortedAttrs.map = {};\n const elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n const attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(name, attrs, isEmpty);\n if (isNonHtmlElementRootName(name)) {\n if (isString(node.value)) {\n writer.text(node.value, true);\n }\n writer.end(name);\n } else {\n if (!isEmpty) {\n let child = node.firstChild;\n if (child) {\n if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n writer.text('\\n', true);\n }\n do {\n walk(child);\n } while (child = child.next);\n }\n writer.end(name);\n }\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else if (node.type === 3) {\n handlers[3](node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize };\n };\n\n const nonInheritableStyles = new Set();\n (() => {\n const nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each$e(nonInheritableStylesArr, style => {\n nonInheritableStyles.add(style);\n });\n })();\n const conditionalNonInheritableStyles = new Set();\n (() => {\n const conditionalNonInheritableStylesArr = ['background-color'];\n each$e(conditionalNonInheritableStylesArr, style => {\n conditionalNonInheritableStyles.add(style);\n });\n })();\n const shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n const getStyles$1 = (dom, node) => dom.parseStyle(dom.getAttrib(node, 'style'));\n const getStyleProps = (dom, node) => keys(getStyles$1(dom, node));\n const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n const isConditionalNonInheritableStyle = style => conditionalNonInheritableStyles.has(style);\n const hasNonInheritableStyles = (dom, node) => exists(getStyleProps(dom, node), style => isNonInheritableStyle(style));\n const hasConditionalNonInheritableStyles = (dom, node) => hasNonInheritableStyles(dom, node) && exists(getStyleProps(dom, node), style => isConditionalNonInheritableStyle(style));\n const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n const hasStyleConflict = (dom, node, parentNode) => {\n const nodeStyleProps = getStyleProps(dom, node);\n const parentNodeStyleProps = getStyleProps(dom, parentNode);\n const valueMismatch = prop => {\n var _a, _b;\n const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, nodeStyleProp => {\n const propExists = props => exists(props, prop => prop === nodeStyleProp);\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$b).exists(text => {\n const delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n const isAfterSpace = curry(isChar, false, isWhiteSpace);\n const isEmptyText = pos => {\n const container = pos.container();\n return isText$b(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n const isCefNode = node => isContentEditableFalse$b(node) && !isBogusAll(node);\n const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n const isAfterMedia = matchesElementPosition(false, isMedia$2);\n const isBeforeTable = matchesElementPosition(true, isTable$2);\n const isAfterTable = matchesElementPosition(false, isTable$2);\n const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n const dropLast = xs => xs.slice(0, -1);\n const parentsUntil = (start, root, predicate) => {\n if (contains(root, start)) {\n return dropLast(parents$1(start, elm => {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n const parents = (start, root) => parentsUntil(start, root, never);\n const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n const isBlock$1 = schema => el => schema.isBlock(name(el));\n const getClosestBlock$1 = (root, pos, schema) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$1(schema));\n const isAtBeforeAfterBlockBoundary = (forward, root, pos, schema) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos, schema).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n const isAtBlockBoundary = (forward, root, pos, schema) => getClosestBlock$1(root, pos, schema).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n const findBr = (forward, root, pos, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n const scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n };\n const isBeforeBr$1 = (root, pos, schema) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos, schema).isSome();\n const isAfterBr = (root, pos, schema) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos, schema).isSome();\n const findPreviousBr = curry(findBr, false);\n const findNextBr = curry(findBr, true);\n\n const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n const getClosestBlock = (root, pos, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n return head(parentBlocks).getOr(root);\n };\n const hasSpaceBefore = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isAfterSpace);\n }\n };\n const hasSpaceAfter = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isBeforeSpace);\n }\n };\n const isPreValue = value => contains$2([\n 'pre',\n 'pre-wrap'\n ], value);\n const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n const isAtLineBoundary = (root, pos, schema) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos, schema) || isAtEndOfBlock(root, pos, schema) || isAfterBr(root, pos, schema) || isBeforeBr$1(root, pos, schema);\n const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$b(node) && isBlockLike(node);\n const isSiblingCefBlock = (root, direction) => container => {\n return isCefBlock(new DomTreeWalker(container, root)[direction]());\n };\n const isBeforeCefBlock = (root, pos) => {\n const nextPos = nextPosition(root.dom, pos).getOr(pos);\n const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n };\n const isAfterCefBlock = (root, pos) => {\n const prevPos = prevPosition(root.dom, pos).getOr(pos);\n const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n };\n const needsToHaveNbsp = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos, schema) || hasSpaceBefore(root, pos, schema) || hasSpaceAfter(root, pos, schema);\n }\n };\n const needsToBeNbspLeft = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos, schema) || isBeforeBlock(root, pos, schema) || isAfterBr(root, pos, schema) || hasSpaceBefore(root, pos, schema) || isAfterCefBlock(root, pos);\n }\n };\n const leanRight = pos => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n const needsToBeNbspRight = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos, schema) || isAfterBlock(root, pos, schema) || isBeforeBr$1(root, pos, schema) || hasSpaceAfter(root, pos, schema) || isBeforeCefBlock(root, pos);\n }\n };\n const needsToBeNbsp = (root, pos, schema) => needsToBeNbspLeft(root, pos, schema) || needsToBeNbspRight(root, leanRight(pos), schema);\n const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n const hasNbsp = pos => {\n const container = pos.container();\n return isText$b(container) && contains$1(container.data, nbsp);\n };\n const normalizeNbspMiddle = text => {\n const chars = text.split('');\n return map$3(chars, (chr, i) => {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n const normalizeNbspAtStart = (root, node, makeNbsp, schema) => {\n const text = node.data;\n const firstPos = CaretPosition(node, 0);\n if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos, schema)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos, schema)) {\n node.data = nbsp + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspInMiddleOfTextNode = node => {\n const text = node.data;\n const newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspAtEnd = (root, node, makeNbsp, schema) => {\n const text = node.data;\n const lastPos = CaretPosition(node, text.length - 1);\n if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + nbsp;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbsps$1 = (root, pos, schema) => {\n const container = pos.container();\n if (!isText$b(container)) {\n return Optional.none();\n }\n if (hasNbsp(pos)) {\n const normalized = normalizeNbspAtStart(root, container, false, schema) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false, schema);\n return someIf(normalized, pos);\n } else if (needsToBeNbsp(root, pos, schema)) {\n const normalized = normalizeNbspAtStart(root, container, true, schema) || normalizeNbspAtEnd(root, container, true, schema);\n return someIf(normalized, pos);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbspsInEditor = editor => {\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps$1(root, CaretPosition.fromRangeStart(editor.selection.getRng()), editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n const normalize$1 = (node, offset, count, schema) => {\n if (count === 0) {\n return;\n }\n const elm = SugarElement.fromDom(node);\n const root = ancestor$4(elm, el => schema.isBlock(name(el))).getOr(elm);\n const whitespace = node.data.slice(offset, offset + count);\n const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length), schema);\n const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0), schema);\n node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n };\n const normalizeWhitespaceAfter = (node, offset, schema) => {\n const content = node.data.slice(offset);\n const whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount, schema);\n };\n const normalizeWhitespaceBefore = (node, offset, schema) => {\n const content = node.data.slice(0, offset);\n const whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount, schema);\n };\n const mergeTextNodes = (prevNode, nextNode, schema, normalizeWhitespace, mergeToPrev = true) => {\n const whitespaceOffset = rTrim(prevNode.data).length;\n const newNode = mergeToPrev ? prevNode : nextNode;\n const removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$4(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset, schema);\n }\n return newNode;\n };\n\n const needsReposition = (pos, elm) => {\n const container = pos.container();\n const offset = pos.offset();\n return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n const beforeOrStartOf = node => isText$b(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n const afterOrEndOf = node => isText$b(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n const getPreviousSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.previousSibling)) {\n return Optional.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n }\n };\n const getNextSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.nextSibling)) {\n return Optional.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n }\n };\n const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n };\n const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n const setSelection$1 = (editor, forward, pos) => {\n pos.fold(() => {\n editor.focus();\n }, pos => {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n const eqRawNode = rawNode => elm => elm.dom === rawNode;\n const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n const paddEmptyBlock = (schema, elm, preserveEmptyCaret) => {\n if (isEmpty$2(schema, elm)) {\n const br = SugarElement.fromHtml('
');\n if (preserveEmptyCaret) {\n each$e(children$1(elm), node => {\n if (!isEmptyCaretFormatElement(node)) {\n remove$4(node);\n }\n });\n } else {\n empty(elm);\n }\n append$1(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n const deleteNormalized = (elm, afterDeletePosOpt, schema, normalizeWhitespace) => {\n const prevTextOpt = prevSibling(elm).filter(isText$c);\n const nextTextOpt = nextSibling(elm).filter(isText$c);\n remove$4(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n const prevNode = prev.dom, nextNode = next.dom;\n const offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, schema, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(() => {\n if (normalizeWhitespace) {\n prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length, schema));\n nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0, schema));\n }\n return afterDeletePosOpt;\n });\n };\n const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n const deleteElement$2 = (editor, forward, elm, moveCaret = true, preserveEmptyCaret = false) => {\n const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n const parentBlock = ancestor$4(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, editor.schema, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(elm => paddEmptyBlock(editor.schema, elm, preserveEmptyCaret)).fold(() => {\n if (moveCaret) {\n setSelection$1(editor, forward, normalizedAfterDeletePos);\n }\n }, paddPos => {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n const hasStrongRtl = text => strongRtl.test(text);\n\n const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)) && !isTransparentBlock(editor.schema, elm) && editor.dom.isEditable(elm);\n const isRtl = element => {\n var _a;\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n };\n const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n const findRootInline = (isInlineTarget, rootNode, pos) => {\n const parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n const hasSameParentBlock = (rootNode, node1, node2) => {\n const block1 = getParentBlock$3(node1, rootNode);\n const block2 = getParentBlock$3(node2, rootNode);\n return isNonNullable(block1) && block1 === block2;\n };\n const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n const normalizePosition = (forward, pos) => {\n const container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$b(container.nextSibling)) {\n return CaretPosition(container.nextSibling, 0);\n } else {\n return CaretPosition.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (isText$b(container.previousSibling)) {\n return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n }\n }\n };\n const normalizeForwards = curry(normalizePosition, true);\n const normalizeBackwards = curry(normalizePosition, false);\n\n const execCommandIgnoreInputEvents = (editor, command) => {\n const inputBlocker = e => e.stopImmediatePropagation();\n editor.on('beforeinput input', inputBlocker, true);\n editor.getDoc().execCommand(command);\n editor.off('beforeinput input', inputBlocker);\n };\n const execEditorDeleteCommand = editor => {\n editor.execCommand('delete');\n };\n const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n const getParentBlock$2 = (rootNode, elm) => {\n if (contains(rootNode, elm)) {\n return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n } else {\n return Optional.none();\n }\n };\n const paddEmptyBody = (editor, moveSelection = true) => {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('', { no_selection: !moveSelection });\n }\n };\n const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n const normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n } else {\n return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n }\n }).getOr(true);\n const freefallRtl = root => {\n const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n };\n const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n var _a;\n rng.deleteContents();\n const lastNode = freefallRtl(root).getOr(root);\n const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n if (lastBlock.dom === editor.getBody()) {\n paddEmptyBody(editor, moveSelection);\n } else if (isEmpty$2(editor.schema, lastBlock, { checkRootAsContent: false })) {\n fillWithPaddingBr(lastBlock);\n if (moveSelection) {\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n }\n if (!eq(root, lastBlock)) {\n const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n each$e(additionalCleanupNodes.concat(children$1(root)), node => {\n if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(editor.schema, node)) {\n remove$4(node);\n }\n });\n }\n };\n\n const isRootFromElement = root => cur => eq(root, cur);\n const getTableCells = table => descendants(table, 'td,th');\n const getTable$1 = (node, isRoot) => getClosestTable(SugarElement.fromDom(node), isRoot);\n const selectionInTableWithNestedTable = details => {\n return lift2(details.startTable, details.endTable, (startTable, endTable) => {\n const isStartTableParentOfEndTable = descendant(startTable, t => eq(t, endTable));\n const isEndTableParentOfStartTable = descendant(endTable, t => eq(t, startTable));\n return !isStartTableParentOfEndTable && !isEndTableParentOfStartTable ? details : {\n ...details,\n startTable: isStartTableParentOfEndTable ? Optional.none() : details.startTable,\n endTable: isEndTableParentOfStartTable ? Optional.none() : details.endTable,\n isSameTable: false,\n isMultiTable: false\n };\n }).getOr(details);\n };\n const adjustQuirksInDetails = details => {\n return selectionInTableWithNestedTable(details);\n };\n const getTableDetailsFromRange = (rng, isRoot) => {\n const startTable = getTable$1(rng.startContainer, isRoot);\n const endTable = getTable$1(rng.endContainer, isRoot);\n const isStartInTable = startTable.isSome();\n const isEndInTable = endTable.isSome();\n const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return adjustQuirksInDetails({\n startTable,\n endTable,\n isStartInTable,\n isEndInTable,\n isSameTable,\n isMultiTable\n });\n };\n\n const tableCellRng = (start, end) => ({\n start,\n end\n });\n const tableSelection = (rng, table, cells) => ({\n rng,\n table,\n cells\n });\n const deleteAction = Adt.generate([\n {\n singleCellTable: [\n 'rng',\n 'cell'\n ]\n },\n { fullTable: ['table'] },\n {\n partialTable: [\n 'cells',\n 'outsideDetails'\n ]\n },\n {\n multiTable: [\n 'startTableCells',\n 'endTableCells',\n 'betweenRng'\n ]\n }\n ]);\n const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n const rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n const getCellRng = (rng, isRoot) => {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$2(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n const unselectCells = (rng, selectionDetails) => {\n const {startTable, endTable} = selectionDetails;\n const otherContentRng = rng.cloneRange();\n startTable.each(table => otherContentRng.setStartAfter(table.dom));\n endTable.each(table => otherContentRng.setEndBefore(table.dom));\n return otherContentRng;\n };\n const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n const {isSameTable} = selectionDetails;\n const selectedCells = getSelectedCells(tableSelection).getOr([]);\n if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n return Optional.some(deleteAction.fullTable(tableSelection.table));\n } else if (selectedCells.length > 0) {\n if (isSameTable) {\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n } else {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n ...selectionDetails,\n rng: otherContentRng\n })));\n }\n } else {\n return Optional.none();\n }\n });\n const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n const getActionFromRange = (root, rng) => {\n const isRoot = isRootFromElement(root);\n const optCellRng = getCellRng(rng, isRoot);\n const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\n } else if (selectionDetails.isMultiTable) {\n return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n } else {\n return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n }\n };\n\n const cleanCells = cells => each$e(cells, cell => {\n remove$9(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n emptyBlock.each(block => {\n if (startInTable) {\n remove$4(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n const insideTableRng = rng.cloneRange();\n if (isFirstCellInSelection) {\n insideTableRng.setStart(rng.startContainer, rng.startOffset);\n insideTableRng.setEndAfter(cell.dom.lastChild);\n } else {\n insideTableRng.setStartBefore(cell.dom.firstChild);\n insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n }\n deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n };\n const collapseAndRestoreCellSelection = editor => {\n const selectedCells = getCellsFromEditor(editor);\n const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n if (isTableCell$3(selectedNode.dom) && isEmpty$2(editor.schema, selectedNode)) {\n editor.selection.setCursorLocation(selectedNode.dom, 0);\n } else {\n editor.selection.collapse(true);\n }\n if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n set$3(selectedNode, 'data-mce-selected', '1');\n }\n };\n const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n const editorRng = editor.selection.getRng();\n const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(curry(isEmpty$2, editor.schema)));\n const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(editor.schema, endPointCell)) {\n return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n } else {\n return Optional.none();\n }\n }).getOr(cells);\n cleanCells(cellsToClean);\n collapseAndRestoreCellSelection(editor);\n });\n const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n const rng = editor.selection.getRng();\n const startCell = startTableCells[0];\n const endCell = endTableCells[endTableCells.length - 1];\n deleteContentInsideCell(editor, startCell, rng, true);\n deleteContentInsideCell(editor, endCell, rng, false);\n const startTableCellsToClean = isEmpty$2(editor.schema, startCell) ? startTableCells : startTableCells.slice(1);\n const endTableCellsToClean = isEmpty$2(editor.schema, endCell) ? endTableCells : endTableCells.slice(0, -1);\n cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n betweenRng.deleteContents();\n collapseAndRestoreCellSelection(editor);\n });\n const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n deleteRangeContents(editor, rng, cell, moveSelection);\n });\n const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n const deleteRange$3 = (editor, startElm, selectedCells) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n const emptyElement = (editor, elm) => Optional.some(() => {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n });\n const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(editor.schema, fromCell, { checkRootAsContent: false }) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n };\n const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(editor.schema, fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n const isBeforeOrAfterTable = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n };\n const deleteCaret$3 = (editor, forward, startElm) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n };\n const backspaceDelete$b = (editor, forward) => {\n const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n const cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$3(editor, startElm, cells);\n };\n\n const getContentEditableRoot$1 = (root, node) => {\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$b(tempNode)) {\n return tempNode;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n\n const internalAttributesPrefixes = [\n 'data-ephox-',\n 'data-mce-',\n 'data-alloy-',\n 'data-snooker-',\n '_'\n ];\n const each$9 = Tools.each;\n const ElementUtils = editor => {\n const dom = editor.dom;\n const internalAttributes = new Set(editor.serializer.getTempAttrs());\n const compare = (node1, node2) => {\n if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n return false;\n }\n const getAttribs = node => {\n const attribs = {};\n each$9(dom.getAttribs(node), attr => {\n const name = attr.nodeName.toLowerCase();\n if (name !== 'style' && !isAttributeInternal(name)) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n const compareObjects = (obj1, obj2) => {\n for (const name in obj1) {\n if (has$2(obj1, name)) {\n const value = obj2[name];\n if (isUndefined(value)) {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (const name in obj2) {\n if (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\n if (isElement$6(node1) && isElement$6(node2)) {\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n return {\n compare,\n isAttributeInternal\n };\n };\n\n const isHeading = node => [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ].includes(node.name);\n const isSummary = node => node.name === 'summary';\n\n const traverse = (root, fn) => {\n let node = root;\n while (node = node.walk()) {\n fn(node);\n }\n };\n const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n const name = node.name;\n for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n const filter = nodeFilters[ni];\n if (filter.name === name) {\n const match = matches.nodes[name];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.nodes[name] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n if (node.attributes) {\n for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n const filter = attributeFilters[ai];\n const attrName = filter.name;\n if (attrName in node.attributes.map) {\n const match = matches.attributes[attrName];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.attributes[attrName] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n }\n };\n const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n const matches = {\n nodes: {},\n attributes: {}\n };\n if (node.firstChild) {\n traverse(node, childNode => {\n matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n });\n }\n return matches;\n };\n const runFilters = (matches, args) => {\n const run = (matchRecord, filteringAttributes) => {\n each$d(matchRecord, match => {\n const nodes = from(match.nodes);\n each$e(match.filter.callbacks, callback => {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n if (!valueMatches || isNullable(node.parent)) {\n nodes.splice(i, 1);\n }\n }\n if (nodes.length > 0) {\n callback(nodes, match.filter.name, args);\n }\n });\n });\n };\n run(matches.nodes, false);\n run(matches.attributes, true);\n };\n const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n runFilters(matches, args);\n };\n\n const paddEmptyNode = (settings, args, isBlock, node) => {\n const brPreferred = settings.pad_empty_with_br || args.insert;\n if (brPreferred && isBlock(node)) {\n const astNode = new AstNode('br', 1);\n if (args.insert) {\n astNode.attr('data-mce-bogus', '1');\n }\n node.empty().append(astNode);\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n const isPaddedWithNbsp = node => {\n var _a;\n return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n };\n const hasOnlyChild = (node, name) => {\n const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n };\n const isPadded = (schema, node) => {\n const rule = schema.getElementRule(node.name);\n return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n };\n const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n const isLineBreakNode = (node, isBlock) => isNonNullable(node) && (isBlock(node) || node.name === 'br');\n const findClosestEditingHost = scope => {\n let editableNode;\n for (let node = scope; node; node = node.parent) {\n const contentEditable = node.attr('contenteditable');\n if (contentEditable === 'false') {\n break;\n } else if (contentEditable === 'true') {\n editableNode = node;\n }\n }\n return Optional.from(editableNode);\n };\n\n const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n if (schema.getSpecialElements()[node.name]) {\n node.empty().remove();\n } else {\n const children = node.children();\n for (const childNode of children) {\n if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n }\n }\n node.unwrap();\n }\n };\n const cleanInvalidNodes = (nodes, schema, rootNode, onCreate = noop) => {\n const textBlockElements = schema.getTextBlockElements();\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table,summary');\n const fixed = new Set();\n const isSplittableElement = node => node !== rootNode && !nonSplittableElements[node.name];\n for (let ni = 0; ni < nodes.length; ni++) {\n const node = nodes[ni];\n let parent;\n let newParent;\n let tempNode;\n if (!node.parent || fixed.has(node)) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n let sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n fixed.add(sibling);\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap();\n continue;\n }\n const parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && isSplittableElement(parent); parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n if (!isInvalid(schema, node, parent)) {\n parents.reverse();\n newParent = parents[0].clone();\n onCreate(newParent);\n let currentNode = newParent;\n for (let i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name) && i > 0) {\n tempNode = parents[i].clone();\n onCreate(tempNode);\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n const nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n let sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol') && sibling.firstChild) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n const wrapper = new AstNode('ul', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n const wrapper = new AstNode('div', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n }\n }\n };\n const hasClosest = (node, parentName) => {\n let tempNode = node;\n while (tempNode) {\n if (tempNode.name === parentName) {\n return true;\n }\n tempNode = tempNode.parent;\n }\n return false;\n };\n const isInvalid = (schema, node, parent = node.parent) => {\n if (!parent) {\n return false;\n }\n if (schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n return true;\n }\n if (node.name === 'a' && hasClosest(parent, 'a')) {\n return true;\n }\n if (isSummary(parent) && isHeading(node)) {\n return !((parent === null || parent === void 0 ? void 0 : parent.firstChild) === node && (parent === null || parent === void 0 ? void 0 : parent.lastChild) === node);\n }\n return false;\n };\n\n const createRange = (sc, so, ec, eo) => {\n const rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n const normalizeBlockSelectionRange = rng => {\n const startPos = CaretPosition.fromRangeStart(rng);\n const endPos = CaretPosition.fromRangeEnd(rng);\n const rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(newEndPos => {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n const hasOnlyOneChild$1 = node => {\n return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n };\n const isPaddingNode = node => {\n return node.name === 'br' || node.value === nbsp;\n };\n const isPaddedEmptyBlock = (schema, node) => {\n const blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n const isEmptyFragmentElement = (schema, node) => {\n const nonEmptyElements = schema.getNonEmptyElements();\n return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n const isListFragment = (schema, fragment) => {\n let firstChild = fragment.firstChild;\n let lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild === null || lastChild === void 0 ? void 0 : lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n const cleanupDomFragment = domFragment => {\n var _a, _b;\n const firstChild = domFragment.firstChild;\n const lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n }\n return domFragment;\n };\n const toDomFragment = (dom, serializer, fragment) => {\n const html = serializer.serialize(fragment);\n const domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n const listItems = elm => {\n var _a;\n return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n return child.nodeName === 'LI';\n });\n };\n const isPadding = node => {\n return node.data === nbsp || isBr$6(node);\n };\n const isListItemPadded = node => {\n return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n const isEmptyOrPadded = elm => {\n return !elm.firstChild || isListItemPadded(elm);\n };\n const trimListItems = elms => {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n const getParentLi = (dom, node) => {\n const parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n const isParentBlockLi = (dom, node) => {\n return !!getParentLi(dom, node);\n };\n const getSplit = (parentNode, rng) => {\n const beforeRng = rng.cloneRange();\n const afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n const findFirstIn = (node, rootNode) => {\n const caretPos = CaretPosition.before(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const findLastOf = (node, rootNode) => {\n const caretPos = CaretPosition.after(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const insertMiddle = (target, elms, rootNode, rng) => {\n const parts = getSplit(target, rng);\n const parentElm = target.parentNode;\n if (parentElm) {\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, li => {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n }\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n const insertBefore$2 = (target, elms, rootNode) => {\n const parentElm = target.parentNode;\n if (parentElm) {\n Tools.each(elms, elm => {\n parentElm.insertBefore(elm, target);\n });\n }\n return findFirstIn(target, rootNode);\n };\n const insertAfter$2 = (target, elms, rootNode, dom) => {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n const domFragment = toDomFragment(dom, serializer, fragment);\n const liTarget = getParentLi(dom, rng.startContainer);\n const liElms = trimListItems(listItems(domFragment.firstChild));\n const BEGINNING = 1, END = 2;\n const rootNode = dom.getRoot();\n const isAt = location => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(dom.getRoot());\n const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n };\n if (!liTarget) {\n return null;\n } else if (isAt(BEGINNING)) {\n return insertBefore$2(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$2(liTarget, liElms, rootNode, dom);\n } else {\n return insertMiddle(liTarget, liElms, rootNode, rng);\n }\n };\n\n const mergeableWrappedElements = ['pre'];\n const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n var _a;\n const firstNode = fragment.firstChild;\n const lastNode = fragment.lastChild;\n const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n const isPastingSingleElement = firstNode === last;\n const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n if (isPastingSingleElement && isWrappedElement) {\n const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n } else {\n return false;\n }\n };\n const isTableCell = isTableCell$3;\n const isTableCellContentSelected = (dom, rng, cell) => {\n if (isNonNullable(cell)) {\n const endCell = dom.getParent(rng.endContainer, isTableCell);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n const validInsertion = (editor, value, parentNode) => {\n var _a;\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n const node = parentNode.firstChild;\n const node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm, schema) => {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(el => trimBlockTrailingBr(el, schema));\n };\n const reduceInlineTextElements = (editor, merge) => {\n const textInlineElements = editor.schema.getTextInlineElements();\n const dom = editor.dom;\n if (merge) {\n const root = editor.getBody();\n const elementUtils = ElementUtils(editor);\n const fragmentSelector = '*[data-mce-fragment]';\n const fragments = dom.select(fragmentSelector);\n Tools.each(fragments, node => {\n const isInline = currentNode => isNonNullable(textInlineElements[currentNode.nodeName.toLowerCase()]);\n const hasOneChild = currentNode => currentNode.childNodes.length === 1;\n const hasNoNonInheritableStyles = currentNode => !(hasNonInheritableStyles(dom, currentNode) || hasConditionalNonInheritableStyles(dom, currentNode));\n if (hasNoNonInheritableStyles(node) && isInline(node) && hasOneChild(node)) {\n const styles = getStyleProps(dom, node);\n const isOverridden = (oldStyles, newStyles) => forall(oldStyles, style => contains$2(newStyles, style));\n const overriddenByAllChildren = childNode => hasOneChild(node) && dom.is(childNode, fragmentSelector) && isInline(childNode) && (childNode.nodeName === node.nodeName && isOverridden(styles, getStyleProps(dom, childNode)) || overriddenByAllChildren(childNode.children[0]));\n const identicalToParent = parentNode => isNonNullable(parentNode) && parentNode !== root && (elementUtils.compare(node, parentNode) || identicalToParent(parentNode.parentElement));\n const conflictWithInsertedParent = parentNode => isNonNullable(parentNode) && parentNode !== root && dom.is(parentNode, fragmentSelector) && (hasStyleConflict(dom, node, parentNode) || conflictWithInsertedParent(parentNode.parentElement));\n if (overriddenByAllChildren(node.children[0]) || identicalToParent(node.parentElement) && !conflictWithInsertedParent(node.parentElement)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n const markFragmentElements = fragment => {\n let node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n const unmarkFragmentElements = elm => {\n Tools.each(elm.getElementsByTagName('*'), elm => {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n const isPartOfFragment = node => {\n return !!node.getAttribute('data-mce-fragment');\n };\n const canHaveChildren = (editor, node) => {\n return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n };\n const moveSelectionToMarker = (editor, marker) => {\n var _a, _b, _c;\n let nextRng;\n const dom = editor.dom;\n const selection = editor.selection;\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n dom.remove(marker);\n selection.select(parentEditableElm);\n return;\n }\n let rng = dom.createRng();\n const node = marker.previousSibling;\n if (isText$b(node)) {\n rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n const node2 = marker.nextSibling;\n if (isText$b(node2)) {\n node.appendData(node2.data);\n (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n const findNextCaretRng = rng => {\n let caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n };\n const parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n const isCell = isTableCell(parentBlock);\n empty(SugarElement.fromDom(parentBlock));\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isCell && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', isCell ? {} : { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n const deleteSelectedContent = editor => {\n const dom = editor.dom;\n const rng = normalize(editor.selection.getRng());\n editor.selection.setRng(rng);\n const startCell = dom.getParent(rng.startContainer, isTableCell);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else if (rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset === 1 && isText$b(rng.startContainer.childNodes[rng.startOffset])) {\n rng.deleteContents();\n } else {\n editor.getDoc().execCommand('Delete', false);\n }\n };\n const findMarkerNode = scope => {\n for (let markerNode = scope; markerNode; markerNode = markerNode.walk()) {\n if (markerNode.attr('id') === 'mce_marker') {\n return Optional.some(markerNode);\n }\n }\n return Optional.none();\n };\n const notHeadingsInSummary = (dom, node, fragment) => {\n var _a;\n return exists(fragment.children(), isHeading) && ((_a = dom.getParent(node, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName) === 'SUMMARY';\n };\n const insertHtmlAtCaret = (editor, value, details) => {\n var _a, _b;\n const selection = editor.selection;\n const dom = editor.dom;\n const parser = editor.parser;\n const merge = details.merge;\n const serializer = HtmlSerializer({ validate: true }, editor.schema);\n const bookmarkHtml = '';\n if (!details.preserve_zwsp) {\n value = trim$2(value);\n }\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n let rng = selection.getRng();\n const caretElement = rng.startContainer;\n const body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n deleteSelectedContent(editor);\n }\n const parentNode = selection.getNode();\n const parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n const fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n if (rng) {\n selection.setRng(rng);\n }\n return value;\n }\n if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n }\n markFragmentElements(fragment);\n let node = fragment.lastChild;\n if (node && node.attr('id') === 'mce_marker') {\n const marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.name === 'table') {\n break;\n }\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (node.parent && editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid && !notHeadingsInSummary(dom, parentNode, fragment)) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n editor.selection.setContent(bookmarkHtml);\n let parentNode = selection.getNode();\n let tempNode;\n const rootNode = editor.getBody();\n if (isDocument$1(parentNode)) {\n parentNode = tempNode = rootNode;\n } else {\n tempNode = parentNode;\n }\n while (tempNode && tempNode !== rootNode) {\n parentNode = tempNode;\n tempNode = tempNode.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n const root = parser.parse(value);\n const markerNode = findMarkerNode(root);\n const editingHost = markerNode.bind(findClosestEditingHost).getOr(root);\n markerNode.each(marker => marker.replace(fragment));\n const toExtract = fragment.children();\n const parent = (_b = fragment.parent) !== null && _b !== void 0 ? _b : root;\n fragment.unwrap();\n const invalidChildren = filter$5(toExtract, node => isInvalid(editor.schema, node, parent));\n cleanInvalidNodes(invalidChildren, editor.schema, editingHost);\n filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n value = serializer.serialize(root);\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(dom, selection.getStart(), editor.schema);\n updateCaret(editor.schema, editor.getBody(), selection.getStart());\n return value;\n };\n\n const isTreeNode = content => content instanceof AstNode;\n\n const moveSelection = editor => {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const setEditorHtml = (editor, html, noSelection) => {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n const setContentString = (editor, body, content, args) => {\n content = trim$2(content);\n if (content.length === 0 || /^\\s+$/.test(content)) {\n const padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n } else if (!content) {\n content = padd;\n }\n setEditorHtml(editor, content, args.no_selection);\n return {\n content,\n html: content\n };\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content: trimmedHtml,\n html: trimmedHtml\n };\n }\n };\n const setContentTree = (editor, body, content, args) => {\n filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n const trimmedHtml = trim$2(isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html));\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content,\n html: trimmedHtml\n };\n };\n const setContentInternal = (editor, content, args) => {\n return Optional.from(editor.getBody()).map(body => {\n if (isTreeNode(content)) {\n return setContentTree(editor, body, content, args);\n } else {\n return setContentString(editor, body, content, args);\n }\n }).getOr({\n content,\n html: isTreeNode(args.content) ? '' : args.content\n });\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$1 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n };\n\n const isEq$3 = isEq$5;\n const matchesUnInheritedFormatSelector = (ed, node, name) => {\n const formatList = ed.formatter.get(name);\n if (formatList) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n return true;\n }\n }\n }\n return false;\n };\n const matchParents = (editor, node, name, vars, similar) => {\n const root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n const matchedNode = editor.dom.getParent(node, elm => {\n if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n return true;\n }\n return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n });\n return !!matchNode(editor, matchedNode, name, vars, similar);\n };\n const matchName = (dom, node, format) => {\n if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n return true;\n }\n if (isBlockFormat(format) && isEq$3(node, format.block)) {\n return true;\n }\n if (isSelectorFormat(format)) {\n return isElement$6(node) && dom.is(node, format.selector);\n }\n return false;\n };\n const matchItems = (dom, node, format, itemName, similar, vars) => {\n const items = format[itemName];\n const matchAttributes = itemName === 'attributes';\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (!isArrayLike(items)) {\n for (const key in items) {\n if (has$2(items, key)) {\n const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n const expectedValue = replaceVars(items[key], vars);\n const isEmptyValue = isNullable(value) || isEmpty$3(value);\n if (isEmptyValue && isNullable(expectedValue)) {\n continue;\n }\n if (similar && isEmptyValue && !format.exact) {\n return false;\n }\n if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (let i = 0; i < items.length; i++) {\n if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n const matchNode = (ed, node, name, vars, similar) => {\n const formatList = ed.formatter.get(name);\n const dom = ed.dom;\n if (formatList && isElement$6(node)) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n const classes = format.classes;\n if (classes) {\n for (let x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n return undefined;\n };\n const match$2 = (editor, name, vars, node, similar) => {\n if (node) {\n return matchParents(editor, node, name, vars, similar);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars, similar)) {\n return true;\n }\n const startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars, similar)) {\n return true;\n }\n }\n return false;\n };\n const matchAll = (editor, names, vars) => {\n const matchedFormatNames = [];\n const checkedMap = {};\n const startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, node => {\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n const closest = (editor, names) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$1(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n };\n const canApply = (editor, name) => {\n const formatList = editor.formatter.get(name);\n const dom = editor.dom;\n if (formatList && editor.selection.isEditable()) {\n const startNode = editor.selection.getStart();\n const parents = getParents$2(dom, startNode);\n for (let x = formatList.length - 1; x >= 0; x--) {\n const format = formatList[x];\n if (!isSelectorFormat(format)) {\n return true;\n }\n for (let i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], format.selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n const matchSimilar = isVariableFormatName(editor, name);\n if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n return acc.concat([name]);\n } else {\n return acc;\n }\n }, []);\n\n const ZWSP = ZWSP$1;\n const importNode = (ownerDocument, node) => {\n return ownerDocument.importNode(node, true);\n };\n const findFirstTextNode = node => {\n if (node) {\n const walker = new DomTreeWalker(node, node);\n for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n if (isText$b(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const createCaretContainer = fill => {\n const caretContainer = SugarElement.fromTag('span');\n setAll$1(caretContainer, {\n 'id': CARET_ID,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append$1(caretContainer, SugarElement.fromText(ZWSP));\n }\n return caretContainer;\n };\n const trimZwspFromCaretContainer = caretContainerNode => {\n const textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.data.charAt(0) === ZWSP) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n const removeCaretContainerNode = (editor, node, moveCaret) => {\n const dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret, true);\n } else {\n const rng = selection.getRng();\n const block = dom.getParent(node, dom.isBlock);\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n const textNode = trimZwspFromCaretContainer(node);\n dom.remove(node, true);\n if (startContainer === textNode && startOffset > 0) {\n rng.setStart(textNode, startOffset - 1);\n }\n if (endContainer === textNode && endOffset > 0) {\n rng.setEnd(textNode, endOffset - 1);\n }\n if (block && dom.isEmpty(block)) {\n fillWithPaddingBr(SugarElement.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n const removeCaretContainer = (editor, node, moveCaret) => {\n const dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID)) {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n var _a, _b;\n const dom = editor.dom;\n const block = dom.getParent(formatNode, curry(isTextBlock$1, editor.schema));\n if (block && dom.isEmpty(block)) {\n (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n const appendNode = (parentNode, node) => {\n parentNode.appendChild(node);\n return node;\n };\n const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n var _a;\n const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n };\n const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n const formatter = editor.formatter;\n const dom = editor.dom;\n const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n if (uniqueFormats.length > 0) {\n const clonedFormatNode = formatNode.cloneNode(false);\n dom.add(caretContainer, clonedFormatNode);\n formatter.remove(name, vars, clonedFormatNode, similar);\n dom.remove(clonedFormatNode);\n return Optional.some(clonedFormatNode);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbsps = node => set(node, get$3(node).replace(new RegExp(`${ nbsp }$`), ' '));\n const normalizeNbspsBetween = (editor, caretContainer) => {\n const handler = () => {\n if (caretContainer !== null && !editor.dom.isEmpty(caretContainer)) {\n prevSibling(SugarElement.fromDom(caretContainer)).each(node => {\n if (isText$c(node)) {\n normalizeNbsps(node);\n } else {\n descendant$2(node, e => isText$c(e)).each(textNode => {\n if (isText$c(textNode)) {\n normalizeNbsps(textNode);\n }\n });\n }\n });\n }\n };\n editor.once('input', e => {\n if (e.data && !isWhiteSpace(e.data)) {\n if (!e.isComposing) {\n handler();\n } else {\n editor.once('compositionend', () => {\n handler();\n });\n }\n }\n });\n };\n const applyCaretFormat = (editor, name, vars) => {\n let caretContainer;\n const selection = editor.selection;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const selectionRng = selection.getRng();\n let offset = selectionRng.startOffset;\n const container = selectionRng.startContainer;\n const text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n const bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n let rng = expandRng(editor.dom, selectionRng, formatList);\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== ZWSP) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n normalizeNbspsBetween(editor, caretContainer);\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n const removeCaretFormat = (editor, name, vars, similar) => {\n const dom = editor.dom;\n const selection = editor.selection;\n let hasContentAfter = false;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n let node = container;\n if (isText$b(container)) {\n if (offset !== container.data.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n const parents = [];\n let formatNode;\n while (node) {\n if (matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n const bookmark = selection.getBookmark();\n rng.collapse(true);\n let expandedRng = expandRng(dom, rng, formatList, true);\n expandedRng = split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n const parentsAfter = isNonNullable(caretContainer) ? dom.getParents(formatNode.parentNode, always, caretContainer) : [];\n const newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n const caretTextNode = insertFormatNodesIntoCaretContainer([\n ...parents,\n ...cleanedFormatNode.toArray(),\n ...parentsAfter\n ], newCaretContainer);\n if (caretContainer) {\n removeCaretContainerNode(editor, caretContainer, isNonNullable(caretContainer));\n }\n selection.setCursorLocation(caretTextNode, 1);\n normalizeNbspsBetween(editor, newCaretContainer);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n const disableCaretContainer = (editor, keyCode, moveCaret) => {\n const selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, moveCaret);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n };\n const endsWithNbsp = element => isText$b(element) && endsWith(element.data, nbsp);\n const setup$v = editor => {\n editor.on('mouseup keydown', e => {\n disableCaretContainer(editor, e.keyCode, endsWithNbsp(editor.selection.getRng().endContainer));\n });\n };\n const createCaretFormat = formatNodes => {\n const caretContainer = createCaretContainer(false);\n const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n return {\n caretContainer,\n caretPosition: CaretPosition(innerMost, 0)\n };\n };\n const replaceWithCaretFormat = (targetNode, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n before$3(SugarElement.fromDom(targetNode), caretContainer);\n remove$4(SugarElement.fromDom(targetNode));\n return caretPosition;\n };\n const createCaretFormatAtStart$1 = (rng, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n rng.insertNode(caretContainer.dom);\n return caretPosition;\n };\n const isFormatElement = (editor, element) => {\n if (isCaretNode(element.dom)) {\n return false;\n }\n const inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$1(element.dom);\n };\n\n const postProcessHooks = {};\n const isPre = matchNodeNames(['pre']);\n const addPostProcessHook = (name, hook) => {\n const hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n const postProcess$1 = (name, editor) => {\n if (has$2(postProcessHooks, name)) {\n each$e(postProcessHooks[name], hook => {\n hook(editor);\n });\n }\n };\n addPostProcessHook('pre', editor => {\n const rng = editor.selection.getRng();\n const hasPreSibling = blocks => pre => {\n const prev = pre.previousSibling;\n return isPre(prev) && contains$2(blocks, prev);\n };\n const joinPre = (pre1, pre2) => {\n const sPre2 = SugarElement.fromDom(pre2);\n const doc = documentOrOwner(sPre2).dom;\n remove$4(sPre2);\n append(SugarElement.fromDom(pre1), [\n SugarElement.fromTag('br', doc),\n SugarElement.fromTag('br', doc),\n ...children$1(sPre2)\n ]);\n };\n if (!rng.collapsed) {\n const blocks = editor.selection.getSelectedBlocks();\n const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n each$e(preBlocks, pre => {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n const listItemStyles = [\n 'fontWeight',\n 'fontStyle',\n 'color',\n 'fontSize',\n 'fontFamily'\n ];\n const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n const getExpandedListItemFormat = (formatter, format) => {\n const formatList = formatter.get(format);\n return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n };\n const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n const isRngEndAtEndOfElement = (rng, elm) => {\n return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n };\n const isEditableListItem = dom => elm => isListItem$2(elm) && dom.isEditable(elm);\n const getFullySelectedBlocks = selection => {\n const blocks = selection.getSelectedBlocks();\n const rng = selection.getRng();\n if (selection.isCollapsed()) {\n return [];\n }\n if (blocks.length === 1) {\n return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n } else {\n const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n const last = last$2(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n const middle = blocks.slice(1, -1);\n return first.concat(middle).concat(last);\n }\n };\n const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n const each$8 = Tools.each;\n const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$1(node);\n const findElementSibling = (node, siblingName) => {\n for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$b(sibling) && isNotEmpty(sibling.data)) {\n return node;\n }\n if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n const mergeSiblingsNodes = (editor, prev, next) => {\n const elementUtils = ElementUtils(editor);\n const isPrevEditable = isHTMLElement(prev) && editor.dom.isEditable(prev);\n const isNextEditable = isHTMLElement(next) && editor.dom.isEditable(next);\n if (isPrevEditable && isNextEditable) {\n const prevSibling = findElementSibling(prev, 'previousSibling');\n const nextSibling = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prevSibling, nextSibling)) {\n for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n const tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prevSibling.appendChild(tmpSibling);\n }\n editor.dom.remove(nextSibling);\n Tools.each(Tools.grep(nextSibling.childNodes), node => {\n prevSibling.appendChild(node);\n });\n return prevSibling;\n }\n }\n return next;\n };\n const mergeSiblings = (editor, format, vars, node) => {\n var _a;\n if (node && format.merge_siblings !== false) {\n const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n const clearChildStyles = (dom, format, node) => {\n if (format.clear_child_styles) {\n const selector = format.links ? '*:not(a)' : '*';\n each$8(dom.select(selector, node), childNode => {\n if (isElementNode(childNode) && dom.isEditable(childNode)) {\n each$8(format.styles, (_value, name) => {\n dom.setStyle(childNode, name, '');\n });\n }\n });\n }\n };\n const processChildElements = (node, filter, process) => {\n each$8(node.childNodes, node => {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n const unwrapEmptySpan = (dom, node) => {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n const applyStyle = (dom, name, value) => node => {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n\n const removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n const MCE_ATTR_RE = /^(src|href|style)$/;\n const each$7 = Tools.each;\n const isEq$2 = isEq$5;\n const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n const getContainer = (ed, rng, start) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$6(container)) {\n const lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$b(container) && start && offset >= container.data.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$b(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n const normalizeTableSelection = (node, start) => {\n const prop = start ? 'firstChild' : 'lastChild';\n const childNode = node[prop];\n if (isTableCellOrRow(node) && childNode) {\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n const wrap$1 = (dom, node, name, attrs) => {\n var _a;\n const wrapper = dom.create(name, attrs);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n const wrapWithSiblings = (dom, node, next, name, attrs) => {\n const start = SugarElement.fromDom(node);\n const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n const siblings = next ? nextSiblings(start) : prevSiblings(start);\n append(wrapper, siblings);\n if (next) {\n before$3(start, wrapper);\n prepend(wrapper, start);\n } else {\n after$4(start, wrapper);\n append$1(wrapper, start);\n }\n return wrapper.dom;\n };\n const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n const removeNode = (ed, node, format) => {\n const parentNode = node.parentNode;\n let rootBlockElm;\n const dom = ed.dom;\n const forcedRootBlock = getForcedRootBlock(ed);\n if (isBlockFormat(format)) {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$2(node, format.list_block)) {\n each$e(from(node.childNodes), node => {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = null;\n }\n });\n }\n }\n }\n if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n const processFormatAttrOrStyle = (name, value, vars) => {\n if (isNumber(name)) {\n return {\n name: value,\n value: null\n };\n } else {\n return {\n name,\n value: replaceVars(value, vars)\n };\n }\n };\n const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n if (dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n };\n const removeStyles = (dom, elm, format, vars, compareNode) => {\n let stylesModified = false;\n each$7(format.styles, (value, name) => {\n const {\n name: styleName,\n value: styleValue\n } = processFormatAttrOrStyle(name, value, vars);\n const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n dom.setStyle(elm, styleName, '');\n }\n stylesModified = true;\n });\n if (stylesModified) {\n removeEmptyStyleAttributeIfNeeded(dom, elm);\n }\n };\n const removeListStyleFormats = (editor, name, vars) => {\n if (name === 'removeformat') {\n each$e(getPartiallySelectedListItems(editor.selection), li => {\n each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n });\n } else {\n getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n });\n }\n };\n const removeNodeFormatInternal = (ed, format, vars, node, compareNode) => {\n const dom = ed.dom;\n const elementUtils = ElementUtils(ed);\n const schema = ed.schema;\n if (isInlineFormat(format) && isTransparentElementName(schema, format.inline) && isTransparentBlock(schema, node) && node.parentElement === ed.getBody()) {\n removeNode(ed, node, format);\n return removeResult.removed();\n }\n if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n return removeResult.keep();\n }\n if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n const elm = node;\n const preserveAttributes = format.preserve_attributes;\n if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n dom.removeAllAttribs(elm);\n each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n removeStyles(dom, elm, format, vars, compareNode);\n each$7(format.attributes, (value, name) => {\n const {\n name: attrName,\n value: attrValue\n } = processFormatAttrOrStyle(name, value, vars);\n if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n if (attrName === 'class') {\n const currentValue = dom.getAttrib(elm, attrName);\n if (currentValue) {\n let valueOut = '';\n each$e(currentValue.split(/\\s+/), cls => {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, attrName, valueOut);\n return;\n }\n }\n }\n if (MCE_ATTR_RE.test(attrName)) {\n elm.removeAttribute('data-mce-' + attrName);\n }\n if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(attrName);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (attrName === 'class') {\n elm.removeAttribute('className');\n }\n elm.removeAttribute(attrName);\n }\n });\n each$7(format.classes, value => {\n value = replaceVars(value, vars);\n if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n const attrs = dom.getAttribs(elm);\n for (let i = 0; i < attrs.length; i++) {\n const attrName = attrs[i].nodeName;\n if (!elementUtils.isAttributeInternal(attrName)) {\n return removeResult.keep();\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode(ed, elm, format);\n return removeResult.removed();\n }\n return removeResult.keep();\n };\n const findFormatRoot = (editor, container, name, vars, similar) => {\n let formatRoot;\n if (container.parentNode) {\n each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n const format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n }\n return formatRoot;\n };\n const removeNodeFormatFromClone = (editor, format, vars, clone) => removeNodeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n const fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n var _a, _b;\n let lastClone;\n let firstClone;\n const dom = editor.dom;\n if (formatRoot) {\n const formatRootParent = formatRoot.parentNode;\n for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n let clone = dom.clone(parent, false);\n for (let i = 0; i < formatList.length; i++) {\n clone = removeNodeFormatFromClone(editor, formatList[i], vars, clone);\n if (clone === null) {\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n }\n if (lastClone && firstClone) {\n (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (isInlineFormat(format)) {\n mergeSiblings(editor, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n const removeFormatInternal = (ed, name, vars, node, similar) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const dom = ed.dom;\n const selection = ed.selection;\n const splitToFormatRoot = container => {\n const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n const removeFormatOnNode = node => exists(formatList, fmt => removeNodeFormat(ed, fmt, vars, node, node));\n const process = node => {\n const children = from(node.childNodes);\n const removed = removeFormatOnNode(node);\n const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n const parentNode = node.parentNode;\n if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n removeFormatOnNode(parentNode);\n }\n if (format.deep) {\n if (children.length) {\n for (let i = 0; i < children.length; i++) {\n process(children[i]);\n }\n }\n }\n const textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each$e(textDecorations, decoration => {\n if (isElement$6(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeNodeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, undefined, node);\n }\n });\n };\n const unwrap = start => {\n const node = dom.get(start ? '_start' : '_end');\n if (node) {\n let out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$b(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n } else {\n return null;\n }\n };\n const removeRngStyle = rng => {\n let startContainer;\n let endContainer;\n let expandedRng = expandRng(dom, rng, formatList, rng.collapsed);\n if (format.split) {\n expandedRng = split(expandedRng);\n startContainer = getContainer(ed, expandedRng, true);\n endContainer = getContainer(ed, expandedRng);\n if (startContainer !== endContainer) {\n startContainer = normalizeTableSelection(startContainer, true);\n endContainer = normalizeTableSelection(endContainer, false);\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$1(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$1(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n const newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$3(dom, newRng, nodes => {\n each$e(nodes, n => {\n if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n splitToFormatRoot(n);\n }\n });\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n expandedRng.startOffset = dom.nodeIndex(startContainer);\n expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n walk$3(dom, expandedRng, nodes => {\n each$e(nodes, process);\n });\n };\n if (node) {\n if (isNode(node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n fireFormatRemove(ed, name, node, vars);\n return;\n }\n if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n removeListStyleFormats(ed, name, vars);\n fireFormatRemove(ed, name, node, vars);\n };\n const removeFormat$1 = (ed, name, vars, node, similar) => {\n if (node || ed.selection.isEditable()) {\n removeFormatInternal(ed, name, vars, node, similar);\n }\n };\n const removeNodeFormat = (editor, format, vars, node, compareNode) => {\n return removeNodeFormatInternal(editor, format, vars, node, compareNode).fold(never, newName => {\n editor.dom.rename(node, newName);\n return true;\n }, always);\n };\n\n const each$6 = Tools.each;\n const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n const processTextDecorationsAndColor = n => {\n if (isHTMLElement(n) && isElement$6(n.parentNode) && dom.isEditable(n)) {\n const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', parentTextDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', null);\n }\n }\n };\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n processTextDecorationsAndColor(node);\n }\n };\n const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n if (format.styles && format.styles.backgroundColor) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n const mergeSubSup = (dom, format, vars, node) => {\n if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'fontSize', ''));\n const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), dom.isEditable);\n dom.remove(inverseTagDescendants, true);\n }\n };\n const mergeWithChildren = (editor, formatList, vars, node) => {\n each$6(formatList, format => {\n if (isInlineFormat(format)) {\n each$6(editor.dom.select(format.inline, node), child => {\n if (isElementNode(child)) {\n removeNodeFormat(editor, format, vars, child, format.exact ? child : null);\n }\n });\n }\n clearChildStyles(editor.dom, format, node);\n });\n };\n const mergeWithParents = (editor, format, name, vars, node) => {\n const parentNode = node.parentNode;\n if (matchNode(editor, parentNode, name, vars)) {\n if (removeNodeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents && parentNode) {\n editor.dom.getParent(parentNode, parent => {\n if (matchNode(editor, parent, name, vars)) {\n removeNodeFormat(editor, format, vars, node);\n return true;\n } else {\n return false;\n }\n });\n }\n };\n\n const each$5 = Tools.each;\n const canFormatBR = (editor, format, node, parentName) => {\n if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n const validBRParentElements = getTextRootBlockElements(editor.schema);\n const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n return hasNonNullableKey(validBRParentElements, parentName) && isEmptyNode(editor.schema, node.parentNode, {\n skipBogus: false,\n includeZwsp: true\n }) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n const applyStyles = (dom, elm, format, vars) => {\n each$5(format.styles, (value, name) => {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (format.styles) {\n const styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n };\n const applyFormatAction = (ed, name, vars, node) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const isCollapsed = !node && ed.selection.isCollapsed();\n const dom = ed.dom;\n const selection = ed.selection;\n const setElementFormat = (elm, fmt = format) => {\n if (isFunction(fmt.onformat)) {\n fmt.onformat(elm, fmt, vars, node);\n }\n applyStyles(dom, elm, fmt, vars);\n each$5(fmt.attributes, (value, name) => {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$5(fmt.classes, value => {\n const newValue = replaceVars(value, vars);\n if (!dom.hasClass(elm, newValue)) {\n dom.addClass(elm, newValue);\n }\n });\n };\n const applyNodeStyle = (formatList, node) => {\n let found = false;\n each$5(formatList, format => {\n if (!isSelectorFormat(format)) {\n return false;\n }\n if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n return true;\n }\n if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n return true;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n return true;\n });\n return found;\n };\n const createWrapElement = wrapName => {\n if (isString(wrapName)) {\n const wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n return wrapElm;\n } else {\n return null;\n }\n };\n const applyRngStyle = (dom, rng, nodeSpecific) => {\n const newWrappers = [];\n let contentEditable = true;\n const wrapName = format.inline || format.block;\n const wrapElm = createWrapElement(wrapName);\n const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n const canRenameBlock = (node, parentName, isEditableDescendant) => {\n const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed.schema, node) && isValid(ed, parentName, wrapName);\n return isEditableDescendant && isValidBlockFormatForNode;\n };\n const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n const nodeName = node.nodeName.toLowerCase();\n const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n const isZwsp$1 = !nodeSpecific && isText$b(node) && isZwsp(node.data);\n const isCaret = isCaretNode(node);\n const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp$1 && !isCaret && isCorrectFormatForNode;\n };\n walk$3(dom, rng, nodes => {\n let currentWrapElm;\n const process = node => {\n let hasContentEditableState = false;\n let lastContentEditable = contentEditable;\n let isWrappableNoneditableElm = false;\n const parentNode = node.parentNode;\n const parentName = parentNode.nodeName.toLowerCase();\n const contentEditableValue = dom.getContentEditable(node);\n if (isNonNullable(contentEditableValue)) {\n lastContentEditable = contentEditable;\n contentEditable = contentEditableValue === 'true';\n hasContentEditableState = true;\n isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n }\n const isEditableDescendant = contentEditable && !hasContentEditableState;\n if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (isMatchingWrappingBlock(node)) {\n currentWrapElm = null;\n return;\n }\n if (canRenameBlock(node, parentName, isEditableDescendant)) {\n const elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n let found = applyNodeStyle(formatList, node);\n if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n found = applyNodeStyle(formatList, parentNode);\n }\n if (!isInlineFormat(format) || found) {\n currentWrapElm = null;\n return;\n }\n }\n if (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n if (isWrappableNoneditableElm && hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$e(from(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$e(nodes, process);\n });\n if (format.links === true) {\n each$e(newWrappers, node => {\n const process = node => {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$e(from(node.childNodes), process);\n };\n process(node);\n });\n }\n each$e(newWrappers, node => {\n const getChildCount = node => {\n let count = 0;\n each$e(node.childNodes, node => {\n if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n const mergeStyles = node => {\n const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n return childElement.map(child => {\n const clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n return clone;\n }).getOr(node);\n };\n const childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n mergeWithChildren(ed, formatList, vars, node);\n mergeWithParents(ed, format, name, vars, node);\n mergeBackgroundColorAndFontSize(dom, format, vars, node);\n mergeTextDecorationsAndColor(dom, format, vars, node);\n mergeSubSup(dom, format, vars, node);\n mergeSiblings(ed, format, vars, node);\n }\n });\n };\n const targetNode = isNode(node) ? node : selection.getNode();\n if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n node = targetNode;\n applyNodeStyle(formatList, node);\n fireFormatApply(ed, name, node, vars);\n return;\n }\n if (format) {\n if (node) {\n if (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(dom, rng, formatList), true);\n }\n } else {\n applyRngStyle(dom, node, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n selection.setRng(normalize(selection.getRng()));\n preserveSelection(ed, () => {\n runOnRanges(ed, (selectionRng, fake) => {\n const expandedRng = fake ? selectionRng : expandRng(dom, selectionRng, formatList);\n applyRngStyle(dom, expandedRng, false);\n });\n }, always);\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n });\n }\n postProcess$1(name, ed);\n }\n fireFormatApply(ed, name, node, vars);\n };\n const applyFormat$1 = (editor, name, vars, node) => {\n if (node || editor.selection.isEditable()) {\n applyFormatAction(editor, name, vars, node);\n }\n };\n\n const hasVars = value => has$2(value, 'vars');\n const setup$u = (registeredFormatListeners, editor) => {\n registeredFormatListeners.set({});\n editor.on('NodeChange', e => {\n updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n });\n editor.on('FormatApply FormatRemove', e => {\n const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n });\n };\n const fallbackElement = editor => editor.selection.getStart();\n const matchingNode = (editor, parents, format, similar, vars) => {\n const isMatchingNode = node => {\n const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n return !isUndefined(matchingFormat);\n };\n const isUnableToMatch = node => {\n if (matchesUnInheritedFormatSelector(editor, node, format)) {\n return true;\n } else {\n if (!similar) {\n return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n } else {\n return false;\n }\n }\n };\n return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n };\n const getParents = (editor, elm) => {\n const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$1(node));\n };\n const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n const parents = getParents(editor, elm);\n each$d(registeredCallbacks, (data, format) => {\n const runIfChanged = spec => {\n const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n const isSet = match.isSome();\n if (spec.state.get() !== isSet) {\n spec.state.set(isSet);\n const node = match.getOr(elm);\n if (hasVars(spec)) {\n spec.callback(isSet, {\n node,\n format,\n parents\n });\n } else {\n each$e(spec.callbacks, callback => callback(isSet, {\n node,\n format,\n parents\n }));\n }\n }\n };\n each$e([\n data.withSimilar,\n data.withoutSimilar\n ], runIfChanged);\n each$e(data.withVars, runIfChanged);\n });\n };\n const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => {\n const group = get$a(formatChangeItems, format).getOrThunk(() => {\n const base = {\n withSimilar: {\n state: Cell(false),\n similar: true,\n callbacks: []\n },\n withoutSimilar: {\n state: Cell(false),\n similar: false,\n callbacks: []\n },\n withVars: []\n };\n formatChangeItems[format] = base;\n return base;\n });\n const getCurrent = () => {\n const parents = getParents(editor);\n return matchingNode(editor, parents, format, similar, vars).isSome();\n };\n if (isUndefined(vars)) {\n const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n toAppendTo.callbacks.push(callback);\n if (toAppendTo.callbacks.length === 1) {\n toAppendTo.state.set(getCurrent());\n }\n } else {\n group.withVars.push({\n state: Cell(getCurrent()),\n similar,\n vars,\n callback\n });\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n const removeListeners = (registeredFormatListeners, formats, callback) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n formatChangeItems[format] = {\n withSimilar: {\n ...group.withSimilar,\n callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n },\n withoutSimilar: {\n ...group.withoutSimilar,\n callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n },\n withVars: filter$5(group.withVars, item => item.callback !== callback)\n };\n }));\n registeredFormatListeners.set(formatChangeItems);\n };\n const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n };\n\n const toggle = (editor, name, vars, node) => {\n const fmt = editor.formatter.get(name);\n if (fmt) {\n if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n removeFormat$1(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n }\n };\n\n const explode$1 = Tools.explode;\n const create$8 = () => {\n const filters = {};\n const addFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (!has$2(filters, name)) {\n filters[name] = {\n name,\n callbacks: []\n };\n }\n filters[name].callbacks.push(callback);\n });\n };\n const getFilters = () => values(filters);\n const removeFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (has$2(filters, name)) {\n if (isNonNullable(callback)) {\n const filter = filters[name];\n const newCallbacks = filter$5(filter.callbacks, c => c !== callback);\n if (newCallbacks.length > 0) {\n filter.callbacks = newCallbacks;\n } else {\n delete filters[name];\n }\n } else {\n delete filters[name];\n }\n }\n });\n };\n return {\n addFilter,\n getFilters,\n removeFilter\n };\n };\n\n const removeAttrs = (node, names) => {\n each$e(names, name => {\n node.attr(name, null);\n });\n };\n const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n domParser.addNodeFilter('font', nodes => {\n each$e(nodes, node => {\n const props = styles.parse(node.attr('style'));\n const color = node.attr('color');\n const face = node.attr('face');\n const size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n toInt(size).each(num => {\n props['font-size'] = fontSizes[num - 1];\n });\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n const addStrikeFilter = (domParser, schema, styles) => {\n domParser.addNodeFilter('strike', nodes => {\n const convertToSTag = schema.type !== 'html4';\n each$e(nodes, node => {\n if (convertToSTag) {\n node.name = 's';\n } else {\n const props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n }\n });\n });\n };\n const addFilters = (domParser, settings, schema) => {\n var _a;\n const styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode((_a = settings.font_size_legacy_values) !== null && _a !== void 0 ? _a : ''));\n }\n addStrikeFilter(domParser, schema, styles);\n };\n const register$5 = (domParser, settings, schema) => {\n if (settings.inline_styles) {\n addFilters(domParser, settings, schema);\n }\n };\n\n const blobUriToBlob = url => fetch(url).then(res => res.ok ? res.blob() : Promise.reject()).catch(() => Promise.reject({\n message: `Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`,\n uriType: 'blob'\n }));\n const extractBase64Data = data => {\n const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n return matches ? matches[1] : '';\n };\n const parseDataUri = uri => {\n const [type, ...rest] = uri.split(',');\n const data = rest.join(',');\n const matches = /data:([^/]+\\/[^;]+)(;.+)?/.exec(type);\n if (matches) {\n const base64Encoded = matches[2] === ';base64';\n const extractedData = base64Encoded ? extractBase64Data(data) : decodeURIComponent(data);\n return Optional.some({\n type: matches[1],\n data: extractedData,\n base64Encoded\n });\n } else {\n return Optional.none();\n }\n };\n const buildBlob = (type, data, base64Encoded = true) => {\n let str = data;\n if (base64Encoded) {\n try {\n str = atob(data);\n } catch (e) {\n return Optional.none();\n }\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type }));\n };\n const dataUriToBlob = uri => {\n return new Promise((resolve, reject) => {\n parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n });\n };\n const uriToBlob = url => {\n if (startsWith(url, 'blob:')) {\n return blobUriToBlob(url);\n } else if (startsWith(url, 'data:')) {\n return dataUriToBlob(url);\n } else {\n return Promise.reject('Unknown URI format');\n }\n };\n const blobToDataUri = blob => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = () => {\n var _a;\n reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n let count$1 = 0;\n const uniqueId$1 = prefix => {\n return (prefix || 'blobid') + count$1++;\n };\n const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n if (base64Only && !base64Encoded) {\n return Optional.none();\n } else {\n const base64 = base64Encoded ? data : btoa(data);\n return generateBlobInfo(base64, type);\n }\n });\n };\n const createBlobInfo$1 = (blobCache, blob, base64) => {\n const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n };\n const imageToBlobInfo = (blobCache, imageSrc) => {\n const invalidDataUri = () => Promise.reject('Invalid data URI');\n if (startsWith(imageSrc, 'blob:')) {\n const blobInfo = blobCache.getByUri(imageSrc);\n if (isNonNullable(blobInfo)) {\n return Promise.resolve(blobInfo);\n } else {\n return uriToBlob(imageSrc).then(blob => {\n return blobToDataUri(blob).then(dataUri => {\n return processDataUri(dataUri, false, base64 => {\n return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n }).getOrThunk(invalidDataUri);\n });\n });\n }\n } else if (startsWith(imageSrc, 'data:')) {\n return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n } else {\n return Promise.reject('Unknown image data format');\n }\n };\n\n const hostCaptureRegex = /^(?:(?:(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)([A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*))(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?)$/;\n const extractHost = url => Optional.from(url.match(hostCaptureRegex)).bind(ms => get$b(ms, 1)).map(h => startsWith(h, 'www.') ? h.substring(4) : h);\n\n const sandboxIframe = (iframeNode, exclusions) => {\n if (Optional.from(iframeNode.attr('src')).bind(extractHost).forall(host => !contains$2(exclusions, host))) {\n iframeNode.attr('sandbox', '');\n }\n };\n const isMimeType = (mime, type) => startsWith(mime, `${ type }/`);\n const getEmbedType = type => {\n if (isUndefined(type)) {\n return 'iframe';\n } else if (isMimeType(type, 'image')) {\n return 'img';\n } else if (isMimeType(type, 'video')) {\n return 'video';\n } else if (isMimeType(type, 'audio')) {\n return 'audio';\n } else {\n return 'iframe';\n }\n };\n const createSafeEmbed = ({type, src, width, height} = {}, sandboxIframes, sandboxIframesExclusions) => {\n const name = getEmbedType(type);\n const embed = new AstNode(name, 1);\n embed.attr(name === 'audio' ? { src } : {\n src,\n width,\n height\n });\n if (name === 'audio' || name === 'video') {\n embed.attr('controls', '');\n }\n if (name === 'iframe' && sandboxIframes) {\n sandboxIframe(embed, sandboxIframesExclusions);\n }\n return embed;\n };\n\n const isBogusImage = img => isNonNullable(img.attr('data-mce-bogus'));\n const isInternalImageSource = img => img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n const registerBase64ImageFilter = (parser, settings) => {\n const {blob_cache: blobCache} = settings;\n if (blobCache) {\n const processImage = img => {\n const inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img) || isNullable(inputSrc)) {\n return;\n }\n dataUriToBlobInfo(blobCache, inputSrc, true).each(blobInfo => {\n img.attr('src', blobInfo.blobUri());\n });\n };\n parser.addAttributeFilter('src', nodes => each$e(nodes, processImage));\n }\n };\n const register$4 = (parser, settings) => {\n var _a, _b;\n const schema = parser.schema;\n parser.addAttributeFilter('href', nodes => {\n let i = nodes.length;\n const appendRel = rel => {\n const parts = rel.split(' ').filter(p => p.length > 0);\n return parts.concat(['noopener']).sort().join(' ');\n };\n const addNoOpener = rel => {\n const newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n const node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', nodes => {\n let i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n while (sibling && parent) {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n }\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', nodes => {\n let i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode && (parentNode.name === 'ul' || parentNode.name === 'ol')) {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n const li = new AstNode('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n const validClasses = schema.getValidClasses();\n if (settings.validate && validClasses) {\n parser.addAttributeFilter('class', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const clazz = (_a = node.attr('class')) !== null && _a !== void 0 ? _a : '';\n const classList = Tools.explode(clazz, ' ');\n let classValue = '';\n for (let ci = 0; ci < classList.length; ci++) {\n const className = classList[ci];\n let valid = false;\n let validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n registerBase64ImageFilter(parser, settings);\n const shouldSandboxIframes = (_a = settings.sandbox_iframes) !== null && _a !== void 0 ? _a : false;\n const sandboxIframesExclusions = unique$1((_b = settings.sandbox_iframes_exclusions) !== null && _b !== void 0 ? _b : []);\n if (settings.convert_unsafe_embeds) {\n parser.addNodeFilter('object,embed', nodes => each$e(nodes, node => {\n node.replace(createSafeEmbed({\n type: node.attr('type'),\n src: node.name === 'object' ? node.attr('data') : node.attr('src'),\n width: node.attr('width'),\n height: node.attr('height')\n }, shouldSandboxIframes, sandboxIframesExclusions));\n }));\n }\n if (shouldSandboxIframes) {\n parser.addNodeFilter('iframe', nodes => each$e(nodes, node => sandboxIframe(node, sandboxIframesExclusions)));\n }\n };\n\n /*! @license DOMPurify 3.1.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.7/LICENSE */\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create: create$7\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n\n /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n\n /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n\n /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n\n /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\n function clone(object) {\n const newObject = create$7(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.7';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create$7(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n const initValue = value;\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n const each$4 = Tools.each, trim = Tools.trim;\n const queryParts = [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ];\n const DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n const safeSvgDataUrlElements = [\n 'img',\n 'video'\n ];\n const blockSvgDataUris = (allowSvgDataUrls, tagName) => {\n if (isNonNullable(allowSvgDataUrls)) {\n return !allowSvgDataUrls;\n } else {\n return isNonNullable(tagName) ? !contains$2(safeSvgDataUrlElements, tagName) : true;\n }\n };\n const decodeUri = encodedUri => {\n try {\n return decodeURIComponent(encodedUri);\n } catch (ex) {\n return unescape(encodedUri);\n }\n };\n const isInvalidUri = (settings, uri, tagName) => {\n const decodedUri = decodeUri(uri).replace(/\\s/g, '');\n if (settings.allow_script_urls) {\n return false;\n } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n return true;\n } else if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(decodedUri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n } else {\n return /^data:/i.test(decodedUri);\n }\n };\n class URI {\n static parseDataUri(uri) {\n let type;\n const uriComponents = decodeURIComponent(uri).split(',');\n const matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type,\n data: uriComponents[1]\n };\n }\n static isDomSafe(uri, context, options = {}) {\n if (options.allow_script_urls) {\n return true;\n } else {\n const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n return !isInvalidUri(options, decodedUri, context);\n }\n }\n static getDocumentBaseUrl(loc) {\n var _a;\n let baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = (_a = loc.href) !== null && _a !== void 0 ? _a : '';\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n }\n constructor(url, settings = {}) {\n this.path = '';\n this.directory = '';\n url = trim(url);\n this.settings = settings;\n const baseUri = settings.base_uri;\n const self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n const isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n const baseUrl = baseUri ? baseUri.path : new URI(document.location.href).directory;\n if ((baseUri === null || baseUri === void 0 ? void 0 : baseUri.protocol) === '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n const match = /([^#?]*)([#?]?.*)/.exec(url);\n if (match) {\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n if (urlMatch) {\n each$4(queryParts, (v, i) => {\n let part = urlMatch[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n }\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n }\n setPath(path) {\n const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n if (pathMatch) {\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n }\n this.source = '';\n this.getURI();\n }\n toRelative(uri) {\n if (uri === './') {\n return uri;\n }\n const relativeUri = new URI(uri, { base_uri: this });\n if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n return relativeUri.getURI();\n }\n const tu = this.getURI(), uu = relativeUri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n let output = this.toRelPath(this.path, relativeUri.path);\n if (relativeUri.query) {\n output += '?' + relativeUri.query;\n }\n if (relativeUri.anchor) {\n output += '#' + relativeUri.anchor;\n }\n return output;\n }\n toAbsolute(uri, noHost) {\n const absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n }\n isSameOrigin(uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n const defaultPort = this.protocol ? DEFAULT_PORTS[this.protocol] : null;\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n }\n toRelPath(base, path) {\n let breakPoint = 0, out = '', i, l;\n const normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n const items = path.split('/');\n if (normalizedBase.length >= items.length) {\n for (i = 0, l = normalizedBase.length; i < l; i++) {\n if (i >= items.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (normalizedBase.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n }\n toAbsPath(base, path) {\n let nb = 0;\n const tr = /\\/$/.test(path) ? '/' : '';\n const normalizedBase = base.split('/');\n const normalizedPath = path.split('/');\n const baseParts = [];\n each$4(normalizedBase, k => {\n if (k) {\n baseParts.push(k);\n }\n });\n const pathParts = [];\n for (let i = normalizedPath.length - 1; i >= 0; i--) {\n if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n continue;\n }\n if (normalizedPath[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n pathParts.push(normalizedPath[i]);\n }\n const i = baseParts.length - nb;\n let outPath;\n if (i <= 0) {\n outPath = reverse(pathParts).join('/');\n } else {\n outPath = baseParts.slice(0, i).join('/') + '/' + reverse(pathParts).join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n }\n getURI(noProtoHost = false) {\n let s;\n if (!this.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (this.protocol) {\n s += this.protocol + '://';\n } else {\n s += '//';\n }\n if (this.userInfo) {\n s += this.userInfo + '@';\n }\n if (this.host) {\n s += this.host;\n }\n if (this.port) {\n s += ':' + this.port;\n }\n }\n if (this.path) {\n s += this.path;\n }\n if (this.query) {\n s += '?' + this.query;\n }\n if (this.anchor) {\n s += '#' + this.anchor;\n }\n this.source = s;\n }\n return this.source;\n }\n }\n\n const filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n const internalElementAttr = 'data-mce-type';\n let uid = 0;\n const processNode = (node, settings, schema, scope, evt) => {\n var _a, _b, _c, _d;\n const validate = settings.validate;\n const specialElements = schema.getSpecialElements();\n if (node.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n node.nodeValue = ' ' + node.nodeValue;\n }\n const lcTagName = (_b = evt === null || evt === void 0 ? void 0 : evt.tagName) !== null && _b !== void 0 ? _b : node.nodeName.toLowerCase();\n if (scope !== 'html' && schema.isValid(scope)) {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n return;\n }\n if (node.nodeType !== ELEMENT || lcTagName === 'body') {\n return;\n }\n const element = SugarElement.fromDom(node);\n const isInternalElement = has$1(element, internalElementAttr);\n const bogus = get$9(element, 'data-mce-bogus');\n if (!isInternalElement && isString(bogus)) {\n if (bogus === 'all') {\n remove$4(element);\n } else {\n unwrap(element);\n }\n return;\n }\n const rule = schema.getElementRule(lcTagName);\n if (validate && !rule) {\n if (has$2(specialElements, lcTagName)) {\n remove$4(element);\n } else {\n unwrap(element);\n }\n return;\n } else {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n }\n if (validate && rule && !isInternalElement) {\n each$e((_c = rule.attributesForced) !== null && _c !== void 0 ? _c : [], attr => {\n set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n });\n each$e((_d = rule.attributesDefault) !== null && _d !== void 0 ? _d : [], attr => {\n if (!has$1(element, attr.name)) {\n set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n }\n });\n if (rule.attributesRequired && !exists(rule.attributesRequired, attr => has$1(element, attr))) {\n unwrap(element);\n return;\n }\n if (rule.removeEmptyAttrs && hasNone(element)) {\n unwrap(element);\n return;\n }\n if (rule.outputName && rule.outputName !== lcTagName) {\n mutate(element, rule.outputName);\n }\n }\n };\n const processAttr = (ele, settings, schema, scope, evt) => {\n const tagName = ele.tagName.toLowerCase();\n const {attrName, attrValue} = evt;\n evt.keepAttr = shouldKeepAttribute(settings, schema, scope, tagName, attrName, attrValue);\n if (evt.keepAttr) {\n evt.allowedAttributes[attrName] = true;\n if (isBooleanAttribute(attrName, schema)) {\n evt.attrValue = attrName;\n }\n if (settings.allow_svg_data_urls && startsWith(attrValue, 'data:image/svg+xml')) {\n evt.forceKeepAttr = true;\n }\n } else if (isRequiredAttributeOfInternalElement(ele, attrName)) {\n evt.forceKeepAttr = true;\n }\n };\n const shouldKeepAttribute = (settings, schema, scope, tagName, attrName, attrValue) => {\n if (scope !== 'html' && !isNonHtmlElementRootName(tagName)) {\n return true;\n }\n return !(attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) && (!settings.validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-'));\n };\n const isRequiredAttributeOfInternalElement = (ele, attrName) => ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style');\n const isBooleanAttribute = (attrName, schema) => attrName in schema.getBoolAttrs();\n const filterAttributes = (ele, settings, schema, scope) => {\n const {attributes} = ele;\n for (let i = attributes.length - 1; i >= 0; i--) {\n const attr = attributes[i];\n const attrName = attr.name;\n const attrValue = attr.value;\n if (!shouldKeepAttribute(settings, schema, scope, ele.tagName.toLowerCase(), attrName, attrValue) && !isRequiredAttributeOfInternalElement(ele, attrName)) {\n ele.removeAttribute(attrName);\n } else if (isBooleanAttribute(attrName, schema)) {\n ele.setAttribute(attrName, attrName);\n }\n }\n };\n const setupPurify = (settings, schema, namespaceTracker) => {\n const purify$1 = purify();\n purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n processNode(ele, settings, schema, namespaceTracker.track(ele), evt);\n });\n purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n processAttr(ele, settings, schema, namespaceTracker.current(), evt);\n });\n return purify$1;\n };\n const getPurifyConfig = (settings, mimeType) => {\n const basePurifyConfig = {\n IN_PLACE: true,\n ALLOW_UNKNOWN_PROTOCOLS: true,\n ALLOWED_TAGS: [\n '#comment',\n '#cdata-section',\n 'body'\n ],\n ALLOWED_ATTR: [],\n SAFE_FOR_XML: false\n };\n const config = { ...basePurifyConfig };\n config.PARSER_MEDIA_TYPE = mimeType;\n if (settings.allow_script_urls) {\n config.ALLOWED_URI_REGEXP = /.*/;\n } else if (settings.allow_html_data_urls) {\n config.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n }\n return config;\n };\n const sanitizeSvgElement = ele => {\n const xlinkAttrs = [\n 'type',\n 'href',\n 'role',\n 'arcrole',\n 'title',\n 'show',\n 'actuate',\n 'label',\n 'from',\n 'to'\n ].map(name => `xlink:${ name }`);\n const config = {\n IN_PLACE: true,\n USE_PROFILES: {\n html: true,\n svg: true,\n svgFilters: true\n },\n ALLOWED_ATTR: xlinkAttrs\n };\n purify().sanitize(ele, config);\n };\n const sanitizeMathmlElement = (node, settings) => {\n const config = {\n IN_PLACE: true,\n USE_PROFILES: { mathMl: true }\n };\n const purify$1 = purify();\n purify$1.addHook('uponSanitizeElement', (node, evt) => {\n var _a;\n const lcTagName = (_a = evt.tagName) !== null && _a !== void 0 ? _a : node.nodeName.toLowerCase();\n const allowedEncodings = settings.allow_mathml_annotation_encodings;\n if (lcTagName === 'annotation' && isArray$1(allowedEncodings) && allowedEncodings.length > 0) {\n const encoding = node.getAttribute('encoding');\n if (isString(encoding) && contains$2(allowedEncodings, encoding)) {\n evt.allowedTags[lcTagName] = true;\n }\n }\n });\n purify$1.sanitize(node, config);\n };\n const mkSanitizeNamespaceElement = settings => ele => {\n const namespaceType = toScopeType(ele);\n if (namespaceType === 'svg') {\n sanitizeSvgElement(ele);\n } else if (namespaceType === 'math') {\n sanitizeMathmlElement(ele, settings);\n } else {\n throw new Error('Not a namespace element');\n }\n };\n const getSanitizer = (settings, schema) => {\n const namespaceTracker = createNamespaceTracker();\n if (settings.sanitize) {\n const purify = setupPurify(settings, schema, namespaceTracker);\n const sanitizeHtmlElement = (body, mimeType) => {\n purify.sanitize(body, getPurifyConfig(settings, mimeType));\n purify.removed = [];\n namespaceTracker.reset();\n };\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement: mkSanitizeNamespaceElement(settings)\n };\n } else {\n const sanitizeHtmlElement = (body, _mimeType) => {\n const nodeIterator = document.createNodeIterator(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);\n let node;\n while (node = nodeIterator.nextNode()) {\n const currentScope = namespaceTracker.track(node);\n processNode(node, settings, schema, currentScope);\n if (isElement$6(node)) {\n filterAttributes(node, settings, schema, currentScope);\n }\n }\n namespaceTracker.reset();\n };\n const sanitizeNamespaceElement = noop;\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement\n };\n }\n };\n\n const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n const transferChildren = (parent, nativeParent, specialElements, nsSanitizer) => {\n const parentName = parent.name;\n const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea' && parentName !== 'noscript';\n const childNodes = nativeParent.childNodes;\n for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n const nativeChild = childNodes[ni];\n const child = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n if (isElement$6(nativeChild)) {\n const attributes = nativeChild.attributes;\n for (let ai = 0, al = attributes.length; ai < al; ai++) {\n const attr = attributes[ai];\n child.attr(attr.name, attr.value);\n }\n if (isNonHtmlElementRootName(child.name)) {\n nsSanitizer(nativeChild);\n child.value = nativeChild.innerHTML;\n }\n } else if (isText$b(nativeChild)) {\n child.value = nativeChild.data;\n if (isSpecial) {\n child.raw = true;\n }\n } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n child.value = nativeChild.data;\n }\n if (!isNonHtmlElementRootName(child.name)) {\n transferChildren(child, nativeChild, specialElements, nsSanitizer);\n }\n parent.append(child);\n }\n };\n const walkTree = (root, preprocessors, postprocessors) => {\n const traverseOrder = [];\n for (let node = root, lastNode = node; node; lastNode = node, node = node.walk()) {\n const tempNode = node;\n each$e(preprocessors, preprocess => preprocess(tempNode));\n if (isNullable(tempNode.parent) && tempNode !== root) {\n node = lastNode;\n } else {\n traverseOrder.push(tempNode);\n }\n }\n for (let i = traverseOrder.length - 1; i >= 0; i--) {\n const node = traverseOrder[i];\n each$e(postprocessors, postprocess => postprocess(node));\n }\n };\n const whitespaceCleaner = (root, schema, settings, args) => {\n const validate = settings.validate;\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const textRootBlockElements = getTextRootBlockElements(schema);\n const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n const hasWhitespaceParent = node => {\n let tempNode = node.parent;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in whitespaceElements) {\n return true;\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isTextRootBlockEmpty = node => {\n let tempNode = node;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in textRootBlockElements) {\n return isEmpty(schema, nonEmptyElements, whitespaceElements, tempNode);\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node) || isNonHtmlElementRootName(node.name) && node.parent === root;\n const isAtEdgeOfBlock = (node, start) => {\n const neighbour = start ? node.prev : node.next;\n if (isNonNullable(neighbour) || isNullable(node.parent)) {\n return false;\n }\n return isBlock(node.parent) && (node.parent !== root || args.isRootContent === true);\n };\n const preprocess = node => {\n var _a;\n if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.prev, isBlock) || isAtEdgeOfBlock(node, true)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else if (text === ' ' && node.prev && node.prev.type === COMMENT && node.next && node.next.type === COMMENT) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n const postprocess = node => {\n var _a;\n if (node.type === 1) {\n const elementRule = schema.getElementRule(node.name);\n if (validate && elementRule) {\n const isNodeEmpty = isEmpty(schema, nonEmptyElements, whitespaceElements, node);\n if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n paddEmptyNode(settings, args, isBlock, node);\n } else if (elementRule.removeEmpty && isNodeEmpty) {\n if (isBlock(node)) {\n node.remove();\n } else {\n node.unwrap();\n }\n } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n paddEmptyNode(settings, args, isBlock, node);\n }\n }\n } else if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (node.next && isBlock(node.next) || isAtEdgeOfBlock(node, false)) {\n text = text.replace(endWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n return [\n preprocess,\n postprocess\n ];\n };\n const getRootBlockName = (settings, args) => {\n var _a;\n const name = (_a = args.forced_root_block) !== null && _a !== void 0 ? _a : settings.forced_root_block;\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n const DomParser = (settings = {}, schema = Schema()) => {\n const nodeFilterRegistry = create$8();\n const attributeFilterRegistry = create$8();\n const defaultedSettings = {\n validate: true,\n root_name: 'body',\n sanitize: true,\n ...settings\n };\n const parser = new DOMParser();\n const sanitizer = getSanitizer(defaultedSettings, schema);\n const parseAndSanitizeWithContext = (html, rootName, format = 'html') => {\n const mimeType = format === 'xhtml' ? 'application/xhtml+xml' : 'text/html';\n const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n const content = isSpecialRoot ? `<${ rootName }>${ html }` : html;\n const makeWrap = () => {\n if (format === 'xhtml') {\n return `${ content }`;\n } else if (/^[\\s]*${ content }`;\n } else {\n return `${ content }`;\n }\n };\n const body = parser.parseFromString(makeWrap(), mimeType).body;\n sanitizer.sanitizeHtmlElement(body, mimeType);\n return isSpecialRoot ? body.firstChild : body;\n };\n const addNodeFilter = nodeFilterRegistry.addFilter;\n const getNodeFilters = nodeFilterRegistry.getFilters;\n const removeNodeFilter = nodeFilterRegistry.removeFilter;\n const addAttributeFilter = attributeFilterRegistry.addFilter;\n const getAttributeFilters = attributeFilterRegistry.getFilters;\n const removeAttributeFilter = attributeFilterRegistry.removeFilter;\n const findInvalidChildren = (node, invalidChildren) => {\n if (isInvalid(schema, node)) {\n invalidChildren.push(node);\n }\n };\n const isWrappableNode = (blockElements, node) => {\n const isInternalElement = isString(node.attr(internalElementAttr));\n const isInlineElement = node.type === 1 && (!has$2(blockElements, node.name) && !isTransparentAstBlock(schema, node)) && !isNonHtmlElementRootName(node.name);\n return node.type === 3 || isInlineElement && !isInternalElement;\n };\n const addRootBlocks = (rootNode, rootBlockName) => {\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n let node = rootNode.firstChild, rootBlockNode = null;\n const trim = rootBlock => {\n var _a, _b;\n if (rootBlock) {\n node = rootBlock.firstChild;\n if (node && node.type === 3) {\n node.value = (_a = node.value) === null || _a === void 0 ? void 0 : _a.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlock.lastChild;\n if (node && node.type === 3) {\n node.value = (_b = node.value) === null || _b === void 0 ? void 0 : _b.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n const next = node.next;\n if (isWrappableNode(blockElements, node)) {\n if (!rootBlockNode) {\n rootBlockNode = new AstNode(rootBlockName, 1);\n rootBlockNode.attr(defaultedSettings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n const parse = (html, args = {}) => {\n var _a;\n const validate = defaultedSettings.validate;\n const rootName = (_a = args.context) !== null && _a !== void 0 ? _a : defaultedSettings.root_name;\n const element = parseAndSanitizeWithContext(html, rootName, args.format);\n updateChildren(schema, element);\n const rootNode = new AstNode(rootName, 11);\n transferChildren(rootNode, element, schema.getSpecialElements(), sanitizer.sanitizeNamespaceElement);\n element.innerHTML = '';\n const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n const invalidChildren = [];\n const invalidFinder = validate ? node => findInvalidChildren(node, invalidChildren) : noop;\n const matches = {\n nodes: {},\n attributes: {}\n };\n const matchFinder = node => matchNode$1(getNodeFilters(), getAttributeFilters(), node, matches);\n walkTree(rootNode, [\n whitespacePre,\n matchFinder\n ], [\n whitespacePost,\n invalidFinder\n ]);\n invalidChildren.reverse();\n if (validate && invalidChildren.length > 0) {\n if (args.context) {\n const {\n pass: topLevelChildren,\n fail: otherChildren\n } = partition$2(invalidChildren, child => child.parent === rootNode);\n cleanInvalidNodes(otherChildren, schema, rootNode, matchFinder);\n args.invalid = topLevelChildren.length > 0;\n } else {\n cleanInvalidNodes(invalidChildren, schema, rootNode, matchFinder);\n }\n }\n const rootBlockName = getRootBlockName(defaultedSettings, args);\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks(rootNode, rootBlockName);\n }\n if (!args.invalid) {\n runFilters(matches, args);\n }\n return rootNode;\n };\n const exports = {\n schema,\n addAttributeFilter,\n getAttributeFilters,\n removeAttributeFilter,\n addNodeFilter,\n getNodeFilters,\n removeNodeFilter,\n parse\n };\n register$4(exports, defaultedSettings);\n register$5(exports, defaultedSettings, schema);\n return exports;\n };\n\n const serializeContent = content => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n const withSerializedContent = (content, fireEvent, parserSettings) => {\n const serializedContent = serializeContent(content);\n const eventArgs = fireEvent(serializedContent);\n if (eventArgs.isDefaultPrevented()) {\n return eventArgs;\n } else if (isTreeNode(content)) {\n if (eventArgs.content !== serializedContent) {\n const rootNode = DomParser({\n validate: false,\n forced_root_block: false,\n ...parserSettings\n }).parse(eventArgs.content, { context: content.name });\n return {\n ...eventArgs,\n content: rootNode\n };\n } else {\n return {\n ...eventArgs,\n content\n };\n }\n } else {\n return eventArgs;\n }\n };\n const makeParserSettings = editor => ({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor)\n });\n const preProcessGetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const eventArgs = fireBeforeGetContent(editor, args);\n if (eventArgs.isDefaultPrevented()) {\n return Result.error(fireGetContent(editor, {\n content: '',\n ...eventArgs\n }).content);\n } else {\n return Result.value(eventArgs);\n }\n }\n };\n const postProcessGetContent = (editor, content, args) => {\n if (args.no_events) {\n return content;\n } else {\n const processedEventArgs = withSerializedContent(content, content => fireGetContent(editor, {\n ...args,\n content\n }), makeParserSettings(editor));\n return processedEventArgs.content;\n }\n };\n const preProcessSetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const processedEventArgs = withSerializedContent(args.content, content => fireBeforeSetContent(editor, {\n ...args,\n content\n }), makeParserSettings(editor));\n if (processedEventArgs.isDefaultPrevented()) {\n fireSetContent(editor, processedEventArgs);\n return Result.error(undefined);\n } else {\n return Result.value(processedEventArgs);\n }\n }\n };\n const postProcessSetContent = (editor, content, args) => {\n if (!args.no_events) {\n fireSetContent(editor, {\n ...args,\n content\n });\n }\n };\n\n const tableModel = (element, width, rows) => ({\n element,\n width,\n rows\n });\n const tableRow = (element, cells) => ({\n element,\n cells\n });\n const cellPosition = (x, y) => ({\n x,\n y\n });\n const getSpan = (td, key) => {\n return getOpt(td, key).bind(toInt).getOr(1);\n };\n const fillout = (table, x, y, tr, td) => {\n const rowspan = getSpan(td, 'rowspan');\n const colspan = getSpan(td, 'colspan');\n const rows = table.rows;\n for (let y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep$1(tr), []);\n }\n for (let x2 = x; x2 < x + colspan; x2++) {\n const cells = rows[y2].cells;\n cells[x2] = y2 === y && x2 === x ? td : shallow$1(td);\n }\n }\n };\n const cellExists = (table, x, y) => {\n const rows = table.rows;\n const cells = rows[y] ? rows[y].cells : [];\n return !!cells[x];\n };\n const skipCellsX = (table, x, y) => {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n const getWidth = rows => {\n return foldl(rows, (acc, row) => {\n return row.cells.length > acc ? row.cells.length : acc;\n }, 0);\n };\n const findElementPos = (table, element) => {\n const rows = table.rows;\n for (let y = 0; y < rows.length; y++) {\n const cells = rows[y].cells;\n for (let x = 0; x < cells.length; x++) {\n if (eq(cells[x], element)) {\n return Optional.some(cellPosition(x, y));\n }\n }\n }\n return Optional.none();\n };\n const extractRows = (table, sx, sy, ex, ey) => {\n const newRows = [];\n const rows = table.rows;\n for (let y = sy; y <= ey; y++) {\n const cells = rows[y].cells;\n const slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element, slice));\n }\n return newRows;\n };\n const subTable = (table, startPos, endPos) => {\n const sx = startPos.x, sy = startPos.y;\n const ex = endPos.x, ey = endPos.y;\n const newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element, getWidth(newRows), newRows);\n };\n const createDomTable = (table, rows) => {\n const tableElement = shallow$1(table.element);\n const tableBody = SugarElement.fromTag('tbody');\n append(tableBody, rows);\n append$1(tableElement, tableBody);\n return tableElement;\n };\n const modelRowsToDomRows = table => {\n return map$3(table.rows, row => {\n const cells = map$3(row.cells, cell => {\n const td = deep$1(cell);\n remove$9(td, 'colspan');\n remove$9(td, 'rowspan');\n return td;\n });\n const tr = shallow$1(row.element);\n append(tr, cells);\n return tr;\n });\n };\n const fromDom = tableElm => {\n const table = tableModel(shallow$1(tableElm), 0, []);\n each$e(descendants(tableElm, 'tr'), (tr, y) => {\n each$e(descendants(tr, 'td,th'), (td, x) => {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element, getWidth(table.rows), table.rows);\n };\n const toDom = table => {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n const subsection = (table, startElement, endElement) => {\n return findElementPos(table, startElement).bind(startPos => {\n return findElementPos(table, endElement).map(endPos => {\n return subTable(table, startPos, endPos);\n });\n });\n };\n\n const findParentListContainer = parents => find$2(parents, elm => name(elm) === 'ul' || name(elm) === 'ol');\n const getFullySelectedListWrappers = (parents, rng) => find$2(parents, elm => name(elm) === 'li' && hasAllContentsSelected(elm, rng)).fold(constant([]), _li => findParentListContainer(parents).map(listCont => {\n const listElm = SugarElement.fromTag(name(listCont));\n const listStyles = filter$4(getAllRaw(listCont), (_style, name) => startsWith(name, 'list-style'));\n setAll(listElm, listStyles);\n return [\n SugarElement.fromTag('li'),\n listElm\n ];\n }).getOr([]));\n const wrap = (innerElm, elms) => {\n const wrapped = foldl(elms, (acc, elm) => {\n append$1(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n const directListWrappers = commonAnchorContainer => {\n if (isListItem$1(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), listElm => [\n commonAnchorContainer,\n listElm\n ]);\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n const getWrapElements = (rootNode, rng, schema) => {\n const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n const wrapElements = filter$5(parents, el => schema.isWrapper(name(el)));\n const listWrappers = getFullySelectedListWrappers(parents, rng);\n const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map$3(allWrappers, shallow$1);\n };\n const emptyFragment = () => fromElements([]);\n const getFragmentFromRange = (rootNode, rng, schema) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng, schema));\n const getParentTable = (rootElm, cell) => ancestor$3(cell, 'table', curry(eq, rootElm));\n const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind(tableElm => {\n const firstCell = selectedTableCells[0];\n const lastCell = selectedTableCells[selectedTableCells.length - 1];\n const fullTableModel = fromDom(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(sectionedTableModel => fromElements([toDom(sectionedTableModel)]));\n }).getOrThunk(emptyFragment);\n const getSelectionFragment = (rootNode, ranges, schema) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0], schema);\n const read$3 = (rootNode, ranges, schema) => {\n const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges, schema);\n };\n\n const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n const getInnerText = bin => {\n return trim$2(bin.innerText);\n };\n const getContextNodeName = parentBlockOpt => parentBlockOpt.map(block => block.nodeName).getOr('div').toLowerCase();\n const getTextContent = editor => Optional.from(editor.selection.getRng()).map(rng => {\n var _a;\n const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n const body = editor.getBody();\n const contextNodeName = getContextNodeName(parentBlockOpt);\n const rangeContentClone = SugarElement.fromDom(rng.cloneContents());\n cleanupBogusElements(rangeContentClone);\n cleanupInputNames(rangeContentClone);\n const bin = editor.dom.add(body, contextNodeName, {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rangeContentClone.dom);\n const text = getInnerText(bin);\n const nonRenderedText = trim$2((_a = bin.textContent) !== null && _a !== void 0 ? _a : '');\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n const parentBlock = parentBlockOpt.getOr(body);\n const parentBlockText = getInnerText(parentBlock);\n const textIndex = parentBlockText.indexOf(text);\n if (textIndex === -1) {\n return text;\n } else {\n const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n }\n } else {\n return text;\n }\n }).getOr('');\n const getSerializedContent = (editor, args) => {\n const rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n const sel = editor.selection.getSel();\n const ranges = processRanges(editor, getRanges$1(sel));\n const fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges, editor.schema).dom : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n const extractSelectedContent = (editor, args) => {\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n const content = getSerializedContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n return editor.selection.isCollapsed() ? '' : content;\n }\n }\n };\n const setupArgs$3 = (args, format) => ({\n ...args,\n format,\n get: true,\n selection: true,\n getInner: true\n });\n const getSelectedContentInternal = (editor, format, args = {}) => {\n const defaultedArgs = setupArgs$3(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = extractSelectedContent(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const KEEP = 0, INSERT = 1, DELETE = 2;\n const diff = (left, right) => {\n const size = left.length + right.length + 2;\n const vDown = new Array(size);\n const vUp = new Array(size);\n const snake = (start, end, diag) => {\n return {\n start,\n end,\n diag\n };\n };\n const buildScript = (start1, end1, start2, end2, script) => {\n const middle = getMiddleSnake(start1, end1, start2, end2);\n if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n let i = start1;\n let j = start2;\n while (i < end1 || j < end2) {\n if (i < end1 && j < end2 && left[i] === right[j]) {\n script.push([\n KEEP,\n left[i]\n ]);\n ++i;\n ++j;\n } else {\n if (end1 - start1 > end2 - start2) {\n script.push([\n DELETE,\n left[i]\n ]);\n ++i;\n } else {\n script.push([\n INSERT,\n right[j]\n ]);\n ++j;\n }\n }\n }\n } else {\n buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n for (let i2 = middle.start; i2 < middle.end; ++i2) {\n script.push([\n KEEP,\n left[i2]\n ]);\n }\n buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n }\n };\n const buildSnake = (start, diag, end1, end2) => {\n let end = start;\n while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n ++end;\n }\n return snake(start, end, diag);\n };\n const getMiddleSnake = (start1, end1, start2, end2) => {\n const m = end1 - start1;\n const n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n const delta = m - n;\n const sum = n + m;\n const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n let d, k, i, x, y;\n for (d = 0; d <= offset; ++d) {\n for (k = -d; k <= d; k += 2) {\n i = k + offset;\n if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n vDown[i] = vDown[i + 1];\n } else {\n vDown[i] = vDown[i - 1] + 1;\n }\n x = vDown[i];\n y = x - start1 + start2 - k;\n while (x < end1 && y < end2 && left[x] === right[y]) {\n vDown[i] = ++x;\n ++y;\n }\n if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n if (vUp[i - delta] <= vDown[i]) {\n return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n }\n }\n }\n for (k = delta - d; k <= delta + d; k += 2) {\n i = k + offset - delta;\n if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n vUp[i] = vUp[i + 1] - 1;\n } else {\n vUp[i] = vUp[i - 1];\n }\n x = vUp[i] - 1;\n y = x - start1 + start2 - k;\n while (x >= start1 && y >= start2 && left[x] === right[y]) {\n vUp[i] = x--;\n y--;\n }\n if (delta % 2 === 0 && -d <= k && k <= d) {\n if (vUp[i] <= vDown[i + delta]) {\n return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n }\n }\n }\n }\n return null;\n };\n const script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n const getOuterHtml = elm => {\n if (isElement$6(elm)) {\n return elm.outerHTML;\n } else if (isText$b(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment(elm)) {\n return '';\n }\n return '';\n };\n const createFragment = html => {\n let node;\n const container = document.createElement('div');\n const frag = document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n const insertAt = (elm, html, index) => {\n const fragment = createFragment(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n const removeAt = (elm, index) => {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.removeChild(target);\n }\n };\n const applyDiff = (diff, elm) => {\n let index = 0;\n each$e(diff, action => {\n if (action[0] === KEEP) {\n index++;\n } else if (action[0] === INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === DELETE) {\n removeAt(elm, index);\n }\n });\n };\n const read$2 = (elm, trimZwsp) => filter$5(map$3(from(elm.childNodes), trimZwsp ? compose(trim$2, getOuterHtml) : getOuterHtml), item => {\n return item.length > 0;\n });\n const write = (fragments, elm) => {\n const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n const lazyTempDocument = cached(() => document.implementation.createHTMLDocument('undo'));\n const hasIframes = body => body.querySelector('iframe') !== null;\n const createFragmentedLevel = fragments => {\n return {\n type: 'fragmented',\n fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createCompleteLevel = content => {\n return {\n type: 'complete',\n fragments: null,\n content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createFromEditor = editor => {\n const tempAttrs = editor.serializer.getTempAttrs();\n const body = trim$1(editor.getBody(), tempAttrs);\n return hasIframes(body) ? createFragmentedLevel(read$2(body, true)) : createCompleteLevel(trim$2(body.innerHTML));\n };\n const applyToEditor = (editor, level, before) => {\n const bookmark = before ? level.beforeBookmark : level.bookmark;\n if (level.type === 'fragmented') {\n write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, {\n format: 'raw',\n no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n });\n }\n if (bookmark) {\n editor.selection.moveToBookmark(bookmark);\n editor.selection.scrollIntoView();\n }\n };\n const getLevelContent = level => {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n const getCleanLevelContent = level => {\n const elm = SugarElement.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each$e(descendants(elm, '*[data-mce-bogus]'), unwrap);\n return get$6(elm);\n };\n const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n const isEq$1 = (level1, level2) => {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n\n const isUnlocked = locks => locks.get() === 0;\n\n const setTyping = (undoManager, typing, locks) => {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n const endTyping = (undoManager, locks) => {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n const endTypingLevelIgnoreLocks = undoManager => {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n const beforeChange$1 = (editor, locks, beforeBookmark) => {\n if (isUnlocked(locks)) {\n beforeBookmark.set(getUndoBookmark(editor.selection));\n }\n };\n const addUndoLevel$1 = (editor, undoManager, index, locks, beforeBookmark, level, event) => {\n const currentLevel = createFromEditor(editor);\n const newLevel = Tools.extend(level || {}, currentLevel);\n if (!isUnlocked(locks) || editor.removed) {\n return null;\n }\n const lastLevel = undoManager.data[index.get()];\n if (editor.dispatch('BeforeAddUndo', {\n level: newLevel,\n lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$1(lastLevel, newLevel)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(bm => {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (let i = 0; i < undoManager.data.length - 1; i++) {\n undoManager.data[i] = undoManager.data[i + 1];\n }\n undoManager.data.length--;\n index.set(undoManager.data.length);\n }\n }\n newLevel.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(newLevel);\n index.set(undoManager.data.length - 1);\n const args = {\n level: newLevel,\n lastLevel,\n originalEvent: event\n };\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.dispatch('AddUndo', args);\n editor.dispatch('change', args);\n } else {\n editor.dispatch('AddUndo', args);\n }\n return newLevel;\n };\n const clear$1 = (editor, undoManager, index) => {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.dispatch('ClearUndos');\n };\n const extra$1 = (editor, undoManager, index, callback1, callback2) => {\n if (undoManager.transact(callback1)) {\n const bookmark = undoManager.data[index.get()].bookmark;\n const lastLevel = undoManager.data[index.get() - 1];\n applyToEditor(editor, lastLevel, true);\n if (undoManager.transact(callback2)) {\n undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n }\n }\n };\n const redo$1 = (editor, index, data) => {\n let level;\n if (index.get() < data.length - 1) {\n index.set(index.get() + 1);\n level = data[index.get()];\n applyToEditor(editor, level, false);\n editor.setDirty(true);\n editor.dispatch('Redo', { level });\n }\n return level;\n };\n const undo$1 = (editor, undoManager, locks, index) => {\n let level;\n if (undoManager.typing) {\n undoManager.add();\n undoManager.typing = false;\n setTyping(undoManager, false, locks);\n }\n if (index.get() > 0) {\n index.set(index.get() - 1);\n level = undoManager.data[index.get()];\n applyToEditor(editor, level, true);\n editor.setDirty(true);\n editor.dispatch('Undo', { level });\n }\n return level;\n };\n const reset$1 = undoManager => {\n undoManager.clear();\n undoManager.add();\n };\n const hasUndo$1 = (editor, undoManager, index) => index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n const hasRedo$1 = (undoManager, index) => index.get() < undoManager.data.length - 1 && !undoManager.typing;\n const transact$1 = (undoManager, locks, callback) => {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n const ignore$1 = (locks, callback) => {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n const addVisualInternal = (editor, elm) => {\n const dom = editor.dom;\n const scope = isNonNullable(elm) ? elm : editor.getBody();\n each$e(dom.select('table,a', scope), matchedElm => {\n switch (matchedElm.nodeName) {\n case 'TABLE':\n const cls = getVisualAidsTableClass(editor);\n const value = dom.getAttrib(matchedElm, 'border');\n if ((!value || value === '0') && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n break;\n case 'A':\n if (!dom.getAttrib(matchedElm, 'href')) {\n const value = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n const cls = getVisualAidsAnchorClass(editor);\n if (value && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n }\n break;\n }\n });\n editor.dispatch('VisualAid', {\n element: elm,\n hasVisual: editor.hasVisual\n });\n };\n\n const makePlainAdaptor = editor => ({\n init: { bindEvents: noop },\n undoManager: {\n beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n add: (undoManager, index, locks, beforeBookmark, level, event) => addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event),\n undo: (undoManager, locks, index) => undo$1(editor, undoManager, locks, index),\n redo: (index, data) => redo$1(editor, index, data),\n clear: (undoManager, index) => clear$1(editor, undoManager, index),\n reset: undoManager => reset$1(undoManager),\n hasUndo: (undoManager, index) => hasUndo$1(editor, undoManager, index),\n hasRedo: (undoManager, index) => hasRedo$1(undoManager, index),\n transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n ignore: (locks, callback) => ignore$1(locks, callback),\n extra: (undoManager, index, callback1, callback2) => extra$1(editor, undoManager, index, callback1, callback2)\n },\n formatter: {\n match: (name, vars, node, similar) => match$2(editor, name, vars, node, similar),\n matchAll: (names, vars) => matchAll(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNode(editor, node, name, vars, similar),\n canApply: name => canApply(editor, name),\n closest: names => closest(editor, names),\n apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n remove: (name, vars, node, similar) => removeFormat$1(editor, name, vars, node, similar),\n toggle: (name, vars, node) => toggle(editor, name, vars, node),\n formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n },\n editor: {\n getContent: args => getContentInternal(editor, args),\n setContent: (content, args) => setContentInternal(editor, content, args),\n insertContent: (value, details) => insertHtmlAtCaret(editor, value, details),\n addVisual: elm => addVisualInternal(editor, elm)\n },\n selection: { getContent: (format, args) => getSelectedContentInternal(editor, format, args) },\n autocompleter: {\n addDecoration: noop,\n removeDecoration: noop\n },\n raw: { getModel: () => Optional.none() }\n });\n const makeRtcAdaptor = rtcEditor => {\n const defaultVars = vars => isObject(vars) ? vars : {};\n const {init, undoManager, formatter, editor, selection, autocompleter, raw} = rtcEditor;\n return {\n init: { bindEvents: init.bindEvents },\n undoManager: {\n beforeChange: undoManager.beforeChange,\n add: undoManager.add,\n undo: undoManager.undo,\n redo: undoManager.redo,\n clear: undoManager.clear,\n reset: undoManager.reset,\n hasUndo: undoManager.hasUndo,\n hasRedo: undoManager.hasRedo,\n transact: (_undoManager, _locks, fn) => undoManager.transact(fn),\n ignore: (_locks, callback) => undoManager.ignore(callback),\n extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n },\n formatter: {\n match: (name, vars, _node, similar) => formatter.match(name, defaultVars(vars), similar),\n matchAll: formatter.matchAll,\n matchNode: formatter.matchNode,\n canApply: name => formatter.canApply(name),\n closest: names => formatter.closest(names),\n apply: (name, vars, _node) => formatter.apply(name, defaultVars(vars)),\n remove: (name, vars, _node, _similar) => formatter.remove(name, defaultVars(vars)),\n toggle: (name, vars, _node) => formatter.toggle(name, defaultVars(vars)),\n formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n },\n editor: {\n getContent: args => editor.getContent(args),\n setContent: (content, args) => {\n return {\n content: editor.setContent(content, args),\n html: ''\n };\n },\n insertContent: (content, _details) => {\n editor.insertContent(content);\n return '';\n },\n addVisual: editor.addVisual\n },\n selection: { getContent: (_format, args) => selection.getContent(args) },\n autocompleter: {\n addDecoration: autocompleter.addDecoration,\n removeDecoration: autocompleter.removeDecoration\n },\n raw: { getModel: () => Optional.some(raw.getRawModel()) }\n };\n };\n const makeNoopAdaptor = () => {\n const nul = constant(null);\n const empty = constant('');\n return {\n init: { bindEvents: noop },\n undoManager: {\n beforeChange: noop,\n add: nul,\n undo: nul,\n redo: nul,\n clear: noop,\n reset: noop,\n hasUndo: never,\n hasRedo: never,\n transact: nul,\n ignore: noop,\n extra: noop\n },\n formatter: {\n match: never,\n matchAll: constant([]),\n matchNode: constant(undefined),\n canApply: never,\n closest: empty,\n apply: noop,\n remove: noop,\n toggle: noop,\n formatChanged: constant({ unbind: noop })\n },\n editor: {\n getContent: empty,\n setContent: constant({\n content: '',\n html: ''\n }),\n insertContent: constant(''),\n addVisual: noop\n },\n selection: { getContent: empty },\n autocompleter: {\n addDecoration: noop,\n removeDecoration: noop\n },\n raw: { getModel: constant(Optional.none()) }\n };\n };\n const isRtc = editor => has$2(editor.plugins, 'rtc');\n const getRtcSetup = editor => get$a(editor.plugins, 'rtc').bind(rtcPlugin => Optional.from(rtcPlugin.setup));\n const setup$t = editor => {\n const editorCast = editor;\n return getRtcSetup(editor).fold(() => {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, setup => {\n editorCast.rtcInstance = makeNoopAdaptor();\n return Optional.some(() => setup().then(rtcEditor => {\n editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n return rtcEditor.rtc.isRemote;\n }));\n });\n };\n const getRtcInstanceWithFallback = editor => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n const getRtcInstanceWithError = editor => {\n const rtcInstance = editor.rtcInstance;\n if (!rtcInstance) {\n throw new Error('Failed to get RTC instance not yet initialized.');\n } else {\n return rtcInstance;\n }\n };\n const beforeChange = (editor, locks, beforeBookmark) => {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n const addUndoLevel = (editor, undoManager, index, locks, beforeBookmark, level, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n const undo = (editor, undoManager, locks, index) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n const redo = (editor, index, data) => getRtcInstanceWithError(editor).undoManager.redo(index, data);\n const clear = (editor, undoManager, index) => {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n const reset = (editor, undoManager) => {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n const hasUndo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n const hasRedo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n const ignore = (editor, locks, callback) => {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n const extra = (editor, undoManager, index, callback1, callback2) => {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n const matchFormat = (editor, name, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n const matchNodeFormat = (editor, node, name, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n const canApplyFormat = (editor, name) => getRtcInstanceWithError(editor).formatter.canApply(name);\n const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n const applyFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n const removeFormat = (editor, name, vars, node, similar) => {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n const toggleFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n const insertContent$1 = (editor, value, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n const getSelectedContent = (editor, format, args) => getRtcInstanceWithError(editor).selection.getContent(format, args);\n const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n const bindEvents = editor => getRtcInstanceWithError(editor).init.bindEvents();\n\n const getContent$1 = (editor, args = {}) => {\n const format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n const removeEmpty = text => {\n if (text.dom.length === 0) {\n remove$4(text);\n return Optional.none();\n } else {\n return Optional.some(text);\n }\n };\n const walkPastBookmark = (node, start) => node.filter(elm => BookmarkManager.isBookmarkNode(elm.dom)).bind(start ? nextSibling : prevSibling);\n const merge$1 = (outer, inner, rng, start, schema) => {\n const outerElm = outer.dom;\n const innerElm = inner.dom;\n const oldLength = start ? outerElm.length : innerElm.length;\n if (start) {\n mergeTextNodes(outerElm, innerElm, schema, false, !start);\n rng.setStart(innerElm, oldLength);\n } else {\n mergeTextNodes(innerElm, outerElm, schema, false, !start);\n rng.setEnd(innerElm, oldLength);\n }\n };\n const normalizeTextIfRequired = (inner, start, schema) => {\n parent(inner).each(root => {\n const text = inner.dom;\n if (start && needsToBeNbspLeft(root, CaretPosition(text, 0), schema)) {\n normalizeWhitespaceAfter(text, 0, schema);\n } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length), schema)) {\n normalizeWhitespaceBefore(text, text.length, schema);\n }\n });\n };\n const mergeAndNormalizeText = (outerNode, innerNode, rng, start, schema) => {\n outerNode.bind(outer => {\n const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0, schema);\n return innerNode.filter(isText$c).map(inner => merge$1(outer, inner, rng, start, schema));\n }).orThunk(() => {\n const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$c);\n return innerTextNode.map(inner => normalizeTextIfRequired(inner, start, schema));\n });\n };\n const rngSetContent = (rng, fragment, schema) => {\n const firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n const lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n const prevText = firstChild.bind(prevSibling).filter(isText$c).bind(removeEmpty);\n const nextText = lastChild.bind(nextSibling).filter(isText$c).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true, schema);\n mergeAndNormalizeText(nextText, lastChild, rng, false, schema);\n rng.collapse(false);\n };\n const setupArgs$2 = (args, content) => ({\n format: 'html',\n ...args,\n set: true,\n selection: true,\n content\n });\n const cleanContent = (editor, args) => {\n if (args.format !== 'raw') {\n const rng = editor.selection.getRng();\n const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n const node = editor.parser.parse(args.content, {\n forced_root_block: false,\n ...contextArgs,\n ...args\n });\n return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n const setContent$1 = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs$2(args, content);\n preProcessSetContent(editor, defaultedArgs).each(updatedArgs => {\n const cleanedContent = cleanContent(editor, updatedArgs);\n const rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(cleanedContent), editor.schema);\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n postProcessSetContent(editor, cleanedContent, updatedArgs);\n });\n };\n\n const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n if (has$2(callbackMap, selector)) {\n const newCallbacks = filter$5(callbackMap[selector], cb => cb !== callback);\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n var SelectorChanged = (dom, editor) => {\n let selectorChangedData;\n let currentSelectors;\n const findMatchingNode = (selector, nodes) => find$2(nodes, node => dom.is(node, selector));\n const getParents = elem => dom.getParents(elem, undefined, dom.getRoot());\n const setup = () => {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', e => {\n const node = e.element;\n const parents = getParents(node);\n const matchedSelectors = {};\n each$d(selectorChangedData, (callbacks, selector) => {\n findMatchingNode(selector, parents).each(node => {\n if (!currentSelectors[selector]) {\n each$e(callbacks, callback => {\n callback(true, {\n node,\n selector,\n parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n });\n });\n each$d(currentSelectors, (callbacks, selector) => {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$e(callbacks, callback => {\n callback(false, {\n node,\n selector,\n parents\n });\n });\n }\n });\n });\n };\n return {\n selectorChangedWithUnbind: (selector, callback) => {\n if (!selectorChangedData) {\n setup();\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n findMatchingNode(selector, getParents(editor.selection.getStart())).each(() => {\n currentSelectors[selector] = selectorChangedData[selector];\n });\n return {\n unbind: () => {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n };\n\n const isAttachedToDom = node => {\n return !!(node && node.ownerDocument) && contains(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n };\n const isValidRange = rng => {\n if (!rng) {\n return false;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n const EditorSelection = (dom, win, serializer, editor) => {\n let selectedRange;\n let explicitRange;\n const {selectorChangedWithUnbind} = SelectorChanged(dom, editor);\n const setCursorLocation = (node, offset) => {\n const rng = dom.createRng();\n if (isNonNullable(node) && isNonNullable(offset)) {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n } else {\n moveEndPoint(dom, rng, editor.getBody(), true);\n setRng(rng);\n }\n };\n const getContent = args => getContent$1(editor, args);\n const setContent = (content, args) => setContent$1(editor, content, args);\n const getStart$1 = real => getStart(editor.getBody(), getRng$1(), real);\n const getEnd$1 = real => getEnd(editor.getBody(), getRng$1(), real);\n const getBookmark = (type, normalized) => bookmarkManager.getBookmark(type, normalized);\n const moveToBookmark = bookmark => bookmarkManager.moveToBookmark(bookmark);\n const select$1 = (node, content) => {\n select(dom, node, content).each(setRng);\n return node;\n };\n const isCollapsed = () => {\n const rng = getRng$1(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n const isEditable = () => {\n if (editor.mode.isReadOnly()) {\n return false;\n }\n const rng = getRng$1();\n const fakeSelectedElements = editor.getBody().querySelectorAll('[data-mce-selected=\"1\"]');\n if (fakeSelectedElements.length > 0) {\n return forall(fakeSelectedElements, el => dom.isEditable(el.parentElement));\n } else {\n return isEditableRange(dom, rng);\n }\n };\n const collapse = toStart => {\n const rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n const getRng$1 = () => {\n let rng;\n const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n const doc = win.document;\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n const bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n }\n }\n try {\n const selection = getSel();\n if (selection && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (ex) {\n }\n if (!rng) {\n rng = doc.createRange();\n }\n if (isDocument$1(rng.startContainer) && rng.collapsed) {\n const elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n const setRng = (rng, forward) => {\n if (!isValidRange(rng)) {\n return;\n }\n const sel = getSel();\n const evt = editor.dispatch('SetSelectionRange', {\n range: rng,\n forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && (sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n const node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.nodeName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.dispatch('AfterSetSelectionRange', {\n range: rng,\n forward\n });\n };\n const setNode = elm => {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n const isForward = () => {\n const sel = getSel();\n const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n const anchorRange = dom.createRng();\n const focusRange = dom.createRng();\n try {\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n } catch (e) {\n return true;\n }\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n const normalize = () => {\n const rng = getRng$1();\n const sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n const normRng = normalize$2(dom, rng);\n normRng.each(normRng => {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n const selectorChanged = (selector, callback) => {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n const getScrollContainer = () => {\n let scrollContainer;\n let node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n const scrollIntoView = (elm, alignToTop) => {\n if (isNonNullable(elm)) {\n scrollElementIntoView(editor, elm, alignToTop);\n } else {\n scrollRangeIntoView(editor, getRng$1(), alignToTop);\n }\n };\n const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n const getBoundingClientRect = () => {\n const rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n const destroy = () => {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n const exports = {\n dom,\n win,\n serializer,\n editor,\n expand,\n collapse,\n setCursorLocation,\n getContent,\n setContent,\n getBookmark,\n moveToBookmark,\n select: select$1,\n isCollapsed,\n isEditable,\n isForward,\n setNode,\n getNode: getNode$1,\n getSel,\n setRng,\n getRng: getRng$1,\n getStart: getStart$1,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize,\n selectorChanged,\n selectorChangedWithUnbind,\n getScrollContainer,\n scrollIntoView,\n placeCaretAt,\n getBoundingClientRect,\n destroy\n };\n const bookmarkManager = BookmarkManager(exports);\n const controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n const addNodeFilter = (settings, htmlParser, schema) => {\n htmlParser.addNodeFilter('br', (nodes, _, args) => {\n const blockElements = Tools.extend({}, schema.getBlockElements());\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n blockElements.body = 1;\n const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node);\n for (let i = 0, l = nodes.length; i < l; i++) {\n let node = nodes[i];\n let parent = node.parent;\n if (parent && isBlock(parent) && node === parent.lastChild) {\n let prev = node.prev;\n while (prev) {\n const prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName === 'br') {\n node = null;\n }\n break;\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent)) {\n const elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, isBlock, parent);\n }\n }\n }\n }\n } else {\n let lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent) {\n const textNode = new AstNode('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n };\n\n const register$3 = (htmlParser, settings, dom) => {\n htmlParser.addAttributeFilter('data-mce-tabindex', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.attr('tabindex', node.attr('data-mce-tabindex'));\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', (nodes, name) => {\n const internalName = 'data-mce-' + name;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr(internalName);\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attr(name);\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr('class');\n if (value) {\n value = value.replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', (nodes, name, args) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n const hasChildren = Optional.from(node.firstChild).exists(firstChild => {\n var _a;\n return !isZwsp((_a = firstChild.value) !== null && _a !== void 0 ? _a : '');\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('script,style', (nodes, name) => {\n var _a;\n const trim = value => {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const firstChild = node.firstChild;\n const value = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.value) !== null && _a !== void 0 ? _a : '';\n if (name === 'script') {\n const type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const value = node.value;\n if (settings.preserve_cdata && (value === null || value === void 0 ? void 0 : value.indexOf('[CDATA[')) === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if ((value === null || value === void 0 ? void 0 : value.indexOf('mce:protected ')) === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !node.attr('type')) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', nodes => {\n each$e(nodes, node => {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,data-mce-block,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n if (settings.remove_trailing_brs) {\n addNodeFilter(settings, htmlParser, htmlParser.schema);\n }\n };\n const trimTrailingBr = rootNode => {\n const isBr = node => {\n return (node === null || node === void 0 ? void 0 : node.name) === 'br';\n };\n const brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n const brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n const preProcess$1 = (editor, node, args) => {\n let oldDoc;\n const dom = editor.dom;\n let clonedNode = node.cloneNode(true);\n const impl = document.implementation;\n if (impl.createHTMLDocument) {\n const doc = impl.createHTMLDocument('');\n Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], node => {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (clonedNode.nodeName !== 'BODY') {\n clonedNode = doc.body.firstChild;\n } else {\n clonedNode = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n firePreProcess(editor, {\n ...args,\n node: clonedNode\n });\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return clonedNode;\n };\n const shouldFireEvent = (editor, args) => {\n return isNonNullable(editor) && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n const process$1 = (editor, node, args) => {\n return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n };\n\n const addTempAttr = (htmlParser, tempAttrs, name) => {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n const postProcess = (editor, args, content) => {\n if (!args.no_events && editor) {\n const outArgs = firePostProcess(editor, {\n ...args,\n content\n });\n return outArgs.content;\n } else {\n return content;\n }\n };\n const getHtmlFromNode = (dom, node, args) => {\n const html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n };\n const parseHtml = (htmlParser, html, args) => {\n const parserArgs = args.selection ? {\n forced_root_block: false,\n ...args\n } : args;\n const rootNode = htmlParser.parse(html, parserArgs);\n trimTrailingBr(rootNode);\n return rootNode;\n };\n const serializeNode = (settings, schema, node) => {\n const htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n const toHtml = (editor, settings, schema, rootNode, args) => {\n const content = serializeNode(settings, schema, rootNode);\n return postProcess(editor, args, content);\n };\n const DomSerializerImpl = (settings, editor) => {\n const tempAttrs = ['data-mce-selected'];\n const defaultedSettings = {\n entity_encoding: 'named',\n remove_trailing_brs: true,\n pad_empty_with_br: false,\n ...settings\n };\n const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n const schema = editor && editor.schema ? editor.schema : Schema(defaultedSettings);\n const htmlParser = DomParser(defaultedSettings, schema);\n register$3(htmlParser, defaultedSettings, dom);\n const serialize = (node, parserArgs = {}) => {\n const args = {\n format: 'html',\n ...parserArgs\n };\n const targetNode = process$1(editor, node, args);\n const html = getHtmlFromNode(dom, targetNode, args);\n const rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, defaultedSettings, schema, rootNode, args);\n };\n return {\n schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: schema.addValidElements,\n setRules: schema.setValidElements,\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: constant(tempAttrs),\n getNodeFilters: htmlParser.getNodeFilters,\n getAttributeFilters: htmlParser.getAttributeFilters,\n removeNodeFilter: htmlParser.removeNodeFilter,\n removeAttributeFilter: htmlParser.removeAttributeFilter\n };\n };\n\n const DomSerializer = (settings, editor) => {\n const domSerializer = DomSerializerImpl(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs,\n getNodeFilters: domSerializer.getNodeFilters,\n getAttributeFilters: domSerializer.getAttributeFilters,\n removeNodeFilter: domSerializer.removeNodeFilter,\n removeAttributeFilter: domSerializer.removeAttributeFilter\n };\n };\n\n const defaultFormat$1 = 'html';\n const setupArgs$1 = (args, format) => ({\n ...args,\n format,\n get: true,\n getInner: true\n });\n const getContent = (editor, args = {}) => {\n const format = args.format ? args.format : defaultFormat$1;\n const defaultedArgs = setupArgs$1(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = getContent$2(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const defaultFormat = 'html';\n const setupArgs = (args, content) => ({\n format: defaultFormat,\n ...args,\n set: true,\n content\n });\n const setContent = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs(args, content);\n return preProcessSetContent(editor, defaultedArgs).map(updatedArgs => {\n const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n postProcessSetContent(editor, result.html, updatedArgs);\n return result.content;\n }).getOr(content);\n };\n\n const removedOptions = ('autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists,' + 'template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format').split(',');\n const deprecatedOptions = [];\n const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,template,textcolor,rtc'.split(',');\n const deprecatedPlugins = [];\n const getMatchingOptions = (options, searchingFor) => {\n const settingNames = filter$5(searchingFor, setting => has$2(options, setting));\n return sort(settingNames);\n };\n const getRemovedOptions = options => {\n const settingNames = getMatchingOptions(options, removedOptions);\n const forcedRootBlock = options.forced_root_block;\n if (forcedRootBlock === false || forcedRootBlock === '') {\n settingNames.push('forced_root_block (false only)');\n }\n return sort(settingNames);\n };\n const getDeprecatedOptions = options => getMatchingOptions(options, deprecatedOptions);\n const getMatchingPlugins = (options, searchingFor) => {\n const plugins = Tools.makeMap(options.plugins, ' ');\n const hasPlugin = plugin => has$2(plugins, plugin);\n const pluginNames = filter$5(searchingFor, hasPlugin);\n return sort(pluginNames);\n };\n const getRemovedPlugins = options => getMatchingPlugins(options, removedPlugins);\n const getDeprecatedPlugins = options => getMatchingPlugins(options, deprecatedPlugins.map(entry => entry.name));\n const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n const removedOptions = getRemovedOptions(rawOptions);\n const removedPlugins = getRemovedPlugins(normalizedOptions);\n const hasRemovedPlugins = removedPlugins.length > 0;\n const hasRemovedOptions = removedOptions.length > 0;\n const isLegacyMobileTheme = normalizedOptions.theme === 'mobile';\n if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n const listJoiner = '\\n- ';\n const themesMessage = isLegacyMobileTheme ? `\\n\\nThemes:${ listJoiner }mobile` : '';\n const pluginsMessage = hasRemovedPlugins ? `\\n\\nPlugins:${ listJoiner }${ removedPlugins.join(listJoiner) }` : '';\n const optionsMessage = hasRemovedOptions ? `\\n\\nOptions:${ listJoiner }${ removedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled and have been removed in TinyMCE 7.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/7/migration-from-6x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n }\n };\n const getPluginDescription = name => find$2(deprecatedPlugins, entry => entry.name === name).fold(() => name, entry => {\n if (entry.replacedWith) {\n return `${ name }, replaced by ${ entry.replacedWith }`;\n } else {\n return name;\n }\n });\n const logDeprecatedWarnings = (rawOptions, normalizedOptions) => {\n const deprecatedOptions = getDeprecatedOptions(rawOptions);\n const deprecatedPlugins = getDeprecatedPlugins(normalizedOptions);\n const hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n const hasDeprecatedOptions = deprecatedOptions.length > 0;\n if (hasDeprecatedPlugins || hasDeprecatedOptions) {\n const listJoiner = '\\n- ';\n const pluginsMessage = hasDeprecatedPlugins ? `\\n\\nPlugins:${ listJoiner }${ deprecatedPlugins.map(getPluginDescription).join(listJoiner) }` : '';\n const optionsMessage = hasDeprecatedOptions ? `\\n\\nOptions:${ listJoiner }${ deprecatedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled but will be removed soon.' + pluginsMessage + optionsMessage);\n }\n };\n const logWarnings = (rawOptions, normalizedOptions) => {\n logRemovedWarnings(rawOptions, normalizedOptions);\n logDeprecatedWarnings(rawOptions, normalizedOptions);\n };\n\n const DOM$8 = DOMUtils.DOM;\n const restoreOriginalStyles = editor => {\n DOM$8.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n const safeDestroy = x => Optional.from(x).each(x => x.destroy());\n const clearDomReferences = editor => {\n const ed = editor;\n ed.contentAreaContainer = ed.formElement = ed.container = ed.editorContainer = null;\n ed.bodyElement = ed.contentDocument = ed.contentWindow = null;\n ed.iframeElement = ed.targetElm = null;\n const selection = editor.selection;\n if (selection) {\n const dom = selection.dom;\n ed.selection = selection.win = selection.dom = dom.doc = null;\n }\n };\n const restoreForm = editor => {\n const form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n delete form._mceOldSubmit;\n }\n DOM$8.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n const remove$1 = editor => {\n if (!editor.removed) {\n const {_selectionOverrides, editorUpload} = editor;\n const body = editor.getBody();\n const element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && isNonNullable(element === null || element === void 0 ? void 0 : element.nextSibling)) {\n DOM$8.remove(element.nextSibling);\n }\n fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n fireDetach(editor);\n DOM$8.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n const destroy = (editor, automatic) => {\n const {selection, dom} = editor;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n const CreateIconManager = () => {\n const lookup = {};\n const add = (id, iconPack) => {\n lookup[id] = iconPack;\n };\n const get = id => {\n if (lookup[id]) {\n return lookup[id];\n } else {\n return { icons: {} };\n }\n };\n const has = id => has$2(lookup, id);\n return {\n add,\n get,\n has\n };\n };\n const IconManager = CreateIconManager();\n\n const ModelManager = AddOnManager.ModelManager;\n\n const getProp = (propName, elm) => {\n const rawElm = elm.dom;\n return rawElm[propName];\n };\n const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n const getClientWidth = curry(getProp, 'clientWidth');\n const getClientHeight = curry(getProp, 'clientHeight');\n const getMarginTop = curry(getComputedSizeProp, 'margin-top');\n const getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n const getBoundingClientRect = elm => elm.dom.getBoundingClientRect();\n const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n const clientWidth = getClientWidth(bodyElm);\n const clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n const transpose = (inline, elm, clientX, clientY) => {\n const clientRect = getBoundingClientRect(elm);\n const deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n const deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n const x = clientX - deltaX;\n const y = clientY - deltaY;\n return {\n x,\n y\n };\n };\n const isXYInContentArea = (editor, clientX, clientY) => {\n const bodyElm = SugarElement.fromDom(editor.getBody());\n const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n const fromDomSafe = node => Optional.from(node).map(SugarElement.fromDom);\n const isEditorAttachedToDom = editor => {\n const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(inBody).getOr(false);\n };\n\n var NotificationManagerImpl = () => {\n const unimplemented = () => {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n getArgs: unimplemented\n };\n };\n\n const NotificationManager = editor => {\n const notifications = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n const getTopNotification = () => {\n return Optional.from(notifications[0]);\n };\n const isEqual = (a, b) => {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n const reposition = () => {\n getTopNotification().each(notification => {\n notification.reposition();\n });\n };\n const addNotification = notification => {\n notifications.push(notification);\n };\n const closeNotification = notification => {\n findIndex$2(notifications, otherNotification => {\n return otherNotification === notification;\n }).each(index => {\n notifications.splice(index, 1);\n });\n };\n const open = (spec, fireEvent = true) => {\n if (editor.removed || !isEditorAttachedToDom(editor)) {\n return {};\n }\n if (fireEvent) {\n editor.dispatch('BeforeOpenNotification', { notification: spec });\n }\n return find$2(notifications, notification => {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(() => {\n editor.editorManager.setActive(editor);\n const notification = getImplementation().open(spec, () => {\n closeNotification(notification);\n }, () => hasEditorOrUiFocus(editor));\n addNotification(notification);\n reposition();\n editor.dispatch('OpenNotification', { notification: { ...notification } });\n return notification;\n });\n };\n const close = () => {\n getTopNotification().each(notification => {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n const getNotifications = constant(notifications);\n const registerEvents = editor => {\n editor.on('SkinLoaded', () => {\n const serviceMessage = getServiceMessage(editor);\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0\n }, false);\n }\n reposition();\n });\n editor.on('show ResizeEditor ResizeWindow NodeChange ToggleView FullscreenStateChanged', () => {\n requestAnimationFrame(reposition);\n });\n editor.on('remove', () => {\n each$e(notifications.slice(), notification => {\n getImplementation().close(notification);\n });\n });\n editor.addShortcut('alt+F12', 'Focus to notification', () => getTopNotification().map(notificationApi => SugarElement.fromDom(notificationApi.getEl())).each(elm => focus$1(elm)));\n };\n registerEvents(editor);\n return {\n open,\n close,\n getNotifications\n };\n };\n\n const PluginManager = AddOnManager.PluginManager;\n\n const ThemeManager = AddOnManager.ThemeManager;\n\n var WindowManagerImpl = () => {\n const unimplemented = () => {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n openUrl: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented\n };\n };\n\n const WindowManager = editor => {\n let dialogs = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n const funcBind = (scope, f) => {\n return (...args) => {\n return f ? f.apply(scope, args) : undefined;\n };\n };\n const fireOpenEvent = dialog => {\n editor.dispatch('OpenWindow', { dialog });\n };\n const fireCloseEvent = dialog => {\n editor.dispatch('CloseWindow', { dialog });\n };\n const addDialog = dialog => {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n const closeDialog = dialog => {\n fireCloseEvent(dialog);\n dialogs = filter$5(dialogs, otherDialog => {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n const getTopDialog = () => {\n return Optional.from(dialogs[dialogs.length - 1]);\n };\n const storeSelectionAndOpenDialog = openDialog => {\n editor.editorManager.setActive(editor);\n store(editor);\n editor.ui.show();\n const dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n const open = (args, params) => {\n return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n };\n const openUrl = args => {\n return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n };\n const alert = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const confirm = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const close = () => {\n getTopDialog().each(dialog => {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', () => {\n each$e(dialogs, dialog => {\n getImplementation().close(dialog);\n });\n });\n return {\n open,\n openUrl,\n alert,\n confirm,\n close\n };\n };\n\n const displayNotification = (editor, message) => {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n const displayError = (editor, message) => {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', () => {\n displayNotification(editor, message);\n });\n }\n };\n const uploadError = (editor, message) => {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n const logError = (editor, errorType, msg) => {\n fireError(editor, errorType, { message: msg });\n console.error(msg);\n };\n const createLoadError = (type, url, name) => name ? `Failed to load ${ type }: ${ name } from url ${ url }` : `Failed to load ${ type } url: ${ url }`;\n const pluginLoadError = (editor, url, name) => {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n const iconsLoadError = (editor, url, name) => {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n const languageLoadError = (editor, url, name) => {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n };\n const themeLoadError = (editor, url, name) => {\n logError(editor, 'ThemeLoadError', createLoadError('theme', url, name));\n };\n const modelLoadError = (editor, url, name) => {\n logError(editor, 'ModelLoadError', createLoadError('model', url, name));\n };\n const pluginInitError = (editor, name, err) => {\n const message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n fireError(editor, 'PluginLoadError', { message });\n initError(message, err);\n displayError(editor, message);\n };\n const initError = (message, ...x) => {\n const console = window.console;\n if (console) {\n if (console.error) {\n console.error(message, ...x);\n } else {\n console.log(message, ...x);\n }\n }\n };\n\n const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n const toContentSkinResourceName = url => 'content/' + url + '/content.css';\n const isBundledCssSkinName = url => tinymce.Resource.has(toContentSkinResourceName(url));\n const getContentCssUrls = editor => {\n return transformToUrls(editor, getContentCss(editor));\n };\n const getFontCssUrls = editor => {\n return transformToUrls(editor, getFontCss(editor));\n };\n const transformToUrls = (editor, cssLinks) => {\n const skinUrl = editor.editorManager.baseURL + '/skins/content';\n const suffix = editor.editorManager.suffix;\n const contentCssFile = `content${ suffix }.css`;\n return map$3(cssLinks, url => {\n if (isBundledCssSkinName(url)) {\n return url;\n } else if (isContentCssSkinName(url) && !editor.inline) {\n return `${ skinUrl }/${ url }/${ contentCssFile }`;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n const appendContentCssFromSettings = editor => {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n };\n\n const getAllImages = elm => {\n return elm ? from(elm.getElementsByTagName('img')) : [];\n };\n const ImageScanner = (uploadStatus, blobCache) => {\n const cachedPromises = {};\n const findAll = (elm, predicate = always) => {\n const images = filter$5(getAllImages(elm), img => {\n const src = img.src;\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (startsWith(src, 'blob:')) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (startsWith(src, 'data:')) {\n return predicate(img);\n }\n return false;\n });\n const promises = map$3(images, img => {\n const imageSrc = img.src;\n if (has$2(cachedPromises, imageSrc)) {\n return cachedPromises[imageSrc].then(imageInfo => {\n if (isString(imageInfo)) {\n return imageInfo;\n } else {\n return {\n image: img,\n blobInfo: imageInfo.blobInfo\n };\n }\n });\n } else {\n const newPromise = imageToBlobInfo(blobCache, imageSrc).then(blobInfo => {\n delete cachedPromises[imageSrc];\n return {\n image: img,\n blobInfo\n };\n }).catch(error => {\n delete cachedPromises[imageSrc];\n return error;\n });\n cachedPromises[imageSrc] = newPromise;\n return newPromise;\n }\n });\n return Promise.all(promises);\n };\n return { findAll };\n };\n\n const UploadStatus = () => {\n const PENDING = 1, UPLOADED = 2;\n let blobUriStatuses = {};\n const createStatus = (status, resultUri) => {\n return {\n status,\n resultUri\n };\n };\n const hasBlobUri = blobUri => {\n return blobUri in blobUriStatuses;\n };\n const getResultUri = blobUri => {\n const result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n const isPending = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n const isUploaded = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n const markPending = blobUri => {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n const markUploaded = (blobUri, resultUri) => {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n const removeFailed = blobUri => {\n delete blobUriStatuses[blobUri];\n };\n const destroy = () => {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri,\n getResultUri,\n isPending,\n isUploaded,\n markPending,\n markUploaded,\n removeFailed,\n destroy\n };\n };\n\n let count = 0;\n const seed = () => {\n const rnd = () => {\n return Math.round(random() * 4294967295).toString(36);\n };\n const now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n const uuid = prefix => {\n return prefix + count++ + seed();\n };\n\n const BlobCache = () => {\n let cache = [];\n const mimeToExt = mime => {\n const mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png',\n 'image/apng': 'apng',\n 'image/avif': 'avif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/tiff': 'tiff'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n const create = (o, blob, base64, name, filename) => {\n if (isString(o)) {\n const id = o;\n return toBlobInfo({\n id,\n name,\n filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n const toBlobInfo = o => {\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n const id = o.id || uuid('blobid');\n const name = o.name || id;\n const blob = o.blob;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n blob: constant(blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n uri: constant(o.uri)\n };\n };\n const add = blobInfo => {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n const findFirst = predicate => find$2(cache, predicate).getOrUndefined();\n const get = id => findFirst(cachedBlobInfo => cachedBlobInfo.id() === id);\n const getByUri = blobUri => findFirst(blobInfo => blobInfo.blobUri() === blobUri);\n const getByData = (base64, type) => findFirst(blobInfo => blobInfo.base64() === base64 && blobInfo.blob().type === type);\n const removeByUri = blobUri => {\n cache = filter$5(cache, blobInfo => {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n const destroy = () => {\n each$e(cache, cachedBlobInfo => {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create,\n add,\n get,\n getByUri,\n getByData,\n findFirst,\n removeByUri,\n destroy\n };\n };\n\n const Uploader = (uploadStatus, settings) => {\n const pendingPromises = {};\n const pathJoin = (path1, path2) => {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = e => {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = () => {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n const json = JSON.parse(xhr.responseText);\n if (!json || !isString(json.location)) {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n const formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n });\n const uploadHandler = isFunction(settings.handler) ? settings.handler : defaultHandler;\n const noUpload = () => new Promise(resolve => {\n resolve([]);\n });\n const handlerSuccess = (blobInfo, url) => ({\n url,\n blobInfo,\n status: true\n });\n const handlerFailure = (blobInfo, error) => ({\n url: '',\n blobInfo,\n status: false,\n error\n });\n const resolvePending = (blobUri, result) => {\n Tools.each(pendingPromises[blobUri], resolve => {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n const uploadBlobInfo = (blobInfo, handler, openNotification) => {\n uploadStatus.markPending(blobInfo.blobUri());\n return new Promise(resolve => {\n let notification;\n let progress;\n try {\n const closeNotification = () => {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n const success = url => {\n closeNotification();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n const failure = error => {\n closeNotification();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = percent => {\n if (percent < 0 || percent > 100) {\n return;\n }\n Optional.from(notification).orThunk(() => Optional.from(openNotification).map(apply$1)).each(n => {\n notification = n;\n n.progressBar.value(percent);\n });\n };\n handler(blobInfo, progress).then(success, err => {\n failure(isString(err) ? { message: err } : err);\n });\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex));\n }\n });\n };\n const isDefaultHandler = handler => handler === defaultHandler;\n const pendingUploadBlobInfo = blobInfo => {\n const blobUri = blobInfo.blobUri();\n return new Promise(resolve => {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n const uploadBlobs = (blobInfos, openNotification) => {\n blobInfos = Tools.grep(blobInfos, blobInfo => !uploadStatus.isUploaded(blobInfo.blobUri()));\n return Promise.all(Tools.map(blobInfos, blobInfo => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, uploadHandler, openNotification)));\n };\n const upload = (blobInfos, openNotification) => !settings.url && isDefaultHandler(uploadHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n return { upload };\n };\n\n const openNotification = editor => () => editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n const createUploader = (editor, uploadStatus) => Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: getImagesUploadHandler(editor)\n });\n const ImageUploader = editor => {\n const uploadStatus = UploadStatus();\n const uploader = createUploader(editor, uploadStatus);\n return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined) };\n };\n\n const isEmptyForPadding = (editor, element) => editor.dom.isEmpty(element.dom) && isNonNullable(editor.schema.getTextBlockElements()[name(element)]);\n const addPaddingToEmpty = editor => element => {\n if (isEmptyForPadding(editor, element)) {\n append$1(element, SugarElement.fromHtml('
    '));\n }\n };\n const EditorUpload = editor => {\n const blobCache = BlobCache();\n let uploader, imageScanner;\n const uploadStatus = UploadStatus();\n const urlFilters = [];\n const aliveGuard = callback => {\n return result => {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n const cacheInvalidator = url => url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n const replaceString = (content, search, replace) => {\n let index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n const replacementString = `src=\"${ replacementUrl }\"${ replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '' }`;\n content = replaceString(content, `src=\"${ targetUrl }\"`, replacementString);\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n each$e(editor.undoManager.data, level => {\n if (level.type === 'fragmented') {\n level.fragments = map$3(level.fragments, fragment => replaceImageUrl(fragment, targetUrl, replacementUrl));\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n const replaceImageUriInView = (image, resultUri) => {\n const src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n setAll$1(SugarElement.fromDom(image), {\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n const uploadImages = () => {\n if (!uploader) {\n uploader = createUploader(editor, uploadStatus);\n }\n return scanForImages().then(aliveGuard(imageInfos => {\n const blobInfos = map$3(imageInfos, imageInfo => imageInfo.blobInfo);\n return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(result => {\n const imagesToRemove = [];\n let shouldDispatchChange = false;\n const filteredResult = map$3(result, (uploadInfo, index) => {\n const {blobInfo, image} = imageInfos[index];\n let removed = false;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n if (uploadInfo.url && !contains$1(image.src, uploadInfo.url)) {\n shouldDispatchChange = true;\n }\n blobCache.removeByUri(image.src);\n if (isRtc(editor)) ; else {\n replaceImageUriInView(image, uploadInfo.url);\n }\n } else if (uploadInfo.error) {\n if (uploadInfo.error.remove) {\n replaceUrlInUndoStack(image.src, Env.transparentSrc);\n imagesToRemove.push(image);\n removed = true;\n }\n uploadError(editor, uploadInfo.error.message);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo,\n removed\n };\n });\n if (imagesToRemove.length > 0 && !isRtc(editor)) {\n editor.undoManager.transact(() => {\n each$e(fromDom$1(imagesToRemove), sugarElement => {\n const parentOpt = parent(sugarElement);\n remove$4(sugarElement);\n parentOpt.each(addPaddingToEmpty(editor));\n blobCache.removeByUri(sugarElement.dom.src);\n });\n });\n } else if (shouldDispatchChange) {\n editor.undoManager.dispatchChange();\n }\n return filteredResult;\n }));\n }));\n };\n const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n const isValidDataUriImage = imgElm => forall(urlFilters, filter => filter(imgElm));\n const addFilter = filter => {\n urlFilters.push(filter);\n };\n const scanForImages = () => {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(result => {\n const filteredResult = filter$5(result, resultItem => {\n if (isString(resultItem)) {\n displayError(editor, resultItem);\n return false;\n } else if (resultItem.uriType === 'blob') {\n return false;\n } else {\n return true;\n }\n });\n if (isRtc(editor)) ; else {\n each$e(filteredResult, resultItem => {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n }\n return filteredResult;\n }));\n };\n const destroy = () => {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n const replaceBlobUris = content => {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, (match, blobUri) => {\n const resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n let blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), (result, editor) => {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, undefined);\n }\n if (blobInfo) {\n const blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', () => {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', e => {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', e => {\n if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', () => {\n editor.parser.addNodeFilter('img', images => {\n each$e(images, img => {\n const src = img.attr('src');\n if (!src || blobCache.getByUri(src)) {\n return;\n }\n const resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache,\n addFilter,\n uploadImages,\n uploadImagesAuto,\n scanForImages,\n destroy\n };\n };\n\n const get$1 = editor => {\n const dom = editor.dom;\n const schemaType = editor.schema.type;\n const formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: '0px',\n marginRight: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'left' }\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object',\n ceFalseOverride: true,\n styles: {\n display: 'table',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: '[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginRight: '0px',\n marginLeft: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'right' },\n preview: false\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'justify' },\n inherit: false,\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n strikethrough: (() => {\n const span = {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n };\n const strike = {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n const s = {\n inline: 's',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n return schemaType !== 'html4' ? [\n s,\n span,\n strike\n ] : [\n span,\n s,\n strike\n ];\n })(),\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n lineheight: {\n selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n styles: { lineHeight: '%value' }\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: true,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: (node, _fmt, _itemName) => {\n return isElement$6(node) && node.hasAttribute('href');\n },\n onformat: (elm, _fmt, vars) => {\n Tools.each(vars, (value, key) => {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n lang: {\n inline: 'span',\n clear_child_styles: true,\n remove_similar: true,\n attributes: {\n 'lang': '%value',\n 'data-mce-lang': vars => {\n var _a;\n return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n }\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\\s/), name => {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n const genericBase = {\n remove_similar: true,\n inherit: false\n };\n const cellBase = {\n selector: 'td,th',\n ...genericBase\n };\n const cellFormats = {\n tablecellbackgroundcolor: {\n styles: { backgroundColor: '%value' },\n ...cellBase\n },\n tablecellverticalalign: {\n styles: { 'vertical-align': '%value' },\n ...cellBase\n },\n tablecellbordercolor: {\n styles: { borderColor: '%value' },\n ...cellBase\n },\n tablecellclass: {\n classes: ['%value'],\n ...cellBase\n },\n tableclass: {\n selector: 'table',\n classes: ['%value'],\n ...genericBase\n },\n tablecellborderstyle: {\n styles: { borderStyle: '%value' },\n ...cellBase\n },\n tablecellborderwidth: {\n styles: { borderWidth: '%value' },\n ...cellBase\n }\n };\n const get = constant(cellFormats);\n\n const FormatRegistry = editor => {\n const formats = {};\n const get$2 = name => isNonNullable(name) ? formats[name] : formats;\n const has = name => has$2(formats, name);\n const register = (name, format) => {\n if (name) {\n if (!isString(name)) {\n each$d(name, (format, name) => {\n register(name, format);\n });\n } else {\n if (!isArray$1(format)) {\n format = [format];\n }\n each$e(format, format => {\n if (isUndefined(format.deep)) {\n format.deep = !isSelectorFormat(format);\n }\n if (isUndefined(format.split)) {\n format.split = !isSelectorFormat(format) || isInlineFormat(format);\n }\n if (isUndefined(format.remove) && isSelectorFormat(format) && !isInlineFormat(format)) {\n format.remove = 'none';\n }\n if (isSelectorFormat(format) && isInlineFormat(format)) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (isString(format.classes)) {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n const unregister = name => {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(get$1(editor));\n register(get());\n register(getFormats(editor));\n return {\n get: get$2,\n has,\n register,\n unregister\n };\n };\n\n const each$3 = Tools.each;\n const dom = DOMUtils.DOM;\n const isPreviewItem = item => isNonNullable(item) && isObject(item);\n const parsedSelectorToHtml = (ancestry, editor) => {\n const schema = editor && editor.schema || Schema({});\n const decorate = (elm, item) => {\n if (item.classes.length > 0) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n const createElement = sItem => {\n const item = isString(sItem) ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n const elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n const getRequiredParent = (elm, candidate) => {\n const elmRule = schema.getElementRule(elm.nodeName.toLowerCase());\n const parentsRequired = elmRule === null || elmRule === void 0 ? void 0 : elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && contains$2(parentsRequired, candidate) ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n const wrapInHtml = (elm, ancestors, siblings) => {\n let parentCandidate;\n const ancestor = ancestors[0];\n const ancestorName = isPreviewItem(ancestor) ? ancestor.name : undefined;\n const parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else if (!siblings) {\n return elm;\n }\n const parent = parentCandidate ? createElement(parentCandidate) : dom.create('div');\n parent.appendChild(elm);\n if (siblings) {\n Tools.each(siblings, sibling => {\n const siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n const parentSiblings = isPreviewItem(parentCandidate) ? parentCandidate.siblings : undefined;\n return wrapInHtml(parent, ancestors, parentSiblings);\n };\n const fragment = dom.create('div');\n if (ancestry.length > 0) {\n const item = ancestry[0];\n const elm = createElement(item);\n const siblings = isPreviewItem(item) ? item.siblings : undefined;\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), siblings));\n }\n return fragment;\n };\n const parseSelectorItem = item => {\n item = Tools.trim(item);\n let tagName = 'div';\n const obj = {\n name: tagName,\n classes: [],\n attrs: {},\n selector: item\n };\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($0, $1, $2, $3, $4) => {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n const m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n const parseSelector = selector => {\n if (!isString(selector)) {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), item => {\n const siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n const obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n const getCssText = (editor, format) => {\n let previewCss = '';\n let previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n const removeVars = val => {\n return isString(val) ? val.replace(/%(\\w+)/g, '') : '';\n };\n const getComputedStyle = (name, elm) => {\n return dom.getStyle(elm !== null && elm !== void 0 ? elm : editor.getBody(), name, true);\n };\n if (isString(format)) {\n const formats = editor.formatter.get(format);\n if (!formats) {\n return '';\n }\n format = formats[0];\n }\n if ('preview' in format) {\n const preview = format.preview;\n if (preview === false) {\n return '';\n } else {\n previewStyles = preview || previewStyles;\n }\n }\n let name = format.block || format.inline || 'span';\n let previewFrag;\n const items = parseSelector(format.selector);\n if (items.length > 0) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n const previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$3(format.styles, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setStyle(previewElm, name, newValue);\n }\n });\n each$3(format.attributes, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setAttrib(previewElm, name, newValue);\n }\n });\n each$3(format.classes, value => {\n const newValue = removeVars(value);\n if (!dom.hasClass(previewElm, newValue)) {\n dom.addClass(previewElm, newValue);\n }\n });\n editor.dispatch('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n const rawParentFontSize = getComputedStyle('fontSize');\n const parentFontSize = /px$/.test(rawParentFontSize) ? parseInt(rawParentFontSize, 10) : 0;\n each$3(previewStyles.split(' '), name => {\n let value = getComputedStyle(name, previewElm);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = getComputedStyle(name);\n if (rgbaToHexString(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (rgbaToHexString(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n const numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.dispatch('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n\n const setup$s = editor => {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (let i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n\n const Formatter = editor => {\n const formats = FormatRegistry(editor);\n const formatChangeState = Cell({});\n setup$s(editor);\n setup$v(editor);\n if (!isRtc(editor)) {\n setup$u(formatChangeState, editor);\n }\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: (name, vars, node) => {\n applyFormat(editor, name, vars, node);\n },\n remove: (name, vars, node, similar) => {\n removeFormat(editor, name, vars, node, similar);\n },\n toggle: (name, vars, node) => {\n toggleFormat(editor, name, vars, node);\n },\n match: (name, vars, node, similar) => matchFormat(editor, name, vars, node, similar),\n closest: names => closestFormat(editor, names),\n matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNodeFormat(editor, node, name, vars, similar),\n canApply: name => canApplyFormat(editor, name),\n formatChanged: (formats, callback, similar, vars) => formatChanged(editor, formatChangeState, formats, callback, similar, vars),\n getCssText: curry(getCssText, editor)\n };\n };\n\n const shouldIgnoreCommand = cmd => {\n switch (cmd.toLowerCase()) {\n case 'undo':\n case 'redo':\n case 'mcefocus':\n return true;\n default:\n return false;\n }\n };\n const registerEvents = (editor, undoManager, locks) => {\n const isFirstTypedCharacter = Cell(false);\n const addNonTypingUndoLevel = e => {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', () => {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', () => {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', e => {\n const keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n const isMeta = Env.os.isMacOS() && e.key === 'Meta';\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey || isMeta) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter.get() && undoManager.typing && !isEq$1(createFromEditor(editor), undoManager.data[0])) {\n if (!editor.isDirty()) {\n editor.setDirty(true);\n }\n editor.dispatch('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n const modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n return;\n }\n const hasOnlyMetaOrCtrlModifier = Env.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n if (hasOnlyMetaOrCtrlModifier) {\n undoManager.beforeChange();\n }\n });\n editor.on('mousedown', e => {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n const isInsertReplacementText = event => event.inputType === 'insertReplacementText';\n const isInsertTextDataNull = event => event.inputType === 'insertText' && event.data === null;\n const isInsertFromPasteOrDrop = event => event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n editor.on('input', e => {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', e => {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n const addKeyboardShortcuts = editor => {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n const UndoManager = editor => {\n const beforeBookmark = value$2();\n const locks = Cell(0);\n const index = Cell(0);\n const undoManager = {\n data: [],\n typing: false,\n beforeChange: () => {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: (level, event) => {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n dispatchChange: () => {\n editor.setDirty(true);\n const level = createFromEditor(editor);\n level.bookmark = getUndoBookmark(editor.selection);\n editor.dispatch('change', {\n level,\n lastLevel: get$b(undoManager.data, index.get()).getOrUndefined()\n });\n },\n undo: () => {\n return undo(editor, undoManager, locks, index);\n },\n redo: () => {\n return redo(editor, index, undoManager.data);\n },\n clear: () => {\n clear(editor, undoManager, index);\n },\n reset: () => {\n reset(editor, undoManager);\n },\n hasUndo: () => {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: () => {\n return hasRedo(editor, undoManager, index);\n },\n transact: callback => {\n return transact(editor, undoManager, locks, callback);\n },\n ignore: callback => {\n ignore(editor, locks, callback);\n },\n extra: (callback1, callback2) => {\n extra(editor, undoManager, index, callback1, callback2);\n }\n };\n if (!isRtc(editor)) {\n registerEvents(editor, undoManager, locks);\n }\n addKeyboardShortcuts(editor);\n return undoManager;\n };\n\n const nonTypingKeycodes = [\n 9,\n 27,\n VK.HOME,\n VK.END,\n 19,\n 20,\n 44,\n 144,\n 145,\n 33,\n 34,\n 45,\n 16,\n 17,\n 18,\n 91,\n 92,\n 93,\n VK.DOWN,\n VK.UP,\n VK.LEFT,\n VK.RIGHT\n ].concat(Env.browser.isFirefox() ? [224] : []);\n const placeholderAttr = 'data-mce-placeholder';\n const isKeyboardEvent = e => e.type === 'keydown' || e.type === 'keyup';\n const isDeleteEvent = e => {\n const keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n const isNonTypingKeyboardEvent = e => {\n if (isKeyboardEvent(e)) {\n const keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n const isTypingKeyboardEvent = e => isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n const isVisuallyEmpty = (dom, rootElm, forcedRootBlock) => {\n if (dom.isEmpty(rootElm, undefined, {\n skipBogus: false,\n includeZwsp: true\n })) {\n const firstElement = rootElm.firstElementChild;\n if (!firstElement) {\n return true;\n } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n return false;\n } else {\n return forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n const setup$r = editor => {\n var _a;\n const dom = editor.dom;\n const rootBlock = getForcedRootBlock(editor);\n const placeholder = (_a = getPlaceholder(editor)) !== null && _a !== void 0 ? _a : '';\n const updatePlaceholder = (e, initial) => {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n const body = editor.getBody();\n const showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n const isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (isNotEmpty(placeholder)) {\n editor.on('init', e => {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', e => Delay.setEditorTimeout(editor, () => updatePlaceholder(e)));\n });\n }\n };\n\n const blockPosition = (block, position) => ({\n block,\n position\n });\n const blockBoundary = (from, to) => ({\n from,\n to\n });\n const getBlockPosition = (rootNode, pos) => {\n const rootElm = SugarElement.fromDom(rootNode);\n const containerElm = SugarElement.fromDom(pos.container());\n return getParentBlock$2(rootElm, containerElm).map(block => blockPosition(block, pos));\n };\n const isNotAncestorial = blockBoundary => !(contains(blockBoundary.to.block, blockBoundary.from.block) || contains(blockBoundary.from.block, blockBoundary.to.block));\n const isDifferentBlocks = blockBoundary => !eq(blockBoundary.from.block, blockBoundary.to.block);\n const getClosestHost = (root, scope) => {\n const isRoot = node => eq(node, root);\n const isHost = node => isTableCell$2(node) || isContentEditableTrue$3(node.dom);\n return closest$4(scope, isHost, isRoot).filter(isElement$7).getOr(root);\n };\n const hasSameHost = (rootNode, blockBoundary) => {\n const root = SugarElement.fromDom(rootNode);\n return eq(getClosestHost(root, blockBoundary.from.block), getClosestHost(root, blockBoundary.to.block));\n };\n const isEditable$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n const hasValidBlocks = blockBoundary => {\n const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom) || isListItem$1(block);\n return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n };\n const skipLastBr = (schema, rootNode, forward, blockPosition) => {\n if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(schema, blockPosition.block)) {\n return positionIn(false, blockPosition.block.dom).bind(lastPositionInBlock => {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(to => getBlockPosition(rootNode, to));\n } else {\n return Optional.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n const readFromRange = (schema, rootNode, forward, rng) => {\n const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n const toBlockPos = fromBlockPos.bind(blockPos => fromPosition(forward, rootNode, blockPos.position).bind(to => getBlockPosition(rootNode, to).map(blockPos => skipLastBr(schema, rootNode, forward, blockPos))));\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$1(blockBoundary) && hasValidBlocks(blockBoundary) && isNotAncestorial(blockBoundary));\n };\n const read$1 = (schema, rootNode, forward, rng) => rng.collapsed ? readFromRange(schema, rootNode, forward, rng) : Optional.none();\n\n const getChildrenUntilBlockBoundary = (block, schema) => {\n const children = children$1(block);\n return findIndex$2(children, el => schema.isBlock(name(el))).fold(constant(children), index => children.slice(0, index));\n };\n const extractChildren = (block, schema) => {\n const children = getChildrenUntilBlockBoundary(block, schema);\n each$e(children, remove$4);\n return children;\n };\n const removeEmptyRoot = (schema, rootNode, block) => {\n const parents = parentsAndSelf(block, rootNode);\n return find$2(parents.reverse(), element => isEmpty$2(schema, element)).each(remove$4);\n };\n const isEmptyBefore = (schema, el) => filter$5(prevSiblings(el), el => !isEmpty$2(schema, el)).length === 0;\n const nestedBlockMerge = (rootNode, fromBlock, toBlock, schema, insertionPoint) => {\n if (isEmpty$2(schema, toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom);\n }\n if (isEmptyBefore(schema, insertionPoint) && isEmpty$2(schema, fromBlock)) {\n before$3(insertionPoint, SugarElement.fromTag('br'));\n }\n const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each$e(extractChildren(fromBlock, schema), child => {\n before$3(insertionPoint, child);\n });\n removeEmptyRoot(schema, rootNode, fromBlock);\n return position;\n };\n const isInline = (schema, node) => schema.isInline(name(node));\n const sidelongBlockMerge = (rootNode, fromBlock, toBlock, schema) => {\n if (isEmpty$2(schema, toBlock)) {\n if (isEmpty$2(schema, fromBlock)) {\n const getInlineToBlockDescendants = el => {\n const helper = (node, elements) => firstChild(node).fold(() => elements, child => isInline(schema, child) ? helper(child, elements.concat(shallow$1(child))) : elements);\n return helper(el, []);\n };\n const newFromBlockDescendants = foldr(getInlineToBlockDescendants(toBlock), (element, descendant) => {\n wrap$2(element, descendant);\n return descendant;\n }, createPaddingBr());\n empty(fromBlock);\n append$1(fromBlock, newFromBlockDescendants);\n }\n remove$4(toBlock);\n return firstPositionIn(fromBlock.dom);\n }\n const position = lastPositionIn(toBlock.dom);\n each$e(extractChildren(fromBlock, schema), child => {\n append$1(toBlock, child);\n });\n removeEmptyRoot(schema, rootNode, fromBlock);\n return position;\n };\n const findInsertionPoint = (toBlock, block) => {\n const parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n };\n const getInsertionPoint = (fromBlock, toBlock) => contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n const trimBr = (first, block) => {\n positionIn(first, block.dom).bind(position => Optional.from(position.getNode())).map(SugarElement.fromDom).filter(isBr$5).each(remove$4);\n };\n const mergeBlockInto = (rootNode, fromBlock, toBlock, schema) => {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock, schema), curry(nestedBlockMerge, rootNode, fromBlock, toBlock, schema));\n };\n const mergeBlocks = (rootNode, forward, block1, block2, schema) => forward ? mergeBlockInto(rootNode, block2, block1, schema) : mergeBlockInto(rootNode, block1, block2, schema);\n\n const backspaceDelete$a = (editor, forward) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const position = read$1(editor.schema, rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block, editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n });\n return position;\n };\n\n const deleteRangeMergeBlocks = (rootNode, selection, schema) => {\n const rng = selection.getRng();\n return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n if (!eq(block1, block2)) {\n return Optional.some(() => {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2, schema).each(pos => {\n selection.setRng(pos.toRange());\n });\n });\n } else {\n return Optional.none();\n }\n }).getOr(Optional.none());\n };\n const isRawNodeInTable = (root, rawNode) => {\n const node = SugarElement.fromDom(rawNode);\n const isRoot = curry(eq, root);\n return ancestor$4(node, isTableCell$2, isRoot).isSome();\n };\n const isSelectionInTable = (root, rng) => isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n const isEverythingSelected = (root, rng) => {\n const noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n const noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n const emptyEditor = editor => {\n return Optional.some(() => {\n editor.setContent('');\n editor.selection.setCursorLocation();\n });\n };\n const deleteRange$2 = editor => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection, editor.schema);\n };\n const backspaceDelete$9 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(editor);\n\n const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n const getNodeRange = node => {\n const rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n const selectNode = (editor, node) => {\n const e = editor.dispatch('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return Optional.none();\n }\n return Optional.some(getNodeRange(node));\n };\n const renderCaretAtRange = (editor, range, scrollIntoView) => {\n const normalizedRange = normalizeRange(1, editor.getBody(), range);\n const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n const caretPositionNode = caretPosition.getNode();\n if (isInlineFakeCaretTarget(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n const caretPositionBeforeNode = caretPosition.getNode(true);\n if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n const ceRoot = getContentEditableRoot$1(editor.dom.getRoot(), caretPosition.getNode());\n if (isInlineFakeCaretTarget(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return Optional.none();\n };\n const renderRangeCaret = (editor, range, scrollIntoView) => range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n\n const isBeforeBoundary = pos => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n const isAfterBoundary = pos => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n const trimEmptyTextNode = (dom, node) => {\n if (isText$b(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const deleteContentAndShowCaret = (editor, range, node, direction, forward, peekCaretPosition) => {\n showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(caretRange => {\n if (range.collapsed) {\n const deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n });\n trimEmptyTextNode(editor.dom, node);\n };\n const deleteBoundaryText = (editor, forward) => {\n const range = editor.selection.getRng();\n if (!isText$b(range.commonAncestorContainer)) {\n return Optional.none();\n }\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const nextCaretPosition = getNextPosFn(caretPosition);\n const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n return Optional.none();\n } else if (isBeforeFn(normalizedNextCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n }\n const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n }\n }\n return Optional.none();\n };\n const backspaceDelete$8 = (editor, forward) => deleteBoundaryText(editor, forward);\n\n const getEdgeCefPosition = (editor, atStart) => {\n const root = editor.getBody();\n return atStart ? firstPositionIn(root).filter(isBeforeContentEditableFalse) : lastPositionIn(root).filter(isAfterContentEditableFalse);\n };\n const isCefAtEdgeSelected = editor => {\n const rng = editor.selection.getRng();\n return !rng.collapsed && (getEdgeCefPosition(editor, true).exists(pos => pos.isEqual(CaretPosition.fromRangeStart(rng))) || getEdgeCefPosition(editor, false).exists(pos => pos.isEqual(CaretPosition.fromRangeEnd(rng))));\n };\n\n const isCompoundElement = node => isNonNullable(node) && (isTableCell$2(SugarElement.fromDom(node)) || isListItem$1(SugarElement.fromDom(node)));\n const DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n const isAtContentEditableBlockCaret = (forward, from) => {\n const elm = from.getNode(!forward);\n const caretLocation = forward ? 'after' : 'before';\n return isElement$6(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n const isDeleteFromCefDifferentBlocks = (root, forward, from, to, schema) => {\n const inSameBlock = elm => schema.isInline(elm.nodeName.toLowerCase()) && !isInSameBlock(from, to, root);\n return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n };\n const deleteEmptyBlockOrMoveToCef = (schema, root, forward, from, to) => {\n const toCefElm = to.getNode(!forward);\n return getParentBlock$2(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(blockElm => isEmpty$2(schema, blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n };\n const findCefPosition = (root, forward, from, schema) => fromPosition(forward, root, from).bind(to => {\n if (isCompoundElement(to.getNode())) {\n return Optional.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to, schema)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(schema, root, forward, from, to);\n } else if (!forward && isContentEditableFalse$b(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(schema, root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else if (!forward && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else {\n return Optional.none();\n }\n });\n const getContentEditableBlockAction = (forward, elm) => {\n if (isNullable(elm)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (!forward && isContentEditableFalse$b(elm.previousSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Optional.none();\n }\n };\n const skipMoveToActionFromInlineCefToContent = (root, from, deleteAction) => deleteAction.fold(elm => Optional.some(DeleteAction.remove(elm)), elm => Optional.some(DeleteAction.moveToElement(elm)), to => {\n if (isInSameBlock(from, to, root)) {\n return Optional.none();\n } else {\n return Optional.some(DeleteAction.moveToPosition(to));\n }\n });\n const getContentEditableAction = (root, forward, from, schema) => {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from, schema));\n } else {\n return findCefPosition(root, forward, from, schema).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n }\n };\n const read = (root, forward, rng, schema) => {\n const normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n const from = CaretPosition.fromRangeStart(normalizedRange);\n const rootElement = SugarElement.fromDom(root);\n if (!forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode()));\n } else if (!forward && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from, schema)) {\n return findPreviousBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from, schema)) {\n return findNextBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else {\n return getContentEditableAction(root, forward, from, schema);\n }\n };\n\n const deleteElement$1 = (editor, forward) => element => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n const moveToElement = (editor, forward) => element => {\n const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const moveToPosition = editor => pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n const backspaceDeleteCaret = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(() => read(editor.getBody(), forward, editor.selection.getRng(), editor.schema).map(deleteAction => () => deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n };\n const deleteOffscreenSelection = rootElement => {\n each$e(descendants(rootElement, '.mce-offscreen-selection'), remove$4);\n };\n const backspaceDeleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n if (isContentEditableFalse$b(selectedNode) && !isTableCell$3(selectedNode)) {\n const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n return hasCefAncestor.fold(() => Optional.some(() => {\n deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n paddEmptyBody(editor);\n }), () => Optional.some(noop));\n }\n if (isCefAtEdgeSelected(editor)) {\n return Optional.some(() => {\n deleteRangeContents(editor, editor.selection.getRng(), SugarElement.fromDom(editor.getBody()));\n });\n }\n return Optional.none();\n };\n const paddEmptyElement = editor => {\n const dom = editor.dom, selection = editor.selection;\n const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n if (isContentEditableTrue$3(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n const br = dom.create('br', { 'data-mce-bogus': '1' });\n dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n selection.setRng(CaretPosition.before(br).toRange());\n }\n return true;\n };\n const backspaceDelete$7 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n const isTextEndpoint = endpoint => endpoint.hasOwnProperty('text');\n const isElementEndpoint = endpoint => endpoint.hasOwnProperty('marker');\n const getBookmark = (range, createMarker) => {\n const getEndpoint = (container, offset) => {\n if (isText$b(container)) {\n return {\n text: container,\n offset\n };\n } else {\n const marker = createMarker();\n const children = container.childNodes;\n if (offset < children.length) {\n container.insertBefore(marker, children[offset]);\n return {\n marker,\n before: true\n };\n } else {\n container.appendChild(marker);\n return {\n marker,\n before: false\n };\n }\n }\n };\n const end = getEndpoint(range.endContainer, range.endOffset);\n const start = getEndpoint(range.startContainer, range.startOffset);\n return {\n start,\n end\n };\n };\n const resolveBookmark = bm => {\n var _a, _b;\n const {start, end} = bm;\n const rng = new window.Range();\n if (isTextEndpoint(start)) {\n rng.setStart(start.text, start.offset);\n } else {\n if (isElementEndpoint(start)) {\n if (start.before) {\n rng.setStartBefore(start.marker);\n } else {\n rng.setStartAfter(start.marker);\n }\n (_a = start.marker.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(start.marker);\n }\n }\n if (isTextEndpoint(end)) {\n rng.setEnd(end.text, end.offset);\n } else {\n if (isElementEndpoint(end)) {\n if (end.before) {\n rng.setEndBefore(end.marker);\n } else {\n rng.setEndAfter(end.marker);\n }\n (_b = end.marker.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(end.marker);\n }\n }\n return rng;\n };\n\n const backspaceDelete$6 = (editor, forward) => {\n var _a;\n const dom = editor.dom;\n const startBlock = dom.getParent(editor.selection.getStart(), dom.isBlock);\n const endBlock = dom.getParent(editor.selection.getEnd(), dom.isBlock);\n const body = editor.getBody();\n const startBlockName = (_a = startBlock === null || startBlock === void 0 ? void 0 : startBlock.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n if (startBlockName === 'div' && startBlock && endBlock && startBlock === body.firstChild && endBlock === body.lastChild && !dom.isEmpty(body)) {\n const wrapper = startBlock.cloneNode(false);\n const deleteAction = () => {\n if (forward) {\n execNativeForwardDeleteCommand(editor);\n } else {\n execNativeDeleteCommand(editor);\n }\n if (body.firstChild !== startBlock) {\n const bookmark = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n Array.from(body.childNodes).forEach(node => wrapper.appendChild(node));\n body.appendChild(wrapper);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n return Optional.some(deleteAction);\n }\n return Optional.none();\n };\n\n const deleteCaret$2 = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));\n };\n const backspaceDelete$5 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n const isText$2 = isText$b;\n const startsWithCaretContainer = node => isText$2(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer = node => isText$2(node) && node.data[node.data.length - 1] === ZWSP$1;\n const createZwsp = node => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return doc.createTextNode(ZWSP$1);\n };\n const insertBefore$1 = node => {\n var _a;\n if (isText$2(node.previousSibling)) {\n if (endsWithCaretContainer(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(ZWSP$1);\n return node.previousSibling;\n }\n } else if (isText$2(node)) {\n if (startsWithCaretContainer(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node);\n return newNode;\n }\n };\n const insertAfter$1 = node => {\n var _a, _b;\n if (isText$2(node.nextSibling)) {\n if (startsWithCaretContainer(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, ZWSP$1);\n return node.nextSibling;\n }\n } else if (isText$2(node)) {\n if (endsWithCaretContainer(node)) {\n return node;\n } else {\n node.appendData(ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n if (node.nextSibling) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node.nextSibling);\n } else {\n (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(newNode);\n }\n return newNode;\n }\n };\n const insertInline = (before, node) => before ? insertBefore$1(node) : insertAfter$1(node);\n const insertInlineBefore = curry(insertInline, true);\n const insertInlineAfter = curry(insertInline, false);\n\n const insertInlinePos = (pos, before) => {\n if (isText$b(pos.container())) {\n return insertInline(before, pos.container());\n } else {\n return insertInline(before, pos.getNode());\n }\n };\n const isPosCaretContainer = (pos, caret) => {\n const caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n const renderCaret = (caret, location) => location.fold(element => {\n remove$2(caret.get());\n const text = insertInlineBefore(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, text.length - 1));\n }, element => firstPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n const text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition(text, 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, 1);\n }\n }), element => lastPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n const text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition(text, text.length - 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, node.length - 1);\n }\n }), element => {\n remove$2(caret.get());\n const text = insertInlineAfter(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, 1));\n });\n\n const evaluateUntil = (fns, args) => {\n for (let i = 0; i < fns.length; i++) {\n const result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n };\n\n const Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n const rescope$1 = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const before = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.before(inline)), Optional.none);\n };\n const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n const findInsideRootInline = (isInlineTarget, rootNode, pos) => findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n const start$1 = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n });\n };\n const end = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n });\n };\n const after = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.after(inline)), Optional.none);\n };\n const isValidLocation = location => !isRtl(getElement(location));\n const readLocation = (isInlineTarget, rootNode, pos) => {\n const location = evaluateUntil([\n before,\n start$1,\n end,\n after\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n const getElement = location => location.fold(identity, identity, identity, identity);\n const getName = location => location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n const outside = location => location.fold(Location.before, Location.before, Location.after, Location.after);\n const inside = location => location.fold(Location.start, Location.start, Location.end, Location.end);\n const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n const betweenInlines = (forward, isInlineTarget, rootNode, from, to, location) => lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), (fromInline, toInline) => {\n if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, fromLocation => !isEq(fromLocation, toLocation));\n const findLocationTraverse = (forward, isInlineTarget, rootNode, fromLocation, pos) => {\n const from = normalizePosition(forward, pos);\n const to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n const location = to.fold(() => fromLocation.map(outside), to => readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)));\n return location.filter(isValidLocation);\n };\n const findLocationSimple = (forward, location) => {\n if (forward) {\n return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n } else {\n return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n }\n };\n const findLocation$1 = (forward, isInlineTarget, rootNode, pos) => {\n const from = normalizePosition(forward, pos);\n const fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos));\n };\n\n const hasSelectionModifyApi = editor => {\n return isFunction(editor.selection.getSel().modify);\n };\n const moveRel = (forward, selection, pos) => {\n const delta = forward ? 1 : -1;\n selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n const moveByWord = (forward, editor) => {\n const rng = editor.selection.getRng();\n const pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n const flip = (direction, positions) => direction === HDirection.Backwards ? reverse(positions) : positions;\n const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n const getBreakType = (scope, direction, currentPos, nextPos) => {\n if (isBr$6(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n const getPositionsUntil = (predicate, direction, scope, start) => {\n const caretWalker = CaretWalker(scope);\n let currentPos = start;\n const positions = [];\n while (currentPos) {\n const nextPos = walk$1(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr$6(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n const breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType,\n breakAt: Optional.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Optional.none()\n };\n };\n const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n const positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n const lastDist = Math.abs(x - lastRect.left);\n const newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc)), Optional.none());\n const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n const isContentEditableFalse$5 = isContentEditableFalse$b;\n const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isNodeClientRect = rect => hasNonNullableKey(rect, 'node');\n const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$5(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n\n const getNodeClientRects = node => {\n const toArrayWithNode = clientRects => {\n return map$3(clientRects, rect => {\n const clientRect = clone$1(rect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$6(node)) {\n return toArrayWithNode(node.getClientRects());\n } else if (isText$b(node)) {\n const rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n } else {\n return [];\n }\n };\n const getClientRects = nodes => bind$3(nodes, getNodeClientRects);\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n const findUntil = (direction, root, predicateFn, node) => {\n let currentNode = node;\n while (currentNode = findNode(currentNode, direction, isEditableCaretCandidate$1, root)) {\n if (predicateFn(currentNode)) {\n return;\n }\n }\n };\n const walkUntil = (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) => {\n let line = 0;\n const result = [];\n const add = node => {\n let clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (let i = 0; i < clientRects.length; i++) {\n const clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n return false;\n };\n const targetClientRect = last$1(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n const node = caretPosition.getNode();\n if (node) {\n add(node);\n findUntil(direction, root, add, node);\n }\n return result;\n };\n const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n const getLastClientRect = caretPosition => {\n return last$1(caretPosition.getClientRects());\n };\n const positionsUntil = (direction, root, predicateFn, node) => {\n const caretWalker = CaretWalker(root);\n let walkFn;\n let isBelowFn;\n let isAboveFn;\n let caretPosition;\n const result = [];\n let line = 0;\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow$1;\n isAboveFn = isAbove$1;\n caretPosition = CaretPosition.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove$1;\n isAboveFn = isBelow$1;\n caretPosition = CaretPosition.before(node);\n }\n const targetClientRect = getLastClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n const rect = getLastClientRect(caretPosition);\n if (isAboveFn(rect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(rect, last$1(result))) {\n line++;\n }\n const clientRect = clone$1(rect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n const isAboveLine = lineNumber => clientRect => aboveLineNumber(lineNumber, clientRect);\n const isLine = lineNumber => clientRect => isLineNumber(lineNumber, clientRect);\n\n const moveToRange = (editor, rng) => {\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, editor.selection.getRng());\n };\n const renderRangeCaretOpt = (editor, range, scrollIntoView) => Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n const moveHorizontally = (editor, direction, range, isBefore, isAfter, isElement) => {\n const forwards = direction === HDirection.Forwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n const node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n } else if (isCefAtEdgeSelected(editor)) {\n const newRange = range.cloneRange();\n newRange.collapse(direction === HDirection.Backwards);\n return Optional.from(newRange);\n }\n }\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n let nextCaretPosition = getNextPosFn(caretPosition);\n const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n } else {\n nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n const peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n }\n return Optional.none();\n };\n const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const caretClientRect = last$1(caretPosition.getClientRects());\n const forwards = direction === VDirection.Down;\n const root = editor.getBody();\n if (!caretClientRect) {\n return Optional.none();\n }\n if (isCefAtEdgeSelected(editor)) {\n const caretPosition = forwards ? CaretPosition.fromRangeEnd(range) : CaretPosition.fromRangeStart(range);\n const getClosestFn = !forwards ? getClosestPositionAbove : getClosestPositionBelow;\n return getClosestFn(root, caretPosition).orThunk(() => Optional.from(caretPosition)).map(pos => pos.toRange());\n }\n const walkerFn = forwards ? downUntil : upUntil;\n const linePositions = walkerFn(root, isAboveLine(1), caretPosition);\n const nextLinePositions = filter$5(linePositions, isLine(1));\n const clientX = caretClientRect.left;\n const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (nextLineRect && isElement(nextLineRect.node)) {\n const dist1 = Math.abs(clientX - nextLineRect.left);\n const dist2 = Math.abs(clientX - nextLineRect.right);\n return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n }\n let currentNode;\n if (isBefore(caretPosition)) {\n currentNode = caretPosition.getNode();\n } else if (isAfter(caretPosition)) {\n currentNode = caretPosition.getNode(true);\n } else {\n currentNode = getSelectedNode(range);\n }\n if (currentNode) {\n const caretPositions = positionsUntil(direction, root, isAboveLine(1), currentNode);\n let closestNextLineRect = findClosestClientRect(filter$5(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n closestNextLineRect = last$1(filter$5(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n }\n if (nextLinePositions.length === 0) {\n return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(pos => renderRangeCaret(editor, pos.toRange(), false));\n }\n return Optional.none();\n };\n const getLineEndPoint = (editor, forward) => {\n const rng = editor.selection.getRng();\n const from = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n const host = getEditingHost(from.container(), editor.getBody());\n if (forward) {\n const lineInfo = getPositionsUntilNextLine(host, from);\n return last$2(lineInfo.positions);\n } else {\n const lineInfo = getPositionsUntilPreviousLine(host, from);\n return head(lineInfo.positions);\n }\n };\n const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists(pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n\n const setCaretPosition = (editor, pos) => {\n const rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n const setSelected = (state, elm) => {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n const renderCaretLocation = (editor, caret, location) => renderCaret(caret, location).map(pos => {\n setCaretPosition(editor, pos);\n return location;\n });\n const getPositionFromRange = (range, root, forward) => {\n const start = CaretPosition.fromRangeStart(range);\n if (range.collapsed) {\n return start;\n } else {\n const end = CaretPosition.fromRangeEnd(range);\n return forward ? prevPosition(root, end).getOr(end) : nextPosition(root, start).getOr(start);\n }\n };\n const findLocation = (editor, caret, forward) => {\n const rootNode = editor.getBody();\n const from = getPositionFromRange(editor.selection.getRng(), rootNode, forward);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n return location.bind(location => renderCaretLocation(editor, caret, location));\n };\n const toggleInlines = (isInlineTarget, dom, elms) => {\n const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), e => e.dom);\n const selectedInlines = filter$5(inlineBoundaries, isInlineTarget);\n const targetInlines = filter$5(elms, isInlineTarget);\n each$e(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each$e(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n const safeRemoveCaretContainer = (editor, caret) => {\n const caretValue = caret.get();\n if (editor.selection.isCollapsed() && !editor.composing && caretValue) {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (CaretPosition.isTextPosition(pos) && !isAtZwsp(pos)) {\n setCaretPosition(editor, removeAndReposition(caretValue, pos));\n caret.set(null);\n }\n }\n };\n const renderInsideInlineCaret = (isInlineTarget, editor, caret, elms) => {\n if (editor.selection.isCollapsed()) {\n const inlines = filter$5(elms, isInlineTarget);\n each$e(inlines, _inline => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(location => renderCaretLocation(editor, caret, location));\n });\n }\n };\n const move$3 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n const setupSelectedState = editor => {\n const caret = Cell(null);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', e => {\n if (isInlineBoundariesEnabled(editor)) {\n toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n }\n });\n return caret;\n };\n const moveNextWord = curry(moveWord, true);\n const movePrevWord = curry(moveWord, false);\n const moveToLineEndPoint$2 = (editor, forward, caret) => {\n if (isInlineBoundariesEnabled(editor)) {\n const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n const rng = editor.selection.getRng();\n return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n });\n return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(loc => {\n const outsideLoc = outside(loc);\n return renderCaret(caret, outsideLoc).exists(pos => {\n setCaretPosition(editor, pos);\n return true;\n });\n });\n } else {\n return false;\n }\n };\n\n const rangeFromPositions = (from, to) => {\n const range = document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n const hasOnlyTwoOrLessPositionsLeft = elm => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n return nextPosition(elm, normalizedFirstPos).forall(pos => pos.isEqual(normalizedLastPos));\n }).getOr(true);\n const setCaretLocation = (editor, caret) => location => renderCaret(caret, location).map(pos => () => setCaretPosition(editor, pos));\n const deleteFromTo = (editor, caret, from, to) => {\n const rootNode = editor.getBody();\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(() => {\n editor.selection.setRng(rangeFromPositions(from, to));\n execNativeDeleteCommand(editor);\n readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n });\n editor.nodeChanged();\n };\n const rescope = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const backspaceDeleteCollapsed = (editor, caret, forward, from) => {\n const rootNode = rescope(editor.getBody(), from.container());\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n const location = fromLocation.bind(location => {\n if (forward) {\n return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n } else {\n return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n }\n });\n return location.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n const toPosition = navigate(forward, rootNode, from);\n const toLocation = toPosition.bind(pos => readLocation(isInlineTarget$1, rootNode, pos));\n return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from).bind(elm => {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n return Optional.some(() => {\n deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n });\n } else {\n return Optional.none();\n }\n })).getOrThunk(() => toLocation.bind(() => toPosition.map(to => {\n return () => {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n };\n })));\n });\n };\n const backspaceDelete$4 = (editor, caret, forward) => {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return Optional.none();\n };\n\n const hasMultipleChildren = elm => childNodesCount(elm) > 1;\n const getParentsUntil = (editor, pred) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n const startElm = SugarElement.fromDom(editor.selection.getStart());\n const parents = parentsAndSelf(startElm, rootElm);\n return findIndex$2(parents, pred).fold(constant(parents), index => parents.slice(0, index));\n };\n const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n const getParentInlinesUntilMultichildInline = editor => getParentsUntil(editor, elm => editor.schema.isBlock(name(elm)) || hasMultipleChildren(elm));\n const getParentInlines = editor => getParentsUntil(editor, el => editor.schema.isBlock(name(el)));\n const getFormatNodes = (editor, parentInlines) => {\n const isFormatElement$1 = curry(isFormatElement, editor);\n return bind$3(parentInlines, elm => isFormatElement$1(elm) ? [elm.dom] : []);\n };\n const getFormatNodesAtStart = editor => {\n const parentInlines = getParentInlines(editor);\n return getFormatNodes(editor, parentInlines);\n };\n const deleteLastPosition = (forward, editor, target, parentInlines) => {\n const formatNodes = getFormatNodes(editor, parentInlines);\n if (formatNodes.length === 0) {\n deleteElement$2(editor, forward, target);\n } else {\n const pos = replaceWithCaretFormat(target.dom, formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n const deleteCaret$1 = (editor, forward) => {\n const parentInlines = filter$5(getParentInlinesUntilMultichildInline(editor), hasOnlyOneChild);\n return last$2(parentInlines).bind(target => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n } else {\n return Optional.none();\n }\n });\n };\n const isBrInEmptyElement = (editor, elm) => {\n const parentElm = elm.parentElement;\n return isBr$6(elm) && !isNull(parentElm) && editor.dom.isEmpty(parentElm);\n };\n const isEmptyCaret = elm => isEmptyCaretFormatElement(SugarElement.fromDom(elm));\n const createCaretFormatAtStart = (editor, formatNodes) => {\n const startElm = editor.selection.getStart();\n const pos = isBrInEmptyElement(editor, startElm) || isEmptyCaret(startElm) ? replaceWithCaretFormat(startElm, formatNodes) : createCaretFormatAtStart$1(editor.selection.getRng(), formatNodes);\n editor.selection.setRng(pos.toRange());\n };\n const updateCaretFormat = (editor, updateFormats) => {\n const missingFormats = difference(updateFormats, getFormatNodesAtStart(editor));\n if (missingFormats.length > 0) {\n createCaretFormatAtStart(editor, missingFormats);\n }\n };\n const rangeStartsAtTextContainer = rng => isText$b(rng.startContainer);\n const rangeStartsAtStartOfTextContainer = rng => rng.startOffset === 0 && rangeStartsAtTextContainer(rng);\n const rangeStartParentIsFormatElement = (editor, rng) => {\n const startParent = rng.startContainer.parentElement;\n return !isNull(startParent) && isFormatElement(editor, SugarElement.fromDom(startParent));\n };\n const rangeStartAndEndHaveSameParent = rng => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n return !isNull(startParent) && !isNull(endParent) && startParent.isEqualNode(endParent);\n };\n const rangeEndsAtEndOfEndContainer = rng => {\n const endContainer = rng.endContainer;\n return rng.endOffset === (isText$b(endContainer) ? endContainer.length : endContainer.childNodes.length);\n };\n const rangeEndsAtEndOfStartContainer = rng => rangeStartAndEndHaveSameParent(rng) && rangeEndsAtEndOfEndContainer(rng);\n const rangeEndsAfterEndOfStartContainer = rng => !rng.endContainer.isEqualNode(rng.commonAncestorContainer);\n const rangeEndsAtOrAfterEndOfStartContainer = rng => rangeEndsAtEndOfStartContainer(rng) || rangeEndsAfterEndOfStartContainer(rng);\n const requiresDeleteRangeOverride = editor => {\n const rng = editor.selection.getRng();\n return rangeStartsAtStartOfTextContainer(rng) && rangeStartParentIsFormatElement(editor, rng) && rangeEndsAtOrAfterEndOfStartContainer(rng);\n };\n const deleteRange$1 = editor => {\n if (requiresDeleteRangeOverride(editor)) {\n const formatNodes = getFormatNodesAtStart(editor);\n return Optional.some(() => {\n execNativeDeleteCommand(editor);\n updateCaretFormat(editor, formatNodes);\n });\n } else {\n return Optional.none();\n }\n };\n const backspaceDelete$3 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : deleteRange$1(editor);\n const hasAncestorInlineCaret = (elm, schema) => ancestor$2(elm, node => isCaretNode(node.dom), el => schema.isBlock(name(el)));\n const hasAncestorInlineCaretAtStart = editor => hasAncestorInlineCaret(SugarElement.fromDom(editor.selection.getStart()), editor.schema);\n const requiresRefreshCaretOverride = editor => {\n const rng = editor.selection.getRng();\n return rng.collapsed && (rangeStartsAtTextContainer(rng) || editor.dom.isEmpty(rng.startContainer)) && !hasAncestorInlineCaretAtStart(editor);\n };\n const refreshCaret = editor => {\n if (requiresRefreshCaretOverride(editor)) {\n createCaretFormatAtStart(editor, []);\n }\n return true;\n };\n\n const deleteElement = (editor, forward, element) => {\n if (isNonNullable(element)) {\n return Optional.some(() => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n });\n } else {\n return Optional.none();\n }\n };\n const deleteCaret = (editor, forward) => {\n const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n if (isNearMedia(fromPos)) {\n return deleteElement(editor, forward, fromPos.getNode(!forward));\n } else {\n return Optional.from(normalizePosition(forward, fromPos)).filter(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n }\n };\n const deleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n };\n const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n const isEditable = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$b(elm.dom)).exists(elm => isContentEditableTrue$3(elm.dom));\n const parseIndentValue = value => toInt(value !== null && value !== void 0 ? value : '').getOr(0);\n const getIndentStyleName = (useMargin, element) => {\n const indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n const suffix = get$7(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n const indentElement = (dom, command, useMargin, value, unit, element) => {\n const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n const parsedValue = parseIndentValue(dom.getStyle(element, indentStyleName));\n if (command === 'outdent') {\n const styleValue = Math.max(0, parsedValue - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n const styleValue = parsedValue + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n const validateBlocks = (editor, blocks) => forall(blocks, block => {\n const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n const intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n const contentEditable = editor.dom.getContentEditable(block.dom);\n return contentEditable !== 'false' && intentValue > 0;\n });\n const canOutdent = editor => {\n const blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n };\n const isListComponent = el => isList(el) || isListItem$1(el);\n const parentIsListComponent = el => parent(el).exists(isListComponent);\n const getBlocksToIndent = editor => filter$5(fromDom$1(editor.selection.getSelectedBlocks()), el => !isListComponent(el) && !parentIsListComponent(el) && isEditable(el));\n const handle = (editor, command) => {\n var _a, _b;\n if (editor.mode.isReadOnly()) {\n return;\n }\n const {dom} = editor;\n const indentation = getIndentation(editor);\n const indentUnit = (_b = (_a = /[a-z%]+$/i.exec(indentation)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'px';\n const indentValue = parseIndentValue(indentation);\n const useMargin = shouldIndentUseMargin(editor);\n each$e(getBlocksToIndent(editor), block => {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n });\n };\n const indent = editor => handle(editor, 'indent');\n const outdent = editor => handle(editor, 'outdent');\n\n const backspaceDelete$1 = editor => {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos, editor.schema)) {\n return Optional.some(() => outdent(editor));\n }\n }\n return Optional.none();\n };\n\n const findAction = (editor, caret, forward) => findMap([\n backspaceDelete$1,\n backspaceDelete$7,\n backspaceDelete$8,\n (editor, forward) => backspaceDelete$4(editor, caret, forward),\n backspaceDelete$a,\n backspaceDelete$b,\n backspaceDelete$5,\n backspaceDelete$2,\n backspaceDelete$9,\n backspaceDelete$3,\n backspaceDelete$6\n ], item => item(editor, forward)).filter(_ => editor.selection.isEditable());\n const deleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, false);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeDeleteCommand(editor);\n paddEmptyBody(editor);\n }\n }, call);\n };\n const forwardDeleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, true);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeForwardDeleteCommand(editor);\n }\n }, call);\n };\n const setup$q = (editor, caret) => {\n editor.addCommand('delete', () => {\n deleteCommand(editor, caret);\n });\n editor.addCommand('forwardDelete', () => {\n forwardDeleteCommand(editor, caret);\n });\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(event.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const setup$p = editor => {\n const startData = value$2();\n const longpressFired = Cell(false);\n const debounceLongpress = last(e => {\n editor.dispatch('longpress', {\n ...e,\n type: 'longpress'\n });\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', e => {\n getTouch(e).each(touch => {\n debounceLongpress.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: e.target\n };\n debounceLongpress.throttle(e);\n longpressFired.set(false);\n startData.set(data);\n });\n }, true);\n editor.on('touchmove', e => {\n debounceLongpress.cancel();\n getTouch(e).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n longpressFired.set(false);\n editor.dispatch('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', e => {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(data => data.target.isEqualNode(e.target)).each(() => {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.dispatch('tap', {\n ...e,\n type: 'tap'\n });\n }\n });\n }, true);\n };\n\n const isBlockElement = (blockElements, node) => has$2(blockElements, node.nodeName);\n const isValidTarget = (schema, node) => {\n if (isText$b(node)) {\n return true;\n } else if (isElement$6(node)) {\n return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node) && !isNonHtmlElementRoot(node);\n } else {\n return false;\n }\n };\n const hasBlockParent = (blockElements, root, node) => {\n return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), elm => {\n return isBlockElement(blockElements, elm.dom);\n });\n };\n const shouldRemoveTextNode = (blockElements, node) => {\n if (isText$b(node)) {\n if (node.data.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.data)) {\n return !node.nextSibling || isBlockElement(blockElements, node.nextSibling) || isNonHtmlElementRoot(node.nextSibling);\n }\n }\n return false;\n };\n const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n const addRootBlocks = editor => {\n const dom = editor.dom, selection = editor.selection;\n const schema = editor.schema;\n const blockElements = schema.getBlockElements();\n const startNode = selection.getStart();\n const rootNode = editor.getBody();\n let rootBlockNode;\n let tempNode;\n let bm = null;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!startNode || !isElement$6(startNode)) {\n return;\n }\n const rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {\n return;\n }\n if (rootNode.firstChild === rootNode.lastChild && isBr$6(rootNode.firstChild)) {\n rootBlockNode = createRootBlock(editor);\n rootBlockNode.appendChild(createPaddingBr().dom);\n rootNode.replaceChild(rootBlockNode, rootNode.firstChild);\n editor.selection.setCursorLocation(rootBlockNode, 0);\n editor.nodeChanged();\n return;\n }\n let node = rootNode.firstChild;\n while (node) {\n if (isElement$6(node)) {\n updateElement(schema, node);\n }\n if (isValidTarget(schema, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n if (!bm && editor.hasFocus()) {\n bm = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n }\n if (!node.parentNode) {\n node = null;\n break;\n }\n rootBlockNode = createRootBlock(editor);\n rootNode.insertBefore(rootBlockNode, node);\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (bm) {\n editor.selection.setRng(resolveBookmark(bm));\n editor.nodeChanged();\n }\n };\n const insertEmptyLine = (editor, root, insertBlock) => {\n const block = SugarElement.fromDom(createRootBlock(editor));\n const br = createPaddingBr();\n append$1(block, br);\n insertBlock(root, block);\n const rng = document.createRange();\n rng.setStartBefore(br.dom);\n rng.setEndBefore(br.dom);\n return rng;\n };\n const setup$o = editor => {\n editor.on('NodeChange', () => addRootBlocks(editor));\n };\n\n const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n const replaceMatchWithSpan = (editor, content, cls) => {\n return function (match) {\n const args = arguments, index = args[args.length - 2];\n const prevChar = index > 0 ? content.charAt(index - 1) : '';\n if (prevChar === '\"') {\n return match;\n }\n if (prevChar === '>') {\n const findStartTagIndex = content.lastIndexOf('<', index);\n if (findStartTagIndex !== -1) {\n const tagHtml = content.substring(findStartTagIndex, index);\n if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n return match;\n }\n }\n }\n return '' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '';\n };\n };\n const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e) => {\n let i = nonEditableRegExps.length, content = e.content;\n if (e.format === 'raw') {\n return;\n }\n while (i--) {\n content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n }\n e.content = content;\n };\n const isValidContent = (nonEditableRegExps, content) => {\n return forall(nonEditableRegExps, re => {\n const matches = content.match(re);\n return matches !== null && matches[0].length === content.length;\n });\n };\n const setup$n = editor => {\n const contentEditableAttrName = 'contenteditable';\n const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';\n const nonEditClass = ' ' + Tools.trim(getNonEditableClass(editor)) + ' ';\n const hasEditClass = hasClass(editClass);\n const hasNonEditClass = hasClass(nonEditClass);\n const nonEditableRegExps = getNonEditableRegExps(editor);\n if (nonEditableRegExps.length > 0) {\n editor.on('BeforeSetContent', e => {\n convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n });\n }\n editor.parser.addAttributeFilter('class', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (hasEditClass(node)) {\n node.attr(contentEditableAttrName, 'true');\n } else if (hasNonEditClass(node)) {\n node.attr(contentEditableAttrName, 'false');\n }\n }\n });\n editor.serializer.addAttributeFilter(contentEditableAttrName, nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!hasEditClass(node) && !hasNonEditClass(node)) {\n continue;\n }\n const content = node.attr('data-mce-content');\n if (nonEditableRegExps.length > 0 && content) {\n if (isValidContent(nonEditableRegExps, content)) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = content;\n } else {\n node.remove();\n }\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n };\n\n const findBlockCaretContainer = editor => descendant$1(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(elm => elm.dom).getOrNull();\n const showBlockCaretContainer = (editor, blockCaretContainer) => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n editor.selection.setRng(editor.selection.getRng());\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n const handleBlockContainer = (editor, e) => {\n const blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n const setup$m = editor => {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n const isContentEditableFalse$4 = isContentEditableFalse$b;\n const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$4);\n const moveToCeFalseVertically = (direction, editor, range) => {\n const isBefore = caretPosition => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n const isAfter = caretPosition => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$4);\n };\n const createTextBlock = editor => {\n const textBlock = editor.dom.create(getForcedRootBlock(editor));\n textBlock.innerHTML = '
    ';\n return textBlock;\n };\n const exitPreBlock = (editor, direction, range) => {\n const caretWalker = CaretWalker(editor.getBody());\n const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n if (range.collapsed) {\n const pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n if (!caretPos) {\n const newBlock = SugarElement.fromDom(createTextBlock(editor));\n if (direction === 1) {\n after$4(SugarElement.fromDom(pre), newBlock);\n } else {\n before$3(SugarElement.fromDom(pre), newBlock);\n }\n editor.selection.select(newBlock.dom, true);\n editor.selection.collapse();\n }\n }\n };\n const getHorizontalRange = (editor, forward) => {\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const getVerticalRange = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const flipDirection = (selection, forward) => {\n const elm = forward ? selection.getEnd(true) : selection.getStart(true);\n return isRtl(elm) ? !forward : forward;\n };\n const moveH$2 = (editor, forward) => getHorizontalRange(editor, flipDirection(editor.selection, forward)).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveV$4 = (editor, down) => getVerticalRange(editor, down).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveToLineEndPoint$1 = (editor, forward) => {\n const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n return moveToLineEndPoint$3(editor, forward, isCefPosition);\n };\n const selectToEndPoint = (editor, forward) => getEdgeCefPosition(editor, !forward).map(pos => {\n const rng = pos.toRange();\n const curRng = editor.selection.getRng();\n if (forward) {\n rng.setStart(curRng.startContainer, curRng.startOffset);\n } else {\n rng.setEnd(curRng.endContainer, curRng.endOffset);\n }\n return rng;\n }).exists(rng => {\n moveToRange(editor, rng);\n return true;\n });\n\n const isTarget = node => contains$2(['figcaption'], name(node));\n const getClosestTargetBlock = (pos, root, schema) => {\n const isRoot = curry(eq, root);\n return closest$4(SugarElement.fromDom(pos.container()), el => schema.isBlock(name(el)), isRoot).filter(isTarget);\n };\n const isAtFirstOrLastLine = (root, forward, pos) => forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n const moveCaretToNewEmptyLine = (editor, forward) => {\n const root = SugarElement.fromDom(editor.getBody());\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getClosestTargetBlock(pos, root, editor.schema).exists(() => {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n const insertFn = forward ? append$1 : prepend;\n const rng = insertEmptyLine(editor, root, insertFn);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n const moveV$3 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n const moveUp = (editor, details, summary) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.firstChild === details && isAtFirstLine(summary, pos)) {\n editor.execCommand('InsertNewBlockBefore');\n return true;\n } else {\n return false;\n }\n };\n const moveDown = (editor, details) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.lastChild === details && isAtLastLine(details, pos)) {\n editor.execCommand('InsertNewBlockAfter');\n return true;\n } else {\n return false;\n }\n };\n const move$2 = (editor, forward) => {\n if (forward) {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'details')).map(details => moveDown(editor, details)).getOr(false);\n } else {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'summary')).bind(summary => Optional.from(editor.dom.getParent(summary, 'details')).map(details => moveUp(editor, details, summary))).getOr(false);\n }\n };\n const moveV$2 = (editor, forward) => move$2(editor, forward);\n\n const baseKeyPattern = {\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0\n };\n const defaultPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const defaultDelayedPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const action = (f, ...x) => () => f.apply(null, x);\n const execute = (patterns, evt) => find$2(match$1(patterns, evt), pattern => pattern.action());\n const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), pattern => pattern.action());\n\n const moveH$1 = (editor, forward) => {\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveV$1 = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveToLineEndPoint = (editor, forward) => {\n const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint$3(editor, forward, isNearMedia);\n };\n\n const adt = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n const none = current => adt.none(current);\n const CellLocation = {\n ...adt,\n none\n };\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$3(children$1(scope), x => {\n if (is$1(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup$1 = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n return ancestor$3(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup$1([\n 'td',\n 'th'\n ], element, isRoot);\n const cells = ancestor => firstLayer(ancestor, 'th,td');\n const table = (element, isRoot) => closest$3(element, 'table', isRoot);\n\n const walk = (all, current, index, direction, isEligible = always) => {\n const forwards = direction === 1;\n if (!forwards && index <= 0) {\n return CellLocation.first(all[0]);\n } else if (forwards && index >= all.length - 1) {\n return CellLocation.last(all[all.length - 1]);\n } else {\n const newIndex = index + direction;\n const elem = all[newIndex];\n return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n }\n };\n const detect = (current, isRoot) => {\n return table(current, isRoot).bind(table => {\n const all = cells(table);\n const index = findIndex$2(all, x => eq(current, x));\n return index.map(index => ({\n index,\n all\n }));\n });\n };\n const next = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none(current);\n }, info => {\n return walk(info.all, current, info.index, 1, isEligible);\n });\n };\n const prev = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none();\n }, info => {\n return walk(info.all, current, info.index, -1, isEligible);\n });\n };\n\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse$3 = elem => isHTMLElement$1(elem) && get$9(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse$3(elem);\n };\n\n const first = element => descendant$2(element, isCursorPosition);\n\n const deflate = (rect, delta) => ({\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n });\n const getCorners = (getYAxisValue, tds) => bind$3(tds, td => {\n const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n const findClosestCorner = (corners, x, y) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), oldCorner => {\n const oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n const newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n }), Optional.none());\n const getClosestCell = (getYAxisValue, isTargetCorner, table, x, y) => {\n const cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(e => e.dom);\n const corners = filter$5(getCorners(getYAxisValue, cells), corner => isTargetCorner(corner, y));\n return findClosestCorner(corners, x, y).map(corner => corner.cell);\n };\n const getBottomValue = rect => rect.bottom;\n const getTopValue = rect => rect.top;\n const isAbove = (corner, y) => corner.y < y;\n const isBelow = (corner, y) => corner.y > y;\n const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n const findClosestPositionInAboveCell = (table, pos) => head(pos.getClientRects()).bind(rect => getClosestCellAbove(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getLastLinePositions(cell), pos));\n const findClosestPositionInBelowCell = (table, pos) => last$2(pos.getClientRects()).bind(rect => getClosestCellBelow(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getFirstLinePositions(cell), pos));\n\n const hasNextBreak = (getPositionsUntil, scope, lineInfo) => lineInfo.breakAt.exists(breakPos => getPositionsUntil(scope, breakPos).breakAt.isSome());\n const startsWithWrapBreak = lineInfo => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n const startsWithBrBreak = lineInfo => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n const isAtTableCellLine = (getPositionsUntil, scope, pos) => {\n const lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !isBr$6(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n const isCaretAtStartOrEndOfTable = (forward, rng, table) => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n return positionIn(!forward, table).exists(pos => pos.isEqual(caretPos));\n };\n const navigateHorizontally = (editor, forward, table, _td) => {\n const rng = editor.selection.getRng();\n const direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n showCaret(direction, editor, table, !forward, false).each(newRng => {\n moveToRange(editor, newRng);\n });\n return true;\n }\n return false;\n };\n const getClosestAbovePosition = (root, table, start) => findClosestPositionInAboveCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left))).getOr(CaretPosition.before(table));\n const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));\n const getTable = (previous, pos) => {\n const node = pos.getNode(previous);\n return isTable$2(node) ? Optional.some(node) : Optional.none();\n };\n const renderBlock = (down, editor, table) => {\n editor.undoManager.transact(() => {\n const insertFn = down ? after$4 : before$3;\n const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);\n moveToRange(editor, rng);\n });\n };\n const moveCaret = (editor, down, pos) => {\n const table = down ? getTable(true, pos) : getTable(false, pos);\n const last = down === false;\n table.fold(() => moveToRange(editor, pos.toRange()), table => positionIn(last, editor.getBody()).filter(lastPos => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), _ => renderBlock(down, editor, table)));\n };\n const navigateVertically = (editor, down, table, td) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n const newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n const newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(td => Optional.from(editor.dom.getParent(td, 'table')).map(table => mover(editor, forward, table, td))).getOr(false);\n const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n const getCellFirstCursorPosition = cell => {\n const selection = SimSelection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n const tabGo = (editor, isRoot, cell) => {\n return cell.fold(Optional.none, Optional.none, (_current, next) => {\n return first(next).map(cell => {\n return getCellFirstCursorPosition(cell);\n });\n }, current => {\n if (editor.mode.isReadOnly()) {\n return Optional.none();\n }\n editor.execCommand('mceTableInsertRowAfter');\n return tabForward(editor, isRoot, current);\n });\n };\n const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable$2));\n const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable$2));\n const handleTab = (editor, forward) => {\n const rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n const body = SugarElement.fromDom(editor.getBody());\n const isRoot = element => {\n const name$1 = name(element);\n return eq(element, body) || contains$2(rootElements, name$1);\n };\n const rng = editor.selection.getRng();\n const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n return cell(container, isRoot).map(cell => {\n table(cell, isRoot).each(table => {\n editor.model.table.clearSelectedCells(table.dom);\n });\n editor.selection.collapse(!forward);\n const navigation = !forward ? tabBackward : tabForward;\n const rng = navigation(editor, isRoot, cell);\n rng.each(range => {\n editor.selection.setRng(range);\n });\n return true;\n }).getOr(false);\n };\n\n const executeKeydownOverride$4 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n execute([\n {\n keyCode: VK.RIGHT,\n action: action(moveH$2, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$2, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$4, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$4, editor, true)\n },\n ...isMac ? [\n {\n keyCode: VK.UP,\n action: action(selectToEndPoint, editor, false),\n metaKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.DOWN,\n action: action(selectToEndPoint, editor, true),\n metaKey: true,\n shiftKey: true\n }\n ] : [],\n {\n keyCode: VK.RIGHT,\n action: action(moveH, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV, editor, true)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$2, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$2, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH$1, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$1, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$1, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$1, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(move$3, editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(move$3, editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !isMac,\n altKey: isMac,\n action: action(moveNextWord, editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !isMac,\n altKey: isMac,\n action: action(movePrevWord, editor, caret)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$3, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$3, editor, true)\n }\n ], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$l = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$4(editor, caret, evt);\n }\n });\n };\n\n const point = (container, offset) => ({\n container,\n offset\n });\n\n const DOM$7 = DOMUtils.DOM;\n const alwaysNext = startNode => node => startNode === node ? -1 : 0;\n const isBoundary = dom => node => dom.isBlock(node) || contains$2([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n const textBefore = (node, offset, rootNode) => {\n if (isText$b(node) && offset >= 0) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, prev.container.data.length));\n }\n };\n const textAfter = (node, offset, rootNode) => {\n if (isText$b(node) && offset >= node.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, 0));\n }\n };\n const scanLeft = (node, offset, rootNode) => {\n if (!isText$b(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset >= 0 && offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(prev => {\n const prevText = prev.container.data;\n return scanLeft(prev.container, offset + prevText.length, rootNode);\n });\n }\n };\n const scanRight = (node, offset, rootNode) => {\n if (!isText$b(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(next => scanRight(next.container, offset - text.length, rootNode));\n }\n };\n const repeatLeft = (dom, node, offset, process, rootNode) => {\n const search = TextSeeker(dom, isBoundary(dom));\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n const isValidTextRange = rng => rng.collapsed && isText$b(rng.startContainer);\n const getText = rng => trim$2(rng.toString().replace(/\\u00A0/g, ' '));\n const isWhitespace = chr => chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n const stripTrigger = (text, trigger) => text.substring(trigger.length);\n const findTrigger = (text, index, trigger, includeWhitespace = false) => {\n let i;\n const firstChar = trigger.charAt(0);\n for (i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (!includeWhitespace && isWhitespace(char)) {\n return Optional.none();\n }\n if (firstChar === char && contains$1(text, trigger, i, index)) {\n break;\n }\n }\n return Optional.some(i);\n };\n const getContext = (dom, initRange, trigger, includeWhitespace = false) => {\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n const buffer = {\n text: '',\n offset: 0\n };\n const findTriggerIndex = (element, offset, text) => {\n buffer.text = text + buffer.text;\n buffer.offset += offset;\n return findTrigger(buffer.text, buffer.offset, trigger, includeWhitespace).getOr(offset);\n };\n const root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerIndex, root).bind(spot => {\n const range = initRange.cloneRange();\n range.setStart(spot.container, spot.offset);\n range.setEnd(initRange.endContainer, initRange.endOffset);\n if (range.collapsed) {\n return Optional.none();\n }\n const text = getText(range);\n const triggerIndex = text.lastIndexOf(trigger);\n if (triggerIndex !== 0) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTrigger(text, trigger),\n range,\n trigger\n });\n }\n });\n };\n\n const isText$1 = node => node.nodeType === TEXT;\n const isElement = node => node.nodeType === ELEMENT;\n const toLast = node => {\n if (isText$1(node)) {\n return point(node, node.data.length);\n } else {\n const children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n }\n };\n const toLeaf = (node, offset) => {\n const children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point(node, offset);\n }\n };\n\n const isPreviousCharContent = (dom, leaf) => {\n var _a;\n const root = (_a = dom.getParent(leaf.container, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n return repeatLeft(dom, leaf.container, leaf.offset, (_element, offset) => offset === 0 ? -1 : offset, root).filter(spot => {\n const char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n const isStartOfWord = dom => rng => {\n const leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n const getTriggerContext = (dom, initRange, database) => findMap(database.triggers, trigger => getContext(dom, initRange, trigger));\n const lookup = (editor, getDatabase) => {\n const database = getDatabase();\n const rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(context => lookupWithContext(editor, getDatabase, context));\n };\n const lookupWithContext = (editor, getDatabase, context, fetchOptions = {}) => {\n var _a;\n const database = getDatabase();\n const rng = editor.selection.getRng();\n const startText = (_a = rng.startContainer.nodeValue) !== null && _a !== void 0 ? _a : '';\n const autocompleters = filter$5(database.lookupByTrigger(context.trigger), autocompleter => context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context.range, startText, context.text));\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n const lookupData = Promise.all(map$3(autocompleters, ac => {\n const fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(results => ({\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n }));\n }));\n return Optional.some({\n lookupData,\n context\n });\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition = results => {\n const values = [];\n const errors = [];\n each$e(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n const map = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n const bind$1 = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult = res => fold$1(res, Result.error, Result.value);\n const fromResult = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult,\n toResult,\n svalue,\n partition,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant('... (only showing first ten failures)')\n }]) : errors;\n return map$3(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const custom = (path, err) => nu(path, constant(err));\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$a(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$1 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$a(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const shallow = (old, nu) => {\n return nu;\n };\n const deep = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has$2(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep);\n const merge = baseMerge(shallow);\n\n const required = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n\n const mergeValues = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors(partition.errors) : mergeValues(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const field$1 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (value, ifField, ifCustom) => {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n const value = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$a(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$a(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$3(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$3(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n\n const valueOf = validator => value(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n\n const anyValue = constant(anyValue$1);\n const typedValue = (validator, expectedType) => value(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n\n const field = field$1;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const requiredOf = (key, schema) => field(key, key, required(), schema);\n const requiredString = key => requiredOf(key, string);\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n const optionOf = (key, schema) => field(key, key, asOption(), schema);\n const optionString = key => optionOf(key, string);\n const optionFunction = key => optionOf(key, functionProcessor);\n const defaulted = (key, fallback) => field(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n\n const type = requiredString('type');\n const fetch$1 = requiredFunction('fetch');\n const onAction = requiredFunction('onAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalText = optionString('text');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const active = defaultedBoolean('active', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedType = type => defaultedString('type', type);\n\n const autocompleterSchema = objOf([\n type,\n requiredString('trigger'),\n defaultedNumber('minChars', 1),\n defaultedColumns(1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n fetch$1,\n onAction,\n defaultedArrayOf('highlightOn', [], string)\n ]);\n const createAutocompleter = spec => asRaw('Autocompleter', autocompleterSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\n ];\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n\n const contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n objOf([\n defaultedType('contextform'),\n defaultedFunction('initValue', constant('')),\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n\n const register$2 = editor => {\n const popups = editor.ui.registry.getAll().popups;\n const dataset = map$2(popups, popup => createAutocompleter(popup).fold(err => {\n throw new Error(formatError(err));\n }, identity));\n const triggers = stringArray(mapToArray(dataset, v => v.trigger));\n const datasetValues = values(dataset);\n const lookupByTrigger = trigger => filter$5(datasetValues, dv => dv.trigger === trigger);\n return {\n dataset,\n triggers,\n lookupByTrigger\n };\n };\n\n const setupEditorInput = (editor, api) => {\n const update = last(api.load, 50);\n editor.on('input', e => {\n if (e.inputType === 'insertCompositionText' && !editor.composing) {\n return;\n }\n update.throttle();\n });\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (keyCode === 8) {\n update.throttle();\n } else if (keyCode === 27) {\n update.cancel();\n api.cancelIfNecessary();\n } else if (keyCode === 38 || keyCode === 40) {\n update.cancel();\n }\n }, true);\n editor.on('remove', update.cancel);\n };\n const setup$k = editor => {\n const activeAutocompleter = value$2();\n const uiActive = Cell(false);\n const isActive = activeAutocompleter.isSet;\n const cancelIfNecessary = () => {\n if (isActive()) {\n fireAutocompleterEnd(editor);\n uiActive.set(false);\n activeAutocompleter.clear();\n }\n };\n const commenceIfNecessary = context => {\n if (!isActive()) {\n activeAutocompleter.set({\n trigger: context.trigger,\n matchLength: context.text.length\n });\n }\n };\n const getAutocompleters = cached(() => register$2(editor));\n const doLookup = fetchOptions => activeAutocompleter.get().map(ac => getContext(editor.dom, editor.selection.getRng(), ac.trigger, true).bind(newContext => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n const load = fetchOptions => {\n doLookup(fetchOptions).fold(cancelIfNecessary, lookupInfo => {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(lookupData => {\n activeAutocompleter.get().map(ac => {\n const context = lookupInfo.context;\n if (ac.trigger !== context.trigger) {\n return;\n }\n activeAutocompleter.set({\n ...ac,\n matchLength: context.text.length\n });\n if (uiActive.get()) {\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterUpdate(editor, { lookupData });\n } else {\n uiActive.set(true);\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterStart(editor, { lookupData });\n }\n });\n });\n });\n };\n const isRangeInsideOrEqual = (innerRange, outerRange) => {\n const startComparison = innerRange.compareBoundaryPoints(window.Range.START_TO_START, outerRange);\n const endComparison = innerRange.compareBoundaryPoints(window.Range.END_TO_END, outerRange);\n return startComparison >= 0 && endComparison <= 0;\n };\n const readActiveRange = () => {\n return activeAutocompleter.get().bind(({trigger}) => {\n const selRange = editor.selection.getRng();\n return getContext(editor.dom, selRange, trigger, uiActive.get()).filter(({range}) => isRangeInsideOrEqual(selRange, range)).map(({range}) => range);\n });\n };\n editor.addCommand('mceAutocompleterReload', (_ui, value) => {\n const fetchOptions = isObject(value) ? value.fetchOptions : {};\n load(fetchOptions);\n });\n editor.addCommand('mceAutocompleterClose', cancelIfNecessary);\n editor.addCommand('mceAutocompleterRefreshActiveRange', () => {\n readActiveRange().each(range => {\n fireAutocompleterUpdateActiveRange(editor, { range });\n });\n });\n editor.editorCommands.addQueryStateHandler('mceAutoCompleterInRange', () => readActiveRange().isSome());\n setupEditorInput(editor, {\n cancelIfNecessary,\n load\n });\n };\n\n const browser$1 = detect$1().browser;\n const isSafari = browser$1.isSafari();\n const emptyNodeContents = node => fillWithPaddingBr(SugarElement.fromDom(node));\n const isEntireNodeSelected = (rng, node) => {\n var _a;\n return rng.startOffset === 0 && rng.endOffset === ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length);\n };\n const getParentDetailsElementAtPos = (dom, pos) => Optional.from(dom.getParent(pos.container(), 'details'));\n const isInDetailsElement = (dom, pos) => getParentDetailsElementAtPos(dom, pos).isSome();\n const getDetailsElements = (dom, rng) => {\n const startDetails = Optional.from(dom.getParent(rng.startContainer, 'details'));\n const endDetails = Optional.from(dom.getParent(rng.endContainer, 'details'));\n if (startDetails.isSome() || endDetails.isSome()) {\n const startSummary = startDetails.bind(details => Optional.from(dom.select('summary', details)[0]));\n return Optional.some({\n startSummary,\n startDetails,\n endDetails\n });\n } else {\n return Optional.none();\n }\n };\n const isCaretInTheBeginningOf = (caretPos, element) => firstPositionIn(element).exists(pos => pos.isEqual(caretPos));\n const isCaretInTheEndOf = (caretPos, element) => {\n return lastPositionIn(element).exists(pos => {\n if (isBr$6(pos.getNode())) {\n return prevPosition(element, pos).exists(pos2 => pos2.isEqual(caretPos)) || pos.isEqual(caretPos);\n } else {\n return pos.isEqual(caretPos);\n }\n });\n };\n const isCaretAtStartOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheBeginningOf(caretPos, summary));\n const isCaretAtEndOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheEndOf(caretPos, summary));\n const isCaretInFirstPositionInBody = (caretPos, detailsElements) => detailsElements.startDetails.exists(details => prevPosition(details, caretPos).forall(pos => detailsElements.startSummary.exists(summary => !summary.contains(caretPos.container()) && summary.contains(pos.container()))));\n const isCaretInLastPositionInBody = (root, caretPos, detailsElements) => detailsElements.startDetails.exists(details => nextPosition(root, caretPos).forall(pos => !details.contains(pos.container())));\n const setCaretToPosition = (editor, position) => {\n const node = position.getNode();\n if (!isUndefined(node)) {\n editor.selection.setCursorLocation(node, position.offset());\n }\n };\n const moveCaretToDetailsPos = (editor, pos, forward) => {\n const details = editor.dom.getParent(pos.container(), 'details');\n if (details && !details.open) {\n const summary = editor.dom.select('summary', details)[0];\n if (summary) {\n const newPos = forward ? firstPositionIn(summary) : lastPositionIn(summary);\n newPos.each(pos => setCaretToPosition(editor, pos));\n }\n } else {\n setCaretToPosition(editor, pos);\n }\n };\n const isPartialDelete = (rng, detailsElements) => {\n const containsStart = element => element.contains(rng.startContainer);\n const containsEnd = element => element.contains(rng.endContainer);\n const startInSummary = detailsElements.startSummary.exists(containsStart);\n const endInSummary = detailsElements.startSummary.exists(containsEnd);\n const isPartiallySelectedDetailsElements = detailsElements.startDetails.forall(startDetails => detailsElements.endDetails.forall(endDetails => startDetails !== endDetails));\n const isInPartiallySelectedSummary = (startInSummary || endInSummary) && !(startInSummary && endInSummary);\n return isInPartiallySelectedSummary || isPartiallySelectedDetailsElements;\n };\n const shouldPreventDeleteIntoDetails = (editor, forward, granularity) => {\n const {dom, selection} = editor;\n const root = editor.getBody();\n if (granularity === 'character') {\n const caretPos = CaretPosition.fromRangeStart(selection.getRng());\n const parentBlock = dom.getParent(caretPos.container(), dom.isBlock);\n const parentDetailsAtCaret = getParentDetailsElementAtPos(dom, caretPos);\n const inEmptyParentBlock = parentBlock && dom.isEmpty(parentBlock);\n const isFirstBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.previousSibling);\n const isLastBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.nextSibling);\n if (inEmptyParentBlock) {\n const firstOrLast = forward ? isLastBlock : isFirstBlock;\n if (firstOrLast) {\n const isBeforeAfterDetails = navigate(!forward, root, caretPos).exists(pos => {\n return isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, getParentDetailsElementAtPos(dom, pos));\n });\n if (isBeforeAfterDetails) {\n return true;\n }\n }\n }\n return navigate(forward, root, caretPos).fold(never, pos => {\n const parentDetailsAtNewPos = getParentDetailsElementAtPos(dom, pos);\n if (isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, parentDetailsAtNewPos)) {\n if (!forward) {\n moveCaretToDetailsPos(editor, pos, false);\n }\n if (parentBlock && inEmptyParentBlock) {\n if (forward && isFirstBlock) {\n return true;\n } else if (!forward && isLastBlock) {\n return true;\n }\n moveCaretToDetailsPos(editor, pos, forward);\n editor.dom.remove(parentBlock);\n }\n return true;\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n };\n const shouldPreventDeleteSummaryAction = (editor, detailElements, forward, granularity) => {\n const selection = editor.selection;\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (granularity === 'selection') {\n return isPartialDelete(rng, detailElements);\n } else if (forward) {\n return isCaretAtEndOfSummary(caretPos, detailElements) || isCaretInLastPositionInBody(root, caretPos, detailElements);\n } else {\n return isCaretAtStartOfSummary(caretPos, detailElements) || isCaretInFirstPositionInBody(caretPos, detailElements);\n }\n };\n const shouldPreventDeleteAction = (editor, forward, granularity) => getDetailsElements(editor.dom, editor.selection.getRng()).fold(() => shouldPreventDeleteIntoDetails(editor, forward, granularity), detailsElements => shouldPreventDeleteSummaryAction(editor, detailsElements, forward, granularity) || shouldPreventDeleteIntoDetails(editor, forward, granularity));\n const handleDeleteActionSafari = (editor, forward, granularity) => {\n const selection = editor.selection;\n const node = selection.getNode();\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n if (isSummary$1(node)) {\n if (granularity === 'selection' && isEntireNodeSelected(rng, node) || willDeleteLastPositionInElement(forward, caretPos, node)) {\n emptyNodeContents(node);\n } else {\n editor.undoManager.transact(() => {\n const sel = selection.getSel();\n let {anchorNode, anchorOffset, focusNode, focusOffset} = sel !== null && sel !== void 0 ? sel : {};\n const applySelection = () => {\n if (isNonNullable(anchorNode) && isNonNullable(anchorOffset) && isNonNullable(focusNode) && isNonNullable(focusOffset)) {\n sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);\n }\n };\n const updateSelection = () => {\n anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n anchorOffset = sel === null || sel === void 0 ? void 0 : sel.anchorOffset;\n focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n focusOffset = sel === null || sel === void 0 ? void 0 : sel.focusOffset;\n };\n const appendAllChildNodes = (from, to) => {\n each$e(from.childNodes, child => {\n if (isNode(child)) {\n to.appendChild(child);\n }\n });\n };\n const container = editor.dom.create('span', { 'data-mce-bogus': '1' });\n appendAllChildNodes(node, container);\n node.appendChild(container);\n applySelection();\n if (granularity === 'word' || granularity === 'line') {\n sel === null || sel === void 0 ? void 0 : sel.modify('extend', forward ? 'right' : 'left', granularity);\n }\n if (!selection.isCollapsed() && isEntireNodeSelected(selection.getRng(), container)) {\n emptyNodeContents(node);\n } else {\n editor.execCommand(forward ? 'ForwardDelete' : 'Delete');\n updateSelection();\n appendAllChildNodes(container, node);\n applySelection();\n }\n editor.dom.remove(container);\n });\n }\n return true;\n } else {\n return false;\n }\n };\n const backspaceDelete = (editor, forward, granularity) => shouldPreventDeleteAction(editor, forward, granularity) || isSafari && handleDeleteActionSafari(editor, forward, granularity) ? Optional.some(noop) : Optional.none();\n\n const createAndFireInputEvent = eventType => (editor, inputType, specifics = {}) => {\n const target = editor.getBody();\n const overrides = {\n bubbles: true,\n composed: true,\n data: null,\n isComposing: false,\n detail: 0,\n view: null,\n target,\n currentTarget: target,\n eventPhase: Event.AT_TARGET,\n originalTarget: target,\n explicitOriginalTarget: target,\n isTrusted: false,\n srcElement: target,\n cancelable: false,\n preventDefault: noop,\n inputType\n };\n const input = clone$3(new InputEvent(eventType));\n return editor.dispatch(eventType, {\n ...input,\n ...overrides,\n ...specifics\n });\n };\n const fireInputEvent = createAndFireInputEvent('input');\n const fireBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n const platform$2 = detect$1();\n const os = platform$2.os;\n const isMacOSOriOS = os.isMacOS() || os.isiOS();\n const browser = platform$2.browser;\n const isFirefox = browser.isFirefox();\n const executeKeydownOverride$3 = (editor, caret, evt) => {\n const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n const isCollapsed = editor.selection.isCollapsed();\n const unmodifiedGranularity = isCollapsed ? 'character' : 'selection';\n const getModifiedGranularity = isWord => {\n if (isCollapsed) {\n return isWord ? 'word' : 'line';\n } else {\n return 'selection';\n }\n };\n executeWithDelayedAction([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$7, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$7, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$8, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$8, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$4, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$b, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$b, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false, unmodifiedGranularity)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete, editor, true, unmodifiedGranularity)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n },\n {\n keyCode: VK.BACKSPACE,\n metaKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(false))\n }\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n }\n ],\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$5, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$5, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$9, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$9, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$a, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$a, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, true)\n }\n ], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {\n evt.preventDefault();\n const beforeInput = fireBeforeInputEvent(editor, inputType);\n if (!beforeInput.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(editor, inputType);\n }\n });\n };\n const executeKeyupOverride = (editor, evt, isBackspaceKeydown) => execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n ...isBackspaceKeydown ? [{\n keyCode: isFirefox ? 224 : 91,\n action: action(refreshCaret, editor)\n }] : []\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n }\n ]\n ], evt);\n const setup$j = (editor, caret) => {\n let isBackspaceKeydown = false;\n editor.on('keydown', evt => {\n isBackspaceKeydown = evt.keyCode === VK.BACKSPACE;\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$3(editor, caret, evt);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeyupOverride(editor, evt, isBackspaceKeydown);\n }\n isBackspaceKeydown = false;\n });\n };\n\n const firstNonWhiteSpaceNodeSibling = node => {\n while (node) {\n if (isElement$6(node) || isText$b(node) && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n };\n const moveToCaretPosition = (editor, root) => {\n const dom = editor.dom;\n const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n const firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n }\n }\n const rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n const walker = new DomTreeWalker(root, root);\n let lastNode = root;\n let node;\n while (node = walker.current()) {\n if (isText$b(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (isBr$6(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n const getEditableRoot = (dom, node) => {\n const root = dom.getRoot();\n let editableRoot;\n let parent = node;\n while (parent !== root && parent && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n const getParentBlock$1 = editor => {\n return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n const getParentBlockName = editor => {\n return getParentBlock$1(editor).fold(constant(''), parentBlock => {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n const isListItemParentBlock = editor => {\n return getParentBlock$1(editor).filter(elm => {\n return isListItem$1(SugarElement.fromDom(elm));\n }).isSome();\n };\n const emptyBlock = elm => {\n elm.innerHTML = '
    ';\n };\n const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n const dom = editor.dom;\n Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(attrStyles => {\n const currentStyles = getAllRaw(SugarElement.fromDom(node));\n const newStyles = {\n ...currentStyles,\n ...attrStyles\n };\n dom.setStyles(node, newStyles);\n });\n const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(attrClasses => attrClasses.split(/\\s+/));\n const currentClassesOpt = Optional.from(node.className).map(currentClasses => filter$5(currentClasses.split(/\\s+/), clazz => clazz !== ''));\n lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n const filteredClasses = filter$5(currentClasses, clazz => !contains$2(attrClasses, clazz));\n const newClasses = [\n ...attrClasses,\n ...filteredClasses\n ];\n dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n const appliedAttrs = [\n 'style',\n 'class'\n ];\n const remainingAttrs = filter$4(forcedRootBlockAttrs, (_, attrs) => !contains$2(appliedAttrs, attrs));\n dom.setAttribs(node, remainingAttrs);\n };\n const setForcedBlockAttrs = (editor, node) => {\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n const createNewBlock = (editor, container, parentBlock, editableRoot, keepStyles = true, name, styles) => {\n const dom = editor.dom;\n const schema = editor.schema;\n const newBlockName = getForcedRootBlock(editor);\n const parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n let node = container;\n const textInlineElements = schema.getTextInlineElements();\n let block;\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName, styles || {});\n } else {\n block = parentBlock.cloneNode(false);\n }\n let caretNode = block;\n if (!keepStyles) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || isBookmarkNode$1(node)) {\n continue;\n }\n const clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n\n const getDetailsRoot = (editor, element) => editor.dom.getParent(element, isDetails);\n const isAtDetailsEdge = (root, element, isTextBlock) => {\n let node = element;\n while (node && node !== root && isNull(node.nextSibling)) {\n const parent = node.parentElement;\n if (!parent || !isTextBlock(parent)) {\n return isDetails(parent);\n }\n node = parent;\n }\n return false;\n };\n const isLastEmptyBlockInDetails = (editor, shiftKey, element) => !shiftKey && element.nodeName.toLowerCase() === getForcedRootBlock(editor) && editor.dom.isEmpty(element) && isAtDetailsEdge(editor.getBody(), element, el => has$2(editor.schema.getTextBlockElements(), el.nodeName.toLowerCase()));\n const insertNewLine = (editor, createNewBlock, parentBlock) => {\n var _a, _b, _c;\n const newBlock = createNewBlock(getForcedRootBlock(editor));\n const root = getDetailsRoot(editor, parentBlock);\n if (!root) {\n return;\n }\n editor.dom.insertAfter(newBlock, root);\n moveToCaretPosition(editor, newBlock);\n if (((_c = (_b = (_a = parentBlock.parentElement) === null || _a === void 0 ? void 0 : _a.childNodes) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 1) {\n editor.dom.remove(parentBlock);\n }\n };\n\n const hasFirstChild = (elm, name) => {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n const isFirstChild = elm => {\n var _a;\n return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n };\n const hasParent = (elm, parentName) => {\n const parentNode = elm === null || elm === void 0 ? void 0 : elm.parentNode;\n return isNonNullable(parentNode) && parentNode.nodeName === parentName;\n };\n const isListBlock = elm => {\n return isNonNullable(elm) && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n const isListItem = elm => {\n return isNonNullable(elm) && /^(LI|DT|DD)$/.test(elm.nodeName);\n };\n const isNestedList = elm => {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n const getContainerBlock = containerBlock => {\n const containerBlockParent = containerBlock.parentNode;\n return isListItem(containerBlockParent) ? containerBlockParent : containerBlock;\n };\n const isFirstOrLastLi = (containerBlock, parentBlock, first) => {\n let node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (isElement$6(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n const getStyles = elm => foldl(mapToArray(getAllRaw(SugarElement.fromDom(elm)), (style, styleName) => `${ styleName }: ${ style };`), (acc, s) => acc + s, '');\n const insert$4 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const containerParent = containerBlock.parentNode;\n if (containerBlock === editor.getBody() || !containerParent) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n const parentBlockStyles = isListItem(parentBlock) ? getStyles(parentBlock) : undefined;\n let newBlock = isListItem(parentBlock) && parentBlockStyles ? createNewBlock(newBlockName, { style: getStyles(parentBlock) }) : createNewBlock(newBlockName);\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent(containerBlock, 'LI')) {\n const containerBlockParent = getContainerBlock(containerBlock);\n dom.insertAfter(newBlock, containerBlockParent);\n if (isFirstChild(containerBlock)) {\n dom.remove(containerBlockParent);\n } else {\n dom.remove(containerBlock);\n }\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerParent.insertBefore(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n dom.remove(parentBlock);\n } else {\n containerBlock = getContainerBlock(containerBlock);\n const tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n const fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n const previousChildren = filter$5(map$3(newBlock.children, SugarElement.fromDom), not(isTag('br')));\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n each$e(previousChildren, child => prepend(SugarElement.fromDom(newBlock), child));\n if (parentBlockStyles) {\n newBlock.setAttribute('style', parentBlockStyles);\n }\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n\n const trimZwsp = fragment => {\n each$e(descendants$1(SugarElement.fromDom(fragment), isText$c), text => {\n const rawNode = text.dom;\n rawNode.nodeValue = trim$2(rawNode.data);\n });\n };\n const isWithinNonEditableList = (editor, node) => {\n const parentList = editor.dom.getParent(node, 'ol,ul,dl');\n return parentList !== null && editor.dom.getContentEditableParent(parentList) === 'false';\n };\n const isEmptyAnchor = (dom, elm) => {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n const containerAndPreviousSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n const containerAndNextSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.nextSibling && container.nextSibling.nodeName === nodeName;\n };\n const canSplitBlock = (dom, node) => {\n return isNonNullable(node) && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.isEditable(node.parentNode) && dom.getContentEditable(node) !== 'false';\n };\n const trimInlineElementsOnLeftSideOfBlock = (dom, nonEmptyElementsMap, block) => {\n var _a;\n const firstChilds = [];\n if (!block) {\n return;\n }\n let currentNode = block;\n while (currentNode = currentNode.firstChild) {\n if (dom.isBlock(currentNode)) {\n return;\n }\n if (isElement$6(currentNode) && !nonEmptyElementsMap[currentNode.nodeName.toLowerCase()]) {\n firstChilds.push(currentNode);\n }\n }\n let i = firstChilds.length;\n while (i--) {\n currentNode = firstChilds[i];\n if (!currentNode.hasChildNodes() || currentNode.firstChild === currentNode.lastChild && ((_a = currentNode.firstChild) === null || _a === void 0 ? void 0 : _a.nodeValue) === '') {\n dom.remove(currentNode);\n } else {\n if (isEmptyAnchor(dom, currentNode)) {\n dom.remove(currentNode);\n }\n }\n }\n };\n const normalizeZwspOffset = (start, container, offset) => {\n if (!isText$b(container)) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n }\n };\n const includeZwspInRange = rng => {\n const newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n const trimLeadingLineBreaks = node => {\n let currentNode = node;\n do {\n if (isText$b(currentNode)) {\n currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n }\n currentNode = currentNode.firstChild;\n } while (currentNode);\n };\n const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n var _a, _b;\n const dom = editor.dom;\n const editableRoot = (_a = getEditableRoot(dom, container)) !== null && _a !== void 0 ? _a : dom.getRoot();\n let parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (!parentBlock.hasChildNodes()) {\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n let node = container;\n while (node && node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n let startNode;\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n const startNodeName = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.parentElement) === null || _b === void 0 ? void 0 : _b.nodeName;\n if (startNode && startNodeName && editor.schema.isValidChild(startNodeName, newBlockName.toLowerCase())) {\n const startNodeParent = startNode.parentNode;\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n startNodeParent.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n const next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n const addBrToBlockIfNeeded = (dom, block) => {\n block.normalize();\n const lastChild = block.lastChild;\n if (!lastChild || isElement$6(lastChild) && /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n const shouldEndContainer = (editor, container) => {\n const optionValue = shouldEndContainerOnEmptyBlock(editor);\n if (isNullable(container)) {\n return false;\n } else if (isString(optionValue)) {\n return contains$2(Tools.explode(optionValue), container.nodeName.toLowerCase());\n } else {\n return optionValue;\n }\n };\n const insert$3 = (editor, evt) => {\n let container;\n let offset;\n let parentBlockName;\n let containerBlock;\n let isAfterLastNodeInContainer = false;\n const dom = editor.dom;\n const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n const rng = editor.selection.getRng();\n const newBlockName = getForcedRootBlock(editor);\n const start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCef = child.exists(element => isHTMLElement$1(element) && !isEditable$2(element));\n const collapsedAndCef = rng.collapsed && isCef;\n const createNewBlock$1 = (name, styles) => {\n return createNewBlock(editor, container, parentBlock, editableRoot, shouldKeepStyles(editor), name, styles);\n };\n const isCaretAtStartOrEndOfBlock = start => {\n const normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$b(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n return false;\n }\n if ((container.parentNode === parentBlock || container === parentBlock) && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$6(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndPreviousSiblingName(container, 'TABLE') || containerAndPreviousSiblingName(container, 'HR')) {\n if (containerAndNextSiblingName(container, 'BR')) {\n return !start;\n }\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n const walker = new DomTreeWalker(container, parentBlock);\n if (isText$b(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.data.length) {\n walker.next();\n }\n }\n let node;\n while (node = walker.current()) {\n if (isElement$6(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n const name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$b(node) && !isWhitespaceText(node.data)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n const insertNewBlockAfter = () => {\n let block;\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n block = createNewBlock$1(newBlockName);\n } else {\n block = createNewBlock$1();\n }\n if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock, undefined, { includeZwsp: true })) {\n block = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(block, parentBlock);\n }\n moveToCaretPosition(editor, block);\n return block;\n };\n normalize$2(dom, rng).each(normRng => {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n const shiftKey = !!(evt && evt.shiftKey);\n const ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$6(container) && container.hasChildNodes() && !collapsedAndCef) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$b(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n const editableRoot = getEditableRoot(dom, container);\n if (!editableRoot || isWithinNonEditableList(editor, container)) {\n return;\n }\n if (!shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n let parentBlock = dom.getParent(container, dom.isBlock) || dom.getRoot();\n containerBlock = isNonNullable(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.parentNode) ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n const liBlock = containerBlock;\n parentBlock = liBlock;\n containerBlock = liBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (isElement$6(containerBlock) && isLastEmptyBlockInDetails(editor, shiftKey, parentBlock)) {\n return insertNewLine(editor, createNewBlock$1, parentBlock);\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n if (dom.isEmpty(parentBlock)) {\n insert$4(editor, createNewBlock$1, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (!collapsedAndCef && (parentBlock === editor.getBody() || !canSplitBlock(dom, parentBlock))) {\n return;\n }\n const parentBlockParent = parentBlock.parentNode;\n let newBlock;\n if (collapsedAndCef) {\n newBlock = createNewBlock$1(newBlockName);\n child.fold(() => {\n append$1(start, SugarElement.fromDom(newBlock));\n }, child => {\n before$3(child, SugarElement.fromDom(newBlock));\n });\n editor.selection.setCursorLocation(newBlock, 0);\n } else if (isCaretContainerBlock$1(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock(false)) {\n newBlock = insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const afterTable = isAfterTable(caretPos);\n const parentBlockSugar = SugarElement.fromDom(parentBlock);\n const afterBr = isAfterBr(parentBlockSugar, caretPos, editor.schema);\n const prevBrOpt = afterBr ? findPreviousBr(parentBlockSugar, caretPos, editor.schema).bind(pos => Optional.from(pos.getNode())) : Optional.none();\n newBlock = parentBlockParent.insertBefore(createNewBlock$1(), parentBlock);\n const root = containerAndPreviousSiblingName(parentBlock, 'HR') || afterTable ? newBlock : prevBrOpt.getOr(parentBlock);\n moveToCaretPosition(editor, root);\n } else {\n const tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n const fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.dispatch('NewBlock', { newBlock });\n };\n const fakeEventName$1 = 'insertParagraph';\n const blockbreak = {\n insert: insert$3,\n fakeEventName: fakeEventName$1\n };\n\n const hasRightSideContent = (schema, container, parentBlock) => {\n const walker = new DomTreeWalker(container, parentBlock);\n let node;\n const nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || isText$b(node) && node.length > 0) {\n return true;\n }\n }\n return false;\n };\n const moveSelectionToBr = (editor, brElm, extraBr) => {\n const rng = editor.dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n const insertBrAtCaret = (editor, evt) => {\n const selection = editor.selection;\n const dom = editor.dom;\n const rng = selection.getRng();\n let brElm;\n let extraBr = false;\n normalize$2(dom, rng).each(normRng => {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n let offset = rng.startOffset;\n let container = rng.startContainer;\n if (isElement$6(container) && container.hasChildNodes()) {\n const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$b(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n let parentBlock = dom.getParent(container, dom.isBlock);\n const containerBlock = parentBlock && parentBlock.parentNode ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n const isControlKey = !!(evt && evt.ctrlKey);\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (isText$b(container) && offset >= container.data.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock || dom.getRoot())) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n moveSelectionToBr(editor, brElm, extraBr);\n editor.undoManager.add();\n };\n const insertBrBefore = (editor, inline) => {\n const br = SugarElement.fromTag('br');\n before$3(SugarElement.fromDom(inline), br);\n editor.undoManager.add();\n };\n const insertBrAfter = (editor, inline) => {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after$4(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n }\n const br = SugarElement.fromTag('br');\n after$4(SugarElement.fromDom(inline), br);\n moveSelectionToBr(editor, br.dom, false);\n editor.undoManager.add();\n };\n const isBeforeBr = pos => {\n return isBr$6(pos.getNode());\n };\n const hasBrAfter = (rootNode, startNode) => {\n if (isBeforeBr(CaretPosition.after(startNode))) {\n return true;\n } else {\n return nextPosition(rootNode, CaretPosition.after(startNode)).map(pos => {\n return isBr$6(pos.getNode());\n }).getOr(false);\n }\n };\n const isAnchorLink = elm => {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n const isInsideAnchor = location => {\n return location.fold(never, isAnchorLink, isAnchorLink, never);\n };\n const readInlineAnchorLocation = editor => {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n const insertBrOutsideAnchor = (editor, location) => {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n const insert$2 = (editor, evt) => {\n const anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n const fakeEventName = 'insertLineBreak';\n const linebreak = {\n insert: insert$2,\n fakeEventName\n };\n\n const matchesSelector = (editor, selector) => {\n return getParentBlock$1(editor).filter(parentBlock => {\n return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n }).isSome();\n };\n const shouldInsertBr = editor => {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n const shouldBlockNewLine$1 = editor => {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n const newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n const shouldBlockNewLine = (editor, _shiftKey) => {\n return shouldBlockNewLine$1(editor);\n };\n const inListBlock = requiredState => {\n return (editor, _shiftKey) => {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n const state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n const inCefBlock = editor => {\n const editableRoot = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNullable(editableRoot);\n };\n const inPreBlock = requiredState => inBlock('pre', requiredState);\n const inSummaryBlock = () => inBlock('summary', true);\n const shouldPutBrInPre = requiredState => {\n return (editor, _shiftKey) => {\n return shouldPutBrInPre$1(editor) === requiredState;\n };\n };\n const inBrContext = (editor, _shiftKey) => {\n return shouldInsertBr(editor);\n };\n const hasShiftKey = (_editor, shiftKey) => {\n return shiftKey;\n };\n const canInsertIntoEditableRoot = editor => {\n const forcedRootBlock = getForcedRootBlock(editor);\n const rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNonNullable(rootEditable) && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n };\n const isInRootWithEmptyOrCEF = editor => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCefOpt = child.map(element => isHTMLElement$1(element) && !isEditable$2(element));\n return rng.collapsed && isCefOpt.getOr(true);\n };\n const match = (predicates, action) => {\n return (editor, shiftKey) => {\n const isMatch = foldl(predicates, (res, p) => {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Optional.some(action) : Optional.none();\n };\n };\n const getAction = (editor, evt) => {\n return evaluateUntil([\n match([shouldBlockNewLine], newLineAction.none()),\n match([\n inPreBlock(true),\n inCefBlock\n ], newLineAction.none()),\n match([inSummaryBlock()], newLineAction.br()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(false),\n hasShiftKey\n ], newLineAction.br()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(false)\n ], newLineAction.block()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(true),\n hasShiftKey\n ], newLineAction.block()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(true)\n ], newLineAction.br()),\n match([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match([inListBlock(true)], newLineAction.block()),\n match([inBrContext], newLineAction.br()),\n match([hasShiftKey], newLineAction.br()),\n match([canInsertIntoEditableRoot], newLineAction.block()),\n match([isInRootWithEmptyOrCEF], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n const insertBreak = (breakType, editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n if (!editor.selection.isCollapsed()) {\n execEditorDeleteCommand(editor);\n }\n if (isNonNullable(evt)) {\n const event = fireBeforeInputEvent(editor, breakType.fakeEventName);\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n breakType.insert(editor, evt);\n if (isNonNullable(evt)) {\n fireInputEvent(editor, breakType.fakeEventName);\n }\n };\n const insert$1 = (editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const br = () => insertBreak(linebreak, editor, evt);\n const block = () => insertBreak(blockbreak, editor, evt);\n const logicalAction = getAction(editor, evt);\n switch (getNewlineBehavior(editor)) {\n case 'linebreak':\n logicalAction.fold(br, br, noop);\n break;\n case 'block':\n logicalAction.fold(block, block, noop);\n break;\n case 'invert':\n logicalAction.fold(block, br, noop);\n break;\n default:\n logicalAction.fold(br, block, noop);\n break;\n }\n };\n\n const platform$1 = detect$1();\n const isIOSSafari = platform$1.os.isiOS() && platform$1.browser.isSafari();\n const handleEnterKeyEvent = (editor, event) => {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(() => {\n insert$1(editor, event);\n });\n };\n const isCaretAfterKoreanCharacter = rng => {\n if (!rng.collapsed) {\n return false;\n }\n const startContainer = rng.startContainer;\n if (isText$b(startContainer)) {\n const koreanCharRegex = /^[\\uAC00-\\uD7AF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uD7B0-\\uD7FF]$/;\n const char = startContainer.data.charAt(rng.startOffset - 1);\n return koreanCharRegex.test(char);\n } else {\n return false;\n }\n };\n const setup$i = editor => {\n let iOSSafariKeydownBookmark = Optional.none();\n const iOSSafariKeydownOverride = editor => {\n iOSSafariKeydownBookmark = Optional.some(editor.selection.getBookmark());\n editor.undoManager.add();\n };\n const iOSSafariKeyupOverride = (editor, event) => {\n editor.undoManager.undo();\n iOSSafariKeydownBookmark.fold(noop, b => editor.selection.moveToBookmark(b));\n handleEnterKeyEvent(editor, event);\n iOSSafariKeydownBookmark = Optional.none();\n };\n editor.on('keydown', event => {\n if (event.keyCode === VK.ENTER) {\n if (isIOSSafari && isCaretAfterKoreanCharacter(editor.selection.getRng())) {\n iOSSafariKeydownOverride(editor);\n } else {\n handleEnterKeyEvent(editor, event);\n }\n }\n });\n editor.on('keyup', event => {\n if (event.keyCode === VK.ENTER) {\n iOSSafariKeydownBookmark.each(() => iOSSafariKeyupOverride(editor, event));\n }\n });\n };\n\n const executeKeydownOverride$2 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n execute([\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$1, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$1, editor, false)\n },\n ...!isMac ? [\n {\n keyCode: VK.HOME,\n action: action(selectToEndPoint, editor, false),\n ctrlKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.END,\n action: action(selectToEndPoint, editor, true),\n ctrlKey: true,\n shiftKey: true\n }\n ] : [],\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint, editor, false)\n },\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$2, editor, true, caret)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$2, editor, false, caret)\n }\n ], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$h = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$2(editor, caret, evt);\n }\n });\n };\n\n const setup$g = editor => {\n editor.on('input', e => {\n if (!e.isComposing) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n const platform = detect$1();\n const executeKeyupAction = (editor, caret, evt) => {\n execute([\n {\n keyCode: VK.PAGE_UP,\n action: action(moveToLineEndPoint$2, editor, false, caret)\n },\n {\n keyCode: VK.PAGE_DOWN,\n action: action(moveToLineEndPoint$2, editor, true, caret)\n }\n ], evt);\n };\n const stopImmediatePropagation = e => e.stopImmediatePropagation();\n const isPageUpDown = evt => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n const setNodeChangeBlocker = (blocked, editor, block) => {\n if (block && !blocked.get()) {\n editor.on('NodeChange', stopImmediatePropagation, true);\n } else if (!block && blocked.get()) {\n editor.off('NodeChange', stopImmediatePropagation);\n }\n blocked.set(block);\n };\n const setup$f = (editor, caret) => {\n if (platform.os.isMacOS()) {\n return;\n }\n const blocked = Cell(false);\n editor.on('keydown', evt => {\n if (isPageUpDown(evt)) {\n setNodeChangeBlocker(blocked, editor, true);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeyupAction(editor, caret, evt);\n }\n if (isPageUpDown(evt) && blocked.get()) {\n setNodeChangeBlocker(blocked, editor, false);\n editor.nodeChanged();\n }\n });\n };\n\n const setup$e = editor => {\n editor.on('beforeinput', e => {\n if (!editor.selection.isEditable() || exists(e.getTargetRanges(), rng => !isEditableRange(editor.dom, rng))) {\n e.preventDefault();\n }\n });\n };\n\n const insertTextAtPosition = (text, pos) => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(container)) {\n container.insertData(offset, text);\n return Optional.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(elm => {\n const textNode = SugarElement.fromText(text);\n if (pos.isAtEnd()) {\n after$4(elm, textNode);\n } else {\n before$3(elm, textNode);\n }\n return CaretPosition(textNode.dom, text.length);\n });\n }\n };\n const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n const insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n const insertSpaceOrNbspAtPosition = (root, pos, schema) => needsToHaveNbsp(root, pos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const locationToCaretPosition = root => location => location.fold(element => prevPosition(root.dom, CaretPosition.before(element)), element => firstPositionIn(element), element => lastPositionIn(element), element => nextPosition(root.dom, CaretPosition.after(element)));\n const insertInlineBoundarySpaceOrNbsp = (root, pos, schema) => checkPos => needsToHaveNbsp(root, checkPos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const setSelection = editor => pos => {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n };\n const isInsideSummary = (domUtils, node) => domUtils.isEditable(domUtils.getParent(node, 'summary'));\n const insertSpaceOrNbspAtSelection = editor => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).map(checkPos => () => insertInlineBoundarySpaceOrNbsp(root, pos, editor.schema)(checkPos).each(setSelection(editor)));\n } else {\n return Optional.none();\n }\n };\n const insertSpaceInSummaryAtSelectionOnFirefox = editor => {\n const insertSpaceThunk = () => {\n const root = SugarElement.fromDom(editor.getBody());\n if (!editor.selection.isCollapsed()) {\n editor.getDoc().execCommand('Delete');\n }\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n insertSpaceOrNbspAtPosition(root, pos, editor.schema).each(setSelection(editor));\n };\n return someIf(Env.browser.isFirefox() && editor.selection.isEditable() && isInsideSummary(editor.dom, editor.selection.getRng().startContainer), insertSpaceThunk);\n };\n\n const executeKeydownOverride$1 = (editor, evt) => {\n executeWithDelayedAction([\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n },\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceInSummaryAtSelectionOnFirefox, editor)\n }\n ], evt).each(applyAction => {\n evt.preventDefault();\n const event = fireBeforeInputEvent(editor, 'insertText', { data: ' ' });\n if (!event.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(editor, 'insertText', { data: ' ' });\n }\n });\n };\n const setup$d = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$1(editor, evt);\n }\n });\n };\n\n const tableTabNavigation = editor => {\n if (hasTableTabNavigation(editor)) {\n return [\n {\n keyCode: VK.TAB,\n action: action(handleTab, editor, true)\n },\n {\n keyCode: VK.TAB,\n shiftKey: true,\n action: action(handleTab, editor, false)\n }\n ];\n } else {\n return [];\n }\n };\n const executeKeydownOverride = (editor, evt) => {\n execute([...tableTabNavigation(editor)], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$c = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride(editor, evt);\n }\n });\n };\n\n const setup$b = editor => {\n editor.addShortcut('Meta+P', '', 'mcePrint');\n setup$k(editor);\n if (isRtc(editor)) {\n return Cell(null);\n } else {\n const caret = setupSelectedState(editor);\n setup$e(editor);\n setup$m(editor);\n setup$l(editor, caret);\n setup$j(editor, caret);\n setup$i(editor);\n setup$d(editor);\n setup$g(editor);\n setup$c(editor);\n setup$h(editor, caret);\n setup$f(editor, caret);\n return caret;\n }\n };\n\n class NodeChange {\n constructor(editor) {\n this.lastPath = [];\n this.editor = editor;\n let lastRng;\n const self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', e => {\n const nativeRng = editor.selection.getRng();\n const fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n editor.dispatch('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', () => {\n store(editor);\n editor.dispatch('SelectionChange');\n });\n editor.on('SelectionChange', () => {\n const startElm = editor.selection.getStart(true);\n if (!startElm) {\n return;\n }\n if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('mouseup', e => {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, () => {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n nodeChanged(args = {}) {\n const editor = this.editor;\n const selection = editor.selection;\n let node;\n if (editor.initialized && selection && !shouldDisableNodeChange(editor)) {\n const root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n const parents = [];\n editor.dom.getParent(node, node => {\n if (node === root) {\n return true;\n } else {\n parents.push(node);\n return false;\n }\n });\n editor.dispatch('NodeChange', {\n ...args,\n element: node,\n parents\n });\n }\n }\n isSameElementPath(startElm) {\n let i;\n const editor = this.editor;\n const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\n if (currentPath.length === this.lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== this.lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n this.lastPath = currentPath;\n return true;\n }\n }\n this.lastPath = currentPath;\n return false;\n }\n }\n\n const imageId = generate$1('image');\n const getDragImage = transfer => {\n const dt = transfer;\n return Optional.from(dt[imageId]);\n };\n const setDragImage = (transfer, imageData) => {\n const dt = transfer;\n dt[imageId] = imageData;\n };\n\n const eventId = generate$1('event');\n const getEvent = transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]);\n };\n const mkSetEventFn = type => transfer => {\n const dt = transfer;\n dt[eventId] = type;\n };\n const setEvent = (transfer, type) => mkSetEventFn(type)(transfer);\n const setDragstartEvent = mkSetEventFn(0);\n const setDropEvent = mkSetEventFn(2);\n const setDragendEvent = mkSetEventFn(1);\n const checkEvent = expectedType => transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]).exists(type => type === expectedType);\n };\n const isInDragStartEvent = checkEvent(0);\n\n const createEmptyFileList = () => Object.freeze({\n length: 0,\n item: _ => null\n });\n\n const modeId = generate$1('mode');\n const getMode = transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]);\n };\n const mkSetModeFn = mode => transfer => {\n const dt = transfer;\n dt[modeId] = mode;\n };\n const setMode$1 = (transfer, mode) => mkSetModeFn(mode)(transfer);\n const setReadWriteMode = mkSetModeFn(0);\n const setReadOnlyMode = mkSetModeFn(2);\n const setProtectedMode = mkSetModeFn(1);\n const checkMode = expectedMode => transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]).exists(mode => mode === expectedMode);\n };\n const isInReadWriteMode = checkMode(0);\n const isInProtectedMode = checkMode(1);\n\n const normalizeItems = (dataTransfer, itemsImpl) => ({\n ...itemsImpl,\n get length() {\n return itemsImpl.length;\n },\n add: (data, type) => {\n if (isInReadWriteMode(dataTransfer)) {\n if (isString(data)) {\n if (!isUndefined(type)) {\n return itemsImpl.add(data, type);\n }\n } else {\n return itemsImpl.add(data);\n }\n }\n return null;\n },\n remove: idx => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.remove(idx);\n }\n },\n clear: () => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.clear();\n }\n }\n });\n\n const validDropEffects = [\n 'none',\n 'copy',\n 'link',\n 'move'\n ];\n const validEffectAlloweds = [\n 'none',\n 'copy',\n 'copyLink',\n 'copyMove',\n 'link',\n 'linkMove',\n 'move',\n 'all',\n 'uninitialized'\n ];\n const createDataTransfer = () => {\n const dataTransferImpl = new window.DataTransfer();\n let dropEffect = 'move';\n let effectAllowed = 'all';\n const dataTransfer = {\n get dropEffect() {\n return dropEffect;\n },\n set dropEffect(effect) {\n if (contains$2(validDropEffects, effect)) {\n dropEffect = effect;\n }\n },\n get effectAllowed() {\n return effectAllowed;\n },\n set effectAllowed(allowed) {\n if (isInDragStartEvent(dataTransfer) && contains$2(validEffectAlloweds, allowed)) {\n effectAllowed = allowed;\n }\n },\n get items() {\n return normalizeItems(dataTransfer, dataTransferImpl.items);\n },\n get files() {\n if (isInProtectedMode(dataTransfer)) {\n return createEmptyFileList();\n } else {\n return dataTransferImpl.files;\n }\n },\n get types() {\n return dataTransferImpl.types;\n },\n setDragImage: (image, x, y) => {\n if (isInReadWriteMode(dataTransfer)) {\n setDragImage(dataTransfer, {\n image,\n x,\n y\n });\n dataTransferImpl.setDragImage(image, x, y);\n }\n },\n getData: format => {\n if (isInProtectedMode(dataTransfer)) {\n return '';\n } else {\n return dataTransferImpl.getData(format);\n }\n },\n setData: (format, data) => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.setData(format, data);\n }\n },\n clearData: format => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.clearData(format);\n }\n }\n };\n setReadWriteMode(dataTransfer);\n return dataTransfer;\n };\n const cloneDataTransfer = original => {\n const clone = createDataTransfer();\n const originalMode = getMode(original);\n setReadOnlyMode(original);\n setDragstartEvent(clone);\n clone.dropEffect = original.dropEffect;\n clone.effectAllowed = original.effectAllowed;\n getDragImage(original).each(imageData => clone.setDragImage(imageData.image, imageData.x, imageData.y));\n each$e(original.types, type => {\n if (type !== 'Files') {\n clone.setData(type, original.getData(type));\n }\n });\n each$e(original.files, file => clone.items.add(file));\n getEvent(original).each(type => {\n setEvent(clone, type);\n });\n originalMode.each(mode => {\n setMode$1(original, mode);\n setMode$1(clone, mode);\n });\n return clone;\n };\n\n const getHtmlData = dataTransfer => {\n const html = dataTransfer.getData('text/html');\n return html === '' ? Optional.none() : Optional.some(html);\n };\n const setHtmlData = (dataTransfer, html) => dataTransfer.setData('text/html', html);\n\n const internalMimeType = 'x-tinymce/html';\n const internalHtmlMime = constant(internalMimeType);\n const internalMark = '';\n const mark = html => internalMark + html;\n const unmark = html => html.replace(internalMark, '');\n const isMarked = html => html.indexOf(internalMark) !== -1;\n\n const isPlainText = text => {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n const openContainer = (rootTag, rootAttrs) => {\n let tag = '<' + rootTag;\n const attrs = mapToArray(rootAttrs, (value, key) => key + '=\"' + Entities.encodeAllRaw(value) + '\"');\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n return tag + '>';\n };\n const toBlockElements = (text, rootTag, rootAttrs) => {\n const blocks = text.split(/\\n\\n/);\n const tagOpen = openContainer(rootTag, rootAttrs);\n const tagClose = '';\n const paragraphs = map$3(blocks, p => {\n return p.split(/\\n/).join('
    ');\n });\n const stitch = p => {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join('');\n };\n\n const pasteBinDefaultContent = '%MCEPASTEBIN%';\n const create$6 = (editor, lastRngCell) => {\n const {dom, selection} = editor;\n const body = editor.getBody();\n lastRngCell.set(selection.getRng());\n const pasteBinElm = dom.add(editor.getBody(), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (Env.browser.isFirefox()) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', e => {\n e.stopPropagation();\n });\n pasteBinElm.focus();\n selection.select(pasteBinElm, true);\n };\n const remove = (editor, lastRngCell) => {\n const dom = editor.dom;\n if (getEl(editor)) {\n let pasteBinClone;\n const lastRng = lastRngCell.get();\n while (pasteBinClone = getEl(editor)) {\n dom.remove(pasteBinClone);\n dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n const getEl = editor => editor.dom.get('mcepastebin');\n const isPasteBin = elm => isNonNullable(elm) && elm.id === 'mcepastebin';\n const getHtml = editor => {\n const dom = editor.dom;\n const copyAndRemove = (toElm, fromElm) => {\n toElm.appendChild(fromElm);\n dom.remove(fromElm, true);\n };\n const [pasteBinElm, ...pasteBinClones] = filter$5(editor.getBody().childNodes, isPasteBin);\n each$e(pasteBinClones, pasteBinClone => {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n const dirtyWrappers = dom.select('div[id=mcepastebin]', pasteBinElm);\n for (let i = dirtyWrappers.length - 1; i >= 0; i--) {\n const cleanWrapper = dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n const isDefaultPasteBinContent = content => content === pasteBinDefaultContent;\n const PasteBin = editor => {\n const lastRng = Cell(null);\n return {\n create: () => create$6(editor, lastRng),\n remove: () => remove(editor, lastRng),\n getEl: () => getEl(editor),\n getHtml: () => getHtml(editor),\n getLastRng: lastRng.get\n };\n };\n\n const filter$1 = (content, items) => {\n Tools.each(items, v => {\n if (is$4(v, RegExp)) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n };\n const innerText = html => {\n const schema = Schema();\n const domParser = DomParser({}, schema);\n let text = '';\n const voidElements = schema.getVoidElements();\n const ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');\n const blockElements = schema.getBlockElements();\n const walk = node => {\n const name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (voidElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!(node.name in schema.getVoidElements())) {\n let currentNode = node.firstChild;\n if (currentNode) {\n do {\n walk(currentNode);\n } while (currentNode = currentNode.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n };\n html = filter$1(html, [//g]);\n walk(domParser.parse(html));\n return text;\n };\n const trimHtml = html => {\n const trimSpaces = (all, s1, s2) => {\n if (!s1 && !s2) {\n return ' ';\n }\n return nbsp;\n };\n html = filter$1(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
    /g,\n /
    $/i\n ]);\n return html;\n };\n const createIdGenerator = prefix => {\n let count = 0;\n return () => {\n return prefix + count++;\n };\n };\n const getImageMimeType = ext => {\n const lowerExt = ext.toLowerCase();\n const mimeOverrides = {\n jpg: 'jpeg',\n jpe: 'jpeg',\n jfi: 'jpeg',\n jif: 'jpeg',\n jfif: 'jpeg',\n pjpeg: 'jpeg',\n pjp: 'jpeg',\n svg: 'svg+xml'\n };\n return Tools.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n };\n\n const preProcess = (editor, html) => {\n const parser = DomParser({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n convert_unsafe_embeds: shouldConvertUnsafeEmbeds(editor)\n }, editor.schema);\n parser.addNodeFilter('meta', nodes => {\n Tools.each(nodes, node => {\n node.remove();\n });\n });\n const fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n };\n const processResult = (content, cancelled) => ({\n content,\n cancelled\n });\n const postProcessFilter = (editor, html, internal) => {\n const tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n const filterContent = (editor, content, internal) => {\n const preProcessArgs = firePastePreProcess(editor, content, internal);\n const filteredContent = preProcess(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n const process = (editor, html, internal) => {\n return filterContent(editor, html, internal);\n };\n\n const pasteHtml$1 = (editor, html) => {\n editor.insertContent(html, {\n merge: shouldPasteMergeFormats(editor),\n paste: true\n });\n return true;\n };\n const isAbsoluteUrl = url => /^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(url);\n const isImageUrl = (editor, url) => {\n return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), type => endsWith(url.toLowerCase(), `.${ type.toLowerCase() }`));\n };\n const createImage = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.insertContent('');\n });\n return true;\n };\n const createLink = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n const linkSelection = (editor, html, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n const insertImage = (editor, html, pasteHtmlFn) => isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n const smartInsertContent = (editor, html) => {\n Tools.each([\n linkSelection,\n insertImage,\n pasteHtml$1\n ], action => {\n return !action(editor, html, pasteHtml$1);\n });\n };\n const insertContent = (editor, html, pasteAsText) => {\n if (pasteAsText || !isSmartPasteEnabled(editor)) {\n pasteHtml$1(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n\n const uniqueId = createIdGenerator('mceclip');\n const createPasteDataTransfer = html => {\n const dataTransfer = createDataTransfer();\n setHtmlData(dataTransfer, html);\n setReadOnlyMode(dataTransfer);\n return dataTransfer;\n };\n const doPaste = (editor, content, internal, pasteAsText, shouldSimulateInputEvent) => {\n const res = process(editor, content, internal);\n if (!res.cancelled) {\n const content = res.content;\n const doPasteAction = () => insertContent(editor, content, pasteAsText);\n if (shouldSimulateInputEvent) {\n const args = fireBeforeInputEvent(editor, 'insertFromPaste', { dataTransfer: createPasteDataTransfer(content) });\n if (!args.isDefaultPrevented()) {\n doPasteAction();\n fireInputEvent(editor, 'insertFromPaste');\n }\n } else {\n doPasteAction();\n }\n }\n };\n const pasteHtml = (editor, html, internalFlag, shouldSimulateInputEvent) => {\n const internal = internalFlag ? internalFlag : isMarked(html);\n doPaste(editor, unmark(html), internal, false, shouldSimulateInputEvent);\n };\n const pasteText = (editor, text, shouldSimulateInputEvent) => {\n const encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n const html = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n doPaste(editor, html, false, true, shouldSimulateInputEvent);\n };\n const getDataTransferItems = dataTransfer => {\n const items = {};\n if (dataTransfer && dataTransfer.types) {\n for (let i = 0; i < dataTransfer.types.length; i++) {\n const contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n return items;\n };\n const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n const extractFilename = (editor, str) => {\n const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n };\n const createBlobInfo = (editor, blobCache, file, base64) => {\n const id = uniqueId();\n const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n const name = useFileName ? extractFilename(editor, file.name) : id;\n const filename = useFileName ? file.name : undefined;\n const blobInfo = blobCache.create(id, file, base64, name, filename);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const pasteImage = (editor, imageItem) => {\n parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n const base64 = base64Encoded ? data : btoa(data);\n const file = imageItem.file;\n const blobCache = editor.editorUpload.blobCache;\n const existingBlobInfo = blobCache.getByData(base64, type);\n const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n pasteHtml(editor, ``, false, true);\n });\n };\n const isClipboardEvent = event => event.type === 'paste';\n const readFilesAsDataUris = items => Promise.all(map$3(items, file => {\n return blobToDataUri(file).then(uri => ({\n file,\n uri\n }));\n }));\n const isImage = editor => {\n const allowedExtensions = getAllowedImageFileTypes(editor);\n return file => startsWith(file.type, 'image/') && exists(allowedExtensions, extension => {\n return getImageMimeType(extension) === file.type;\n });\n };\n const getImagesFromDataTransfer = (editor, dataTransfer) => {\n const items = dataTransfer.items ? bind$3(from(dataTransfer.items), item => {\n return item.kind === 'file' ? [item.getAsFile()] : [];\n }) : [];\n const files = dataTransfer.files ? from(dataTransfer.files) : [];\n return filter$5(items.length > 0 ? items : files, isImage(editor));\n };\n const pasteImageData = (editor, e, rng) => {\n const dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (shouldPasteDataImages(editor) && dataTransfer) {\n const images = getImagesFromDataTransfer(editor, dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readFilesAsDataUris(images).then(fileResults => {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each$e(fileResults, result => {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n const isBrokenAndroidClipboardEvent = e => {\n var _a, _b;\n return Env.os.isAndroid() && ((_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n };\n const isKeyboardPasteEvent = e => VK.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n const insertClipboardContent = (editor, clipboardContent, html, plainTextMode, shouldSimulateInputEvent) => {\n let content = trimHtml(html);\n const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html);\n const isPlainTextHtml = !isInternal && isPlainText(content);\n const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n plainTextMode = true;\n }\n if (plainTextMode || isAbsoluteUrl$1) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = innerText(content);\n }\n }\n if (isDefaultPasteBinContent(content)) {\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content, shouldSimulateInputEvent);\n } else {\n pasteHtml(editor, content, isInternal, shouldSimulateInputEvent);\n }\n };\n const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n let keyboardPastePlainTextState;\n const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n editor.on('keydown', e => {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n }\n });\n editor.on('paste', e => {\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n return;\n }\n const plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n keyboardPastePlainTextState = false;\n const clipboardContent = getDataTransferItems(e.clipboardData);\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n return;\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/html'], plainTextMode, true);\n } else if (hasContentType(clipboardContent, 'text/plain') && hasContentType(clipboardContent, 'text/uri-list')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/plain'], plainTextMode, true);\n } else {\n pasteBin.create();\n Delay.setEditorTimeout(editor, () => {\n const html = pasteBin.getHtml();\n pasteBin.remove();\n insertClipboardContent(editor, clipboardContent, html, plainTextMode, false);\n }, 0);\n }\n });\n };\n const registerDataImageFilter = editor => {\n const isWebKitFakeUrl = src => startsWith(src, 'webkit-fake-url');\n const isDataUri = src => startsWith(src, 'data:');\n const isPasteInsert = args => {\n var _a;\n return ((_a = args.data) === null || _a === void 0 ? void 0 : _a.paste) === true;\n };\n editor.parser.addNodeFilter('img', (nodes, name, args) => {\n if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n for (const node of nodes) {\n const src = node.attr('src');\n if (isString(src) && !node.attr('data-mce-object') && src !== Env.transparentSrc) {\n if (isWebKitFakeUrl(src)) {\n node.remove();\n } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n node.remove();\n }\n }\n }\n }\n });\n };\n const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n registerDataImageFilter(editor);\n };\n\n const togglePlainTextPaste = (editor, pasteFormat) => {\n if (pasteFormat.get() === 'text') {\n pasteFormat.set('html');\n firePastePlainTextToggle(editor, false);\n } else {\n pasteFormat.set('text');\n firePastePlainTextToggle(editor, true);\n }\n editor.focus();\n };\n const register$1 = (editor, pasteFormat) => {\n editor.addCommand('mceTogglePlainTextPaste', () => {\n togglePlainTextPaste(editor, pasteFormat);\n });\n editor.addCommand('mceInsertClipboardContent', (ui, value) => {\n if (value.html) {\n pasteHtml(editor, value.html, value.internal, false);\n }\n if (value.text) {\n pasteText(editor, value.text, false);\n }\n });\n };\n\n const setHtml5Clipboard = (clipboardData, html, text) => {\n if (clipboardData) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n const setClipboardData = (evt, data, fallback, done) => {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n const fallback = editor => (html, done) => {\n const {dom, selection} = editor;\n const outer = dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n const inner = dom.create('div', { contenteditable: 'true' }, html);\n dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n dom.add(editor.getBody(), outer);\n const range = selection.getRng();\n inner.focus();\n const offscreenRange = dom.createRng();\n offscreenRange.selectNodeContents(inner);\n selection.setRng(offscreenRange);\n Delay.setEditorTimeout(editor, () => {\n selection.setRng(range);\n dom.remove(outer);\n done();\n }, 0);\n };\n const getData = editor => ({\n html: mark(editor.selection.getContent({ contextual: true })),\n text: editor.selection.getContent({ format: 'text' })\n });\n const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n const cut = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor) && editor.selection.isEditable()) {\n setClipboardData(evt, getData(editor), fallback(editor), () => {\n if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n const rng = editor.selection.getRng();\n Delay.setEditorTimeout(editor, () => {\n editor.selection.setRng(rng);\n editor.execCommand('Delete');\n }, 0);\n } else {\n editor.execCommand('Delete');\n }\n });\n }\n };\n const copy = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop);\n }\n };\n const register = editor => {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n\n const getCaretRangeFromEvent = (editor, e) => {\n var _a, _b;\n return RangeUtils.getCaretRangeFromPoint((_a = e.clientX) !== null && _a !== void 0 ? _a : 0, (_b = e.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n };\n const isPlainTextFileUrl = content => {\n const plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n const setFocusedRange = (editor, rng) => {\n editor.focus();\n if (rng) {\n editor.selection.setRng(rng);\n }\n };\n const hasImage = dataTransfer => exists(dataTransfer.files, file => /^image\\//.test(file.type));\n const needsCustomInternalDrop = (dom, schema, target, dropContent) => {\n const parentTransparent = dom.getParent(target, node => isTransparentBlock(schema, node));\n const inSummary = !isNull(dom.getParent(target, 'summary'));\n if (inSummary) {\n return true;\n } else if (parentTransparent && has$2(dropContent, 'text/html')) {\n const fragment = new DOMParser().parseFromString(dropContent['text/html'], 'text/html').body;\n return !isNull(fragment.querySelector(parentTransparent.nodeName.toLowerCase()));\n } else {\n return false;\n }\n };\n const setupSummaryDeleteByDragFix = editor => {\n editor.on('input', e => {\n const hasNoSummary = el => isNull(el.querySelector('summary'));\n if (e.inputType === 'deleteByDrag') {\n const brokenDetailElements = filter$5(editor.dom.select('details'), hasNoSummary);\n each$e(brokenDetailElements, details => {\n if (isBr$6(details.firstChild)) {\n details.firstChild.remove();\n }\n const summary = editor.dom.create('summary');\n summary.appendChild(createPaddingBr().dom);\n details.prepend(summary);\n });\n }\n });\n };\n const setup$a = (editor, draggingInternallyState) => {\n if (shouldPasteBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', e => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!shouldPasteDataImages(editor)) {\n editor.on('drop', e => {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && hasImage(dataTransfer)) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', e => {\n if (e.isDefaultPrevented()) {\n return;\n }\n const rng = getCaretRangeFromEvent(editor, e);\n if (isNullable(rng)) {\n return;\n }\n const dropContent = getDataTransferItems(e.dataTransfer);\n const internal = hasContentType(dropContent, internalHtmlMime());\n if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e, rng)) {\n return;\n }\n const internalContent = dropContent[internalHtmlMime()];\n const content = internalContent || dropContent['text/html'] || dropContent['text/plain'];\n const needsInternalDrop = needsCustomInternalDrop(editor.dom, editor.schema, rng.startContainer, dropContent);\n const isInternalDrop = draggingInternallyState.get();\n if (isInternalDrop && !needsInternalDrop) {\n return;\n }\n if (content) {\n e.preventDefault();\n Delay.setEditorTimeout(editor, () => {\n editor.undoManager.transact(() => {\n if (internalContent || isInternalDrop && needsInternalDrop) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n const trimmedContent = trimHtml(content);\n if (dropContent['text/html']) {\n pasteHtml(editor, trimmedContent, internal, true);\n } else {\n pasteText(editor, trimmedContent, true);\n }\n });\n });\n }\n });\n editor.on('dragstart', _e => {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', e => {\n if (shouldPasteDataImages(editor) && !draggingInternallyState.get()) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n setupSummaryDeleteByDragFix(editor);\n };\n\n const setup$9 = editor => {\n const processEvent = f => e => {\n f(editor, e);\n };\n const preProcess = getPastePreProcess(editor);\n if (isFunction(preProcess)) {\n editor.on('PastePreProcess', processEvent(preProcess));\n }\n const postProcess = getPastePostProcess(editor);\n if (isFunction(postProcess)) {\n editor.on('PastePostProcess', processEvent(postProcess));\n }\n };\n\n const addPreProcessFilter = (editor, filterFunc) => {\n editor.on('PastePreProcess', e => {\n e.content = filterFunc(editor, e.content, e.internal);\n });\n };\n const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n const rgbToHex = value => Tools.trim(value).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n const removeWebKitStyles = (editor, content, internal) => {\n const webKitStylesOption = getPasteWebkitStyles(editor);\n if (internal || webKitStylesOption === 'all' || !shouldPasteRemoveWebKitStyles(editor)) {\n return content;\n }\n const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n if (webKitStyles && webKitStylesOption !== 'none') {\n const dom = editor.dom, node = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all, before, value, after) => {\n const inputStyles = dom.parseStyle(dom.decode(value));\n const outputStyles = {};\n for (let i = 0; i < webKitStyles.length; i++) {\n const inputValue = inputStyles[webKitStyles[i]];\n let compareInput = inputValue;\n let currentValue = dom.getStyle(node, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n compareInput = rgbToHex(compareInput);\n currentValue = rgbToHex(currentValue);\n }\n if (currentValue !== compareInput) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n const outputStyle = dom.serializeStyle(outputStyles, 'span');\n if (outputStyle) {\n return before + ' style=\"' + outputStyle + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all, before, value, after) => {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n };\n const setup$8 = editor => {\n if (Env.browser.isChromium() || Env.browser.isSafari()) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n };\n\n const setup$7 = editor => {\n const draggingInternallyState = Cell(false);\n const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n const pasteBin = PasteBin(editor);\n setup$8(editor);\n register$1(editor, pasteFormat);\n setup$9(editor);\n editor.addQueryStateHandler('mceTogglePlainTextPaste', () => pasteFormat.get() === 'text');\n editor.on('PreInit', () => {\n register(editor);\n setup$a(editor, draggingInternallyState);\n registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n };\n\n const preventSummaryToggle = editor => {\n editor.on('click', e => {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n const filterDetails = editor => {\n editor.parser.addNodeFilter('details', elms => {\n const initialStateOption = getDetailsInitialState(editor);\n each$e(elms, details => {\n if (initialStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (initialStateOption === 'collapsed') {\n details.attr('open', null);\n }\n });\n });\n editor.serializer.addNodeFilter('details', elms => {\n const serializedStateOption = getDetailsSerializedState(editor);\n each$e(elms, details => {\n if (serializedStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (serializedStateOption === 'collapsed') {\n details.attr('open', null);\n }\n });\n });\n };\n const setup$6 = editor => {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n const isBr = isBr$6;\n const isText = isText$b;\n const isContentEditableFalse$2 = elm => isContentEditableFalse$b(elm.dom);\n const isContentEditableTrue = elm => isContentEditableTrue$3(elm.dom);\n const isRoot = rootNode => elm => eq(SugarElement.fromDom(rootNode), elm);\n const getClosestScope = (node, rootNode, schema) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || schema.isBlock(name(elm)), isRoot(rootNode)).getOr(SugarElement.fromDom(rootNode)).dom;\n const getClosestCef = (node, rootNode) => closest$4(SugarElement.fromDom(node), isContentEditableFalse$2, isRoot(rootNode));\n const findEdgeCaretCandidate = (startNode, scope, forward) => {\n const walker = new DomTreeWalker(startNode, scope);\n const next = forward ? walker.next.bind(walker) : walker.prev.bind(walker);\n let result = startNode;\n for (let current = forward ? startNode : next(); current && !isBr(current); current = next()) {\n if (isCaretCandidate$3(current)) {\n result = current;\n }\n }\n return result;\n };\n const findClosestBlockRange = (startRng, rootNode, schema) => {\n const startPos = CaretPosition.fromRangeStart(startRng);\n const clickNode = startPos.getNode();\n const scope = getClosestScope(clickNode, rootNode, schema);\n const startNode = findEdgeCaretCandidate(clickNode, scope, false);\n const endNode = findEdgeCaretCandidate(clickNode, scope, true);\n const rng = document.createRange();\n getClosestCef(startNode, scope).fold(() => {\n if (isText(startNode)) {\n rng.setStart(startNode, 0);\n } else {\n rng.setStartBefore(startNode);\n }\n }, cef => rng.setStartBefore(cef.dom));\n getClosestCef(endNode, scope).fold(() => {\n if (isText(endNode)) {\n rng.setEnd(endNode, endNode.data.length);\n } else {\n rng.setEndAfter(endNode);\n }\n }, cef => rng.setEndAfter(cef.dom));\n return rng;\n };\n const onTripleClickSelect = editor => {\n const rng = findClosestBlockRange(editor.selection.getRng(), editor.getBody(), editor.schema);\n editor.selection.setRng(normalize(rng));\n };\n const setup$5 = editor => {\n editor.on('mousedown', e => {\n if (e.detail >= 3) {\n e.preventDefault();\n onTripleClickSelect(editor);\n }\n });\n };\n\n var FakeCaretPosition;\n (function (FakeCaretPosition) {\n FakeCaretPosition['Before'] = 'before';\n FakeCaretPosition['After'] = 'after';\n }(FakeCaretPosition || (FakeCaretPosition = {})));\n const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n const collidesY = (r1, r2) => r1.top < r2.bottom && r1.bottom > r2.top;\n const isOverlapping = (r1, r2) => {\n const overlap = overlapY(r1, r2) / Math.min(r1.height, r2.height);\n return collidesY(r1, r2) && overlap > 0.5;\n };\n const splitRectsPerAxis = (rects, y) => {\n const intersectingRects = filter$5(rects, rect => isInsideY(y, rect));\n return boundingClientRectFromRects(intersectingRects).fold(() => [\n [],\n rects\n ], boundingRect => {\n const {\n pass: horizontal,\n fail: vertical\n } = partition$2(rects, rect => isOverlapping(rect, boundingRect));\n return [\n horizontal,\n vertical\n ];\n });\n };\n const clientInfo = (rect, clientX) => {\n return {\n node: rect.node,\n position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n };\n };\n const horizontalDistance = (rect, x, _y) => x > rect.left && x < rect.right ? 0 : Math.min(Math.abs(rect.left - x), Math.abs(rect.right - x));\n const closestChildCaretCandidateNodeRect = (children, clientX, clientY, findCloserTextNode) => {\n const caretCandidateRect = rect => {\n if (isCaretCandidate$3(rect.node)) {\n return Optional.some(rect);\n } else if (isElement$6(rect.node)) {\n return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY, false);\n } else {\n return Optional.none();\n }\n };\n const tryFindSecondBestTextNode = (closest, sndClosest, distance) => {\n return caretCandidateRect(sndClosest).filter(rect => {\n const deltaDistance = Math.abs(distance(closest, clientX, clientY) - distance(rect, clientX, clientY));\n return deltaDistance < 2 && isText$b(rect.node);\n });\n };\n const findClosestCaretCandidateNodeRect = (rects, distance) => {\n const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n return findMap(sortedRects, caretCandidateRect).map(closest => {\n if (findCloserTextNode && !isText$b(closest.node) && sortedRects.length > 1) {\n return tryFindSecondBestTextNode(closest, sortedRects[1], distance).getOr(closest);\n } else {\n return closest;\n }\n });\n };\n const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children), clientY);\n const {\n pass: above,\n fail: below\n } = partition$2(verticalRects, rect => rect.top < clientY);\n return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n };\n const traverseUp = (rootElm, scope, clientX, clientY) => {\n const helper = (scope, prevScope) => {\n const isDragGhostContainer = node => isElement$6(node) && node.classList.contains('mce-drag-container');\n const childNodesWithoutGhost = filter$5(scope.dom.childNodes, not(isDragGhostContainer));\n return prevScope.fold(() => closestChildCaretCandidateNodeRect(childNodesWithoutGhost, clientX, clientY, true), prevScope => {\n const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY, true);\n }).orThunk(() => {\n const parent = eq(scope, rootElm) ? Optional.none() : parentElement(scope);\n return parent.bind(newScope => helper(newScope, Optional.some(scope)));\n });\n };\n return helper(scope, Optional.none());\n };\n const closestCaretCandidateNodeRect = (root, clientX, clientY) => {\n const rootElm = SugarElement.fromDom(root);\n const ownerDoc = documentOrOwner(rootElm);\n const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter(elm => contains(rootElm, elm));\n const element = elementAtPoint.getOr(rootElm);\n return traverseUp(rootElm, element, clientX, clientY);\n };\n const closestFakeCaretCandidate = (root, clientX, clientY) => closestCaretCandidateNodeRect(root, clientX, clientY).filter(rect => isFakeCaretTarget(rect.node)).map(rect => clientInfo(rect, clientX));\n\n const getAbsolutePosition = elm => {\n var _a, _b;\n const clientRect = elm.getBoundingClientRect();\n const doc = elm.ownerDocument;\n const docElem = doc.documentElement;\n const win = doc.defaultView;\n return {\n top: clientRect.top + ((_a = win === null || win === void 0 ? void 0 : win.scrollY) !== null && _a !== void 0 ? _a : 0) - docElem.clientTop,\n left: clientRect.left + ((_b = win === null || win === void 0 ? void 0 : win.scrollX) !== null && _b !== void 0 ? _b : 0) - docElem.clientLeft\n };\n };\n const getBodyPosition = editor => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n const getScrollPosition = editor => {\n const body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n const getBodyScroll = editor => {\n const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n const inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n const iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n const getMousePosition = (editor, event) => {\n if (event.target.ownerDocument !== editor.getDoc()) {\n const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n const scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n });\n const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n\n const getTargetProps = target => ({\n target,\n srcElement: target\n });\n const makeDndEventFromMouseEvent = (type, mouseEvent, target, dataTransfer) => ({\n ...mouseEvent,\n dataTransfer,\n type,\n ...getTargetProps(target)\n });\n const makeDndEvent = (type, target, dataTransfer) => {\n const fail = die('Function not supported on simulated event.');\n const event = {\n bubbles: true,\n cancelBubble: false,\n cancelable: true,\n composed: false,\n currentTarget: null,\n defaultPrevented: false,\n eventPhase: 0,\n isTrusted: true,\n returnValue: false,\n timeStamp: 0,\n type,\n composedPath: fail,\n initEvent: fail,\n preventDefault: noop,\n stopImmediatePropagation: noop,\n stopPropagation: noop,\n AT_TARGET: window.Event.AT_TARGET,\n BUBBLING_PHASE: window.Event.BUBBLING_PHASE,\n CAPTURING_PHASE: window.Event.CAPTURING_PHASE,\n NONE: window.Event.NONE,\n altKey: false,\n button: 0,\n buttons: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n metaKey: false,\n movementX: 0,\n movementY: 0,\n offsetX: 0,\n offsetY: 0,\n pageX: 0,\n pageY: 0,\n relatedTarget: null,\n screenX: 0,\n screenY: 0,\n shiftKey: false,\n x: 0,\n y: 0,\n detail: 0,\n view: null,\n which: 0,\n initUIEvent: fail,\n initMouseEvent: fail,\n getModifierState: fail,\n dataTransfer,\n ...getTargetProps(target)\n };\n return event;\n };\n const makeDataTransferCopyForDragEvent = (dataTransfer, eventType) => {\n const copy = cloneDataTransfer(dataTransfer);\n if (eventType === 'dragstart') {\n setDragstartEvent(copy);\n setReadWriteMode(copy);\n } else if (eventType === 'drop') {\n setDropEvent(copy);\n setReadOnlyMode(copy);\n } else {\n setDragendEvent(copy);\n setProtectedMode(copy);\n }\n return copy;\n };\n const makeDragEvent = (type, target, dataTransfer, mouseEvent) => {\n const dataTransferForDispatch = makeDataTransferCopyForDragEvent(dataTransfer, type);\n return isUndefined(mouseEvent) ? makeDndEvent(type, target, dataTransferForDispatch) : makeDndEventFromMouseEvent(type, mouseEvent, target, dataTransferForDispatch);\n };\n\n const scrollPixelsPerInterval = 32;\n const scrollIntervalValue = 100;\n const mouseRangeToTriggerScrollInsideEditor = 8;\n const mouseRangeToTriggerScrollOutsideEditor = 16;\n const isContentEditableFalse$1 = isContentEditableFalse$b;\n const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n const isDraggable = (dom, rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm && dom.isEditable(elm.parentElement);\n const isValidDropTarget = (editor, targetElement, dragElement) => {\n if (isNullable(targetElement)) {\n return false;\n } else if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n } else {\n return editor.dom.isEditable(targetElement);\n }\n };\n const createGhost = (editor, elm, width, height) => {\n const dom = editor.dom;\n const clonedElm = elm.cloneNode(true);\n dom.setStyles(clonedElm, {\n width,\n height\n });\n dom.setAttrib(clonedElm, 'data-mce-selected', null);\n const ghostElm = dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width,\n height\n });\n dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n const appendGhostToBody = (ghostElm, bodyElm) => {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n const scrollEditor = (direction, amount) => win => () => {\n const current = direction === 'left' ? win.scrollX : win.scrollY;\n win.scroll({\n [direction]: current + amount,\n behavior: 'smooth'\n });\n };\n const scrollLeft = scrollEditor('left', -scrollPixelsPerInterval);\n const scrollRight = scrollEditor('left', scrollPixelsPerInterval);\n const scrollUp = scrollEditor('top', -scrollPixelsPerInterval);\n const scrollDown = scrollEditor('top', scrollPixelsPerInterval);\n const moveGhost = (ghostElm, position, width, height, maxX, maxY, mouseY, mouseX, contentAreaContainer, win, state, mouseEventOriginatedFromWithinTheEditor) => {\n let overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n const clientHeight = contentAreaContainer.clientHeight;\n const clientWidth = contentAreaContainer.clientWidth;\n const outerMouseY = mouseY + contentAreaContainer.getBoundingClientRect().top;\n const outerMouseX = mouseX + contentAreaContainer.getBoundingClientRect().left;\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging && mouseEventOriginatedFromWithinTheEditor) {\n if (mouseY + mouseRangeToTriggerScrollInsideEditor >= clientHeight) {\n state.intervalId.set(scrollDown(win));\n } else if (mouseY - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollUp(win));\n } else if (mouseX + mouseRangeToTriggerScrollInsideEditor >= clientWidth) {\n state.intervalId.set(scrollRight(win));\n } else if (mouseX - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollLeft(win));\n } else if (outerMouseY + mouseRangeToTriggerScrollOutsideEditor >= window.innerHeight) {\n state.intervalId.set(scrollDown(window));\n } else if (outerMouseY - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollUp(window));\n } else if (outerMouseX + mouseRangeToTriggerScrollOutsideEditor >= window.innerWidth) {\n state.intervalId.set(scrollRight(window));\n } else if (outerMouseX - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollLeft(window));\n }\n }\n });\n };\n const removeElement = elm => {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n const removeElementWithPadding = (dom, elm) => {\n const parentBlock = dom.getParent(elm.parentNode, dom.isBlock);\n removeElement(elm);\n if (parentBlock && parentBlock !== dom.getRoot() && dom.isEmpty(parentBlock)) {\n fillWithPaddingBr(SugarElement.fromDom(parentBlock));\n }\n };\n const isLeftMouseButtonPressed = e => e.button === 0;\n const applyRelPos = (state, position) => ({\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n });\n const start = (state, editor) => e => {\n if (isLeftMouseButtonPressed(e)) {\n const ceElm = find$2(editor.dom.getParents(e.target), isContentEditable).getOr(null);\n if (isNonNullable(ceElm) && isDraggable(editor.dom, editor.getBody(), ceElm)) {\n const elmPos = editor.dom.getPos(ceElm);\n const bodyElm = editor.getBody();\n const docElm = editor.getDoc().documentElement;\n state.set({\n element: ceElm,\n dataTransfer: createDataTransfer(),\n dragging: false,\n screenX: e.screenX,\n screenY: e.screenY,\n maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n relX: e.pageX - elmPos.x,\n relY: e.pageY - elmPos.y,\n width: ceElm.offsetWidth,\n height: ceElm.offsetHeight,\n ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight),\n intervalId: repeatable(scrollIntervalValue)\n });\n }\n }\n };\n const placeCaretAt = (editor, clientX, clientY) => {\n editor._selectionOverrides.hideFakeCaret();\n closestFakeCaretCandidate(editor.getBody(), clientX, clientY).fold(() => editor.selection.placeCaretAt(clientX, clientY), caretInfo => {\n const range = editor._selectionOverrides.showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n if (range) {\n editor.selection.setRng(range);\n } else {\n editor.selection.placeCaretAt(clientX, clientY);\n }\n });\n };\n const dispatchDragEvent = (editor, type, target, dataTransfer, mouseEvent) => {\n if (type === 'dragstart') {\n setHtmlData(dataTransfer, editor.dom.getOuterHTML(target));\n }\n const event = makeDragEvent(type, target, dataTransfer, mouseEvent);\n const args = editor.dispatch(type, event);\n return args;\n };\n const move = (state, editor) => {\n const throttledPlaceCaretAt = first$1((clientX, clientY) => placeCaretAt(editor, clientX, clientY), 0);\n editor.on('remove', throttledPlaceCaretAt.cancel);\n const state_ = state;\n return e => state.on(state => {\n const movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (!state.dragging && movement > 10) {\n const args = dispatchDragEvent(editor, 'dragstart', state.element, state.dataTransfer, e);\n if (isNonNullable(args.dataTransfer)) {\n state.dataTransfer = args.dataTransfer;\n }\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n const mouseEventOriginatedFromWithinTheEditor = e.currentTarget === editor.getDoc().documentElement;\n const targetPos = applyRelPos(state, calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY, e.clientY, e.clientX, editor.getContentAreaContainer(), editor.getWin(), state_, mouseEventOriginatedFromWithinTheEditor);\n throttledPlaceCaretAt.throttle(e.clientX, e.clientY);\n }\n });\n };\n const getRawTarget = selection => {\n const sel = selection.getSel();\n if (isNonNullable(sel)) {\n const rng = sel.getRangeAt(0);\n const startContainer = rng.startContainer;\n return isText$b(startContainer) ? startContainer.parentNode : startContainer;\n } else {\n return null;\n }\n };\n const drop = (state, editor) => e => {\n state.on(state => {\n var _a;\n state.intervalId.clear();\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n const dropTarget = (_a = editor.getDoc().elementFromPoint(e.clientX, e.clientY)) !== null && _a !== void 0 ? _a : editor.getBody();\n const args = dispatchDragEvent(editor, 'drop', dropTarget, state.dataTransfer, e);\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(() => {\n removeElementWithPadding(editor.dom, state.element);\n getHtmlData(state.dataTransfer).each(content => editor.insertContent(content));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n dispatchDragEvent(editor, 'dragend', editor.getBody(), state.dataTransfer, e);\n }\n });\n removeDragState(state);\n };\n const stopDragging = (state, editor, e) => {\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging) {\n e.fold(() => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer), mouseEvent => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer, mouseEvent));\n }\n });\n removeDragState(state);\n };\n const stop = (state, editor) => e => stopDragging(state, editor, Optional.some(e));\n const removeDragState = state => {\n state.on(state => {\n state.intervalId.clear();\n removeElement(state.ghost);\n });\n state.clear();\n };\n const bindFakeDragEvents = editor => {\n const state = value$2();\n const pageDom = DOMUtils.DOM;\n const rootDocument = document;\n const dragStartHandler = start(state, editor);\n const dragHandler = move(state, editor);\n const dropHandler = drop(state, editor);\n const dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', () => {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n editor.on('keydown', e => {\n if (e.keyCode === VK.ESC) {\n stopDragging(state, editor, Optional.none());\n }\n });\n };\n const blockUnsupportedFileDrop = editor => {\n const preventFileDrop = e => {\n if (!e.isDefaultPrevented()) {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains$2(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n e.preventDefault();\n if (e.type === 'drop') {\n displayError(editor, 'Dropped file type is not supported');\n }\n }\n }\n };\n const preventFileDropIfUIElement = e => {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n const setup = () => {\n const pageDom = DOMUtils.DOM;\n const dom = editor.dom;\n const doc = document;\n const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n const eventNames = [\n 'drop',\n 'dragover'\n ];\n each$e(eventNames, name => {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', () => {\n each$e(eventNames, name => {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', () => {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n const init$2 = editor => {\n bindFakeDragEvents(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n const setup$4 = editor => {\n const renderFocusCaret = first$1(() => {\n if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n const rng = editor.selection.getRng();\n if (rng.collapsed) {\n const caretRange = renderRangeCaret(editor, rng, false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', () => {\n renderFocusCaret.throttle();\n });\n editor.on('blur', () => {\n renderFocusCaret.cancel();\n });\n };\n\n const setup$3 = editor => {\n editor.on('init', () => {\n editor.on('focusin', e => {\n const target = e.target;\n if (isMedia$2(target)) {\n const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n const node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n if (editor.selection.getNode() !== node) {\n selectNode(editor, node).each(rng => editor.selection.setRng(rng));\n }\n }\n });\n });\n };\n\n const isContentEditableFalse = isContentEditableFalse$b;\n const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n const SelectionOverrides = editor => {\n const selection = editor.selection, dom = editor.dom;\n const rootNode = editor.getBody();\n const fakeCaret = FakeCaret(editor, rootNode, dom.isBlock, () => hasFocus(editor));\n const realSelectionId = 'sel-' + dom.uniqueId();\n const elementSelectionAttr = 'data-mce-selected';\n let selectedElement;\n const isFakeSelectionElement = node => isNonNullable(node) && dom.hasClass(node, 'mce-offscreen-selection');\n const isFakeSelectionTargetElement = node => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode) && dom.isEditable(node.parentNode);\n const setRange = range => {\n if (range) {\n selection.setRng(range);\n }\n };\n const showCaret = (direction, node, before, scrollIntoView = true) => {\n const e = editor.dispatch('ShowCaret', {\n target: node,\n direction,\n before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n const showBlockCaretContainer = blockCaretContainer => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n selection.scrollIntoView(blockCaretContainer);\n }\n };\n const registerEvents = () => {\n editor.on('click', e => {\n if (!dom.isEditable(e.target)) {\n e.preventDefault();\n editor.focus();\n }\n });\n editor.on('blur NewBlock', removeElementSelection);\n editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n editor.on('tap', e => {\n const targetElm = e.target;\n const contentEditableRoot = getContentEditableRoot(editor, targetElm);\n if (isContentEditableFalse(contentEditableRoot)) {\n e.preventDefault();\n selectNode(editor, contentEditableRoot).each(setElementSelection);\n } else if (isFakeSelectionTargetElement(targetElm)) {\n selectNode(editor, targetElm).each(setElementSelection);\n }\n }, true);\n editor.on('mousedown', e => {\n const targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (!isXYInContentArea(editor, e.clientX, e.clientY)) {\n return;\n }\n removeElementSelection();\n hideFakeCaret();\n const closestContentEditable = getContentEditableRoot(editor, targetElm);\n if (isContentEditableFalse(closestContentEditable)) {\n e.preventDefault();\n selectNode(editor, closestContentEditable).each(setElementSelection);\n } else {\n closestFakeCaretCandidate(rootNode, e.clientX, e.clientY).each(caretInfo => {\n e.preventDefault();\n const range = showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n setRange(range);\n if (isHTMLElement(closestContentEditable)) {\n closestContentEditable.focus();\n } else {\n editor.getBody().focus();\n }\n });\n }\n });\n editor.on('keypress', e => {\n if (VK.modifierPressed(e)) {\n return;\n }\n if (isContentEditableFalse(selection.getNode())) {\n e.preventDefault();\n }\n });\n editor.on('GetSelectionRange', e => {\n let rng = e.range;\n if (selectedElement) {\n if (!selectedElement.parentNode) {\n selectedElement = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedElement);\n e.range = rng;\n }\n });\n editor.on('SetSelectionRange', e => {\n e.range = normalizeVoidElementSelection(e.range);\n const rng = setElementSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n const isPasteBin = node => isElement$6(node) && node.id === 'mcepastebin';\n editor.on('AfterSetSelectionRange', e => {\n const rng = e.range;\n const parent = rng.startContainer.parentElement;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(parent)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(parent)) {\n removeElementSelection();\n }\n });\n init$2(editor);\n setup$4(editor);\n setup$3(editor);\n };\n const isWithinCaretContainer = node => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n const isRangeInCaretContainer = rng => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n const normalizeVoidElementSelection = rng => {\n const voidElements = editor.schema.getVoidElements();\n const newRng = dom.createRng();\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n if (has$2(voidElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has$2(voidElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n const setupOffscreenSelection = (node, targetClone) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = editor.getDoc();\n const realSelectionContainer = descendant$1(body, '#' + realSelectionId).getOrThunk(() => {\n const newContainer = SugarElement.fromHtml('
    ', doc);\n set$3(newContainer, 'id', realSelectionId);\n append$1(body, newContainer);\n return newContainer;\n });\n const newRange = dom.createRng();\n empty(realSelectionContainer);\n append(realSelectionContainer, [\n SugarElement.fromText(nbsp, doc),\n SugarElement.fromDom(targetClone),\n SugarElement.fromText(nbsp, doc)\n ]);\n newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n setAll(realSelectionContainer, { top: dom.getPos(node, editor.getBody()).y + 'px' });\n focus$1(realSelectionContainer);\n const sel = selection.getSel();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(newRange);\n }\n return newRange;\n };\n const selectElement = elm => {\n const targetClone = elm.cloneNode(true);\n const e = editor.dispatch('ObjectSelected', {\n target: elm,\n targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n const range = setupOffscreenSelection(elm, e.targetClone);\n const nodeElm = SugarElement.fromDom(elm);\n each$e(descendants(SugarElement.fromDom(editor.getBody()), `*[${ elementSelectionAttr }]`), elm => {\n if (!eq(nodeElm, elm)) {\n remove$9(elm, elementSelectionAttr);\n }\n });\n if (!dom.getAttrib(elm, elementSelectionAttr)) {\n elm.setAttribute(elementSelectionAttr, '1');\n }\n selectedElement = elm;\n hideFakeCaret();\n return range;\n };\n const setElementSelection = (range, forward) => {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n const dir = forward ? 1 : -1;\n const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n const beforeNode = caretPosition.getNode(!forward);\n if (isNonNullable(beforeNode)) {\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n if (isCaretContainerInline(beforeNode) && isContentEditableFalse$b(beforeNode.nextSibling)) {\n const rng = dom.createRng();\n rng.setStart(beforeNode, 0);\n rng.setEnd(beforeNode, 0);\n return rng;\n }\n }\n const afterNode = caretPosition.getNode(forward);\n if (isNonNullable(afterNode)) {\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n if (isCaretContainerInline(afterNode) && isContentEditableFalse$b(afterNode.previousSibling)) {\n const rng = dom.createRng();\n rng.setStart(afterNode, 1);\n rng.setEnd(afterNode, 1);\n return rng;\n }\n }\n }\n return null;\n }\n let startContainer = range.startContainer;\n let startOffset = range.startOffset;\n const endOffset = range.endOffset;\n if (isText$b(startContainer) && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (!isElement$6(startContainer)) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n const node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n const removeElementSelection = () => {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant$1(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$4);\n selectedElement = null;\n };\n const destroy = () => {\n fakeCaret.destroy();\n selectedElement = null;\n };\n const hideFakeCaret = () => {\n fakeCaret.hide();\n };\n if (!isRtc(editor)) {\n registerEvents();\n }\n return {\n showCaret,\n showBlockCaretContainer,\n hideFakeCaret,\n destroy\n };\n };\n\n const getNormalizedTextOffset = (container, offset) => {\n let normalizedOffset = offset;\n for (let node = container.previousSibling; isText$b(node); node = node.previousSibling) {\n normalizedOffset += node.data.length;\n }\n return normalizedOffset;\n };\n const generatePath = (dom, root, node, offset, normalized) => {\n if (isText$b(node) && (offset < 0 || offset > node.data.length)) {\n return [];\n }\n const p = normalized && isText$b(node) ? [getNormalizedTextOffset(node, offset)] : [offset];\n let current = node;\n while (current !== root && current.parentNode) {\n p.push(dom.nodeIndex(current, normalized));\n current = current.parentNode;\n }\n return current === root ? p.reverse() : [];\n };\n const generatePathRange = (dom, root, startNode, startOffset, endNode, endOffset, normalized = false) => {\n const start = generatePath(dom, root, startNode, startOffset, normalized);\n const end = generatePath(dom, root, endNode, endOffset, normalized);\n return {\n start,\n end\n };\n };\n const resolvePath = (root, path) => {\n const nodePath = path.slice();\n const offset = nodePath.pop();\n if (!isNumber(offset)) {\n return Optional.none();\n } else {\n const resolvedNode = foldl(nodePath, (optNode, index) => optNode.bind(node => Optional.from(node.childNodes[index])), Optional.some(root));\n return resolvedNode.bind(node => {\n if (isText$b(node) && (offset < 0 || offset > node.data.length)) {\n return Optional.none();\n } else {\n return Optional.some({\n node,\n offset\n });\n }\n });\n }\n };\n const resolvePathRange = (root, range) => resolvePath(root, range.start).bind(({\n node: startNode,\n offset: startOffset\n }) => resolvePath(root, range.end).map(({\n node: endNode,\n offset: endOffset\n }) => {\n const rng = document.createRange();\n rng.setStart(startNode, startOffset);\n rng.setEnd(endNode, endOffset);\n return rng;\n }));\n const generatePathRangeFromRange = (dom, root, range, normalized = false) => generatePathRange(dom, root, range.startContainer, range.startOffset, range.endContainer, range.endOffset, normalized);\n\n const cleanEmptyNodes = (dom, node, isRoot) => {\n if (node && dom.isEmpty(node) && !isRoot(node)) {\n const parent = node.parentNode;\n dom.remove(node, isText$b(node.firstChild) && isWhitespaceText(node.firstChild.data));\n cleanEmptyNodes(dom, parent, isRoot);\n }\n };\n const deleteRng = (dom, rng, isRoot, clean = true) => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n rng.deleteContents();\n if (clean && !isRoot(rng.startContainer)) {\n if (isText$b(rng.startContainer) && rng.startContainer.data.length === 0) {\n dom.remove(rng.startContainer);\n }\n if (isText$b(rng.endContainer) && rng.endContainer.data.length === 0) {\n dom.remove(rng.endContainer);\n }\n cleanEmptyNodes(dom, startParent, isRoot);\n if (startParent !== endParent) {\n cleanEmptyNodes(dom, endParent, isRoot);\n }\n }\n };\n const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n const resolveFromDynamicPatterns = (patternSet, block, beforeText) => {\n const dynamicPatterns = patternSet.dynamicPatternsLookup({\n text: beforeText,\n block\n });\n return {\n ...patternSet,\n blockPatterns: getBlockPatterns(dynamicPatterns).concat(patternSet.blockPatterns),\n inlinePatterns: getInlinePatterns(dynamicPatterns).concat(patternSet.inlinePatterns)\n };\n };\n const getBeforeText = (dom, block, node, offset) => {\n const rng = dom.createRng();\n rng.setStart(block, 0);\n rng.setEnd(node, offset);\n return rng.toString();\n };\n\n const newMarker = (dom, id) => dom.create('span', {\n 'data-mce-type': 'bookmark',\n id\n });\n const rangeFromMarker = (dom, marker) => {\n const rng = dom.createRng();\n rng.setStartAfter(marker.start);\n rng.setEndBefore(marker.end);\n return rng;\n };\n const createMarker = (dom, markerPrefix, pathRange) => {\n const rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n const startNode = rng.startContainer;\n const endNode = rng.endContainer;\n const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n const startParentNode = textStart.parentNode;\n const endParentNode = textEnd.parentNode;\n return {\n prefix: markerPrefix,\n end: endParentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n start: startParentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n };\n };\n const removeMarker = (dom, marker, isRoot) => {\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n };\n\n const isReplacementPattern = pattern => pattern.start.length === 0;\n const matchesPattern = patternContent => (element, offset) => {\n const text = element.data;\n const searchText = text.substring(0, offset);\n const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n const startIndex = searchText.lastIndexOf(patternContent);\n if (startIndex !== -1) {\n return startIndex + patternContent.length;\n } else if (startEndIndex !== -1) {\n return startEndIndex + 1;\n } else {\n return -1;\n }\n };\n const findPatternStartFromSpot = (dom, pattern, block, spot) => {\n const startPattern = pattern.start;\n const startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(startPattern), block);\n return startSpot.bind(spot => {\n var _a, _b;\n const startPatternIndex = (_b = (_a = block.textContent) === null || _a === void 0 ? void 0 : _a.indexOf(startPattern)) !== null && _b !== void 0 ? _b : -1;\n const isCompleteMatch = startPatternIndex !== -1 && spot.offset >= startPatternIndex + startPattern.length;\n if (isCompleteMatch) {\n const rng = dom.createRng();\n rng.setStart(spot.container, spot.offset - startPattern.length);\n rng.setEnd(spot.container, spot.offset);\n return Optional.some(rng);\n } else {\n const offset = spot.offset - startPattern.length;\n return scanLeft(spot.container, offset, block).map(nextSpot => {\n const rng = dom.createRng();\n rng.setStart(nextSpot.container, nextSpot.offset);\n rng.setEnd(spot.container, spot.offset);\n return rng;\n }).filter(rng => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0)));\n }\n });\n };\n const findPatternStart = (dom, pattern, node, offset, block, requireGap = false) => {\n if (pattern.start.length === 0 && !requireGap) {\n const rng = dom.createRng();\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n return Optional.some(rng);\n }\n return textBefore(node, offset, block).bind(spot => {\n const start = findPatternStartFromSpot(dom, pattern, block, spot);\n return start.bind(startRange => {\n var _a;\n if (requireGap) {\n if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n return Optional.none();\n } else if (spot.offset === 0 && ((_a = startRange.endContainer.textContent) === null || _a === void 0 ? void 0 : _a.length) === startRange.endOffset) {\n return Optional.none();\n }\n }\n return Optional.some(startRange);\n });\n });\n };\n const findPattern$3 = (editor, block, details, normalizedMatches) => {\n const dom = editor.dom;\n const root = dom.getRoot();\n const pattern = details.pattern;\n const endNode = details.position.container;\n const endOffset = details.position.offset;\n return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(spot => {\n const endPathRng = generatePathRange(dom, root, spot.container, spot.offset, endNode, endOffset, normalizedMatches);\n if (isReplacementPattern(pattern)) {\n return Optional.some({\n matches: [{\n pattern,\n startRng: endPathRng,\n endRng: endPathRng\n }],\n position: spot\n });\n } else {\n const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block, normalizedMatches);\n const results = resultsOpt.getOr({\n matches: [],\n position: spot\n });\n const pos = results.position;\n const start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n return start.map(startRng => {\n const startPathRng = generatePathRangeFromRange(dom, root, startRng, normalizedMatches);\n return {\n matches: results.matches.concat([{\n pattern,\n startRng: startPathRng,\n endRng: endPathRng\n }]),\n position: point(startRng.startContainer, startRng.startOffset)\n };\n });\n }\n });\n };\n const findPatternsRec = (editor, patterns, node, offset, block, normalizedMatches) => {\n const dom = editor.dom;\n return textBefore(node, offset, dom.getRoot()).bind(endSpot => {\n const text = getBeforeText(dom, block, node, offset);\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n if (!endsWith(text, pattern.end)) {\n continue;\n }\n const patternsWithoutCurrent = patterns.slice();\n patternsWithoutCurrent.splice(i, 1);\n const result = findPattern$3(editor, block, {\n pattern,\n remainingPatterns: patternsWithoutCurrent,\n position: endSpot\n }, normalizedMatches);\n if (result.isNone() && offset > 0) {\n return findPatternsRec(editor, patterns, node, offset - 1, block, normalizedMatches);\n }\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n });\n };\n const applyPattern$2 = (editor, pattern, patternRange) => {\n editor.selection.setRng(patternRange);\n if (pattern.type === 'inline-format') {\n each$e(pattern.format, format => {\n editor.formatter.apply(format);\n });\n } else {\n editor.execCommand(pattern.cmd, false, pattern.value);\n }\n };\n const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n const markerRange = rangeFromMarker(editor.dom, marker);\n deleteRng(editor.dom, markerRange, isRoot);\n applyPattern$2(editor, pattern, markerRange);\n };\n const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n const dom = editor.dom;\n const markerEndRange = rangeFromMarker(dom, endMarker);\n const markerStartRange = rangeFromMarker(dom, startMarker);\n deleteRng(dom, markerStartRange, isRoot);\n deleteRng(dom, markerEndRange, isRoot);\n const patternMarker = {\n prefix: startMarker.prefix,\n start: startMarker.end,\n end: endMarker.start\n };\n const patternRange = rangeFromMarker(dom, patternMarker);\n applyPattern$2(editor, pattern, patternRange);\n };\n const addMarkers = (dom, matches) => {\n const markerPrefix = generate$1('mce_textpattern');\n const matchesWithEnds = foldr(matches, (acc, match) => {\n const endMarker = createMarker(dom, markerPrefix + `_end${ acc.length }`, match.endRng);\n return acc.concat([{\n ...match,\n endMarker\n }]);\n }, []);\n return foldr(matchesWithEnds, (acc, match) => {\n const idx = matchesWithEnds.length - acc.length - 1;\n const startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + `_start${ idx }`, match.startRng);\n return acc.concat([{\n ...match,\n startMarker\n }]);\n }, []);\n };\n const sortPatterns$1 = patterns => sort(patterns, (a, b) => b.end.length - a.end.length);\n const getBestMatches = (matches, matchesWithSortedPatterns) => {\n const hasSameMatches = forall(matches, match => exists(matchesWithSortedPatterns, sortedMatch => match.pattern.start === sortedMatch.pattern.start && match.pattern.end === sortedMatch.pattern.end));\n if (matches.length === matchesWithSortedPatterns.length) {\n if (hasSameMatches) {\n return matches;\n } else {\n return matchesWithSortedPatterns;\n }\n }\n return matches.length > matchesWithSortedPatterns.length ? matches : matchesWithSortedPatterns;\n };\n const findPatterns$2 = (editor, block, node, offset, patternSet, normalizedMatches) => {\n const matches = findPatternsRec(editor, patternSet.inlinePatterns, node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n const matchesWithSortedPatterns = findPatternsRec(editor, sortPatterns$1(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n return getBestMatches(matches, matchesWithSortedPatterns);\n };\n const applyMatches$2 = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const dom = editor.dom;\n const bookmark = editor.selection.getBookmark();\n const matchesWithMarkers = addMarkers(dom, matches);\n each$e(matchesWithMarkers, match => {\n const block = dom.getParent(match.startMarker.start, dom.isBlock);\n const isRoot = node => node === block;\n if (isReplacementPattern(match.pattern)) {\n applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n } else {\n applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n }\n removeMarker(dom, match.endMarker, isRoot);\n removeMarker(dom, match.startMarker, isRoot);\n });\n editor.selection.moveToBookmark(bookmark);\n };\n\n const stripPattern$1 = (dom, block, pattern) => {\n return textAfter(block, 0, block).map(spot => {\n const node = spot.container;\n scanRight(node, pattern.start.length, block).each(end => {\n const rng = dom.createRng();\n rng.setStart(node, 0);\n rng.setEnd(end.container, end.offset);\n deleteRng(dom, rng, e => e === block);\n });\n return node;\n });\n };\n const createApplyPattern = stripPattern => (editor, match) => {\n const dom = editor.dom;\n const pattern = match.pattern;\n const rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n const isBlockFormatName = (name, formatter) => {\n const formatSet = formatter.get(name);\n return isArray$1(formatSet) && head(formatSet).exists(format => has$2(format, 'block'));\n };\n getParentBlock(editor, rng).each(block => {\n if (pattern.type === 'block-format') {\n if (isBlockFormatName(pattern.format, editor.formatter)) {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.formatter.apply(pattern.format);\n });\n }\n } else if (pattern.type === 'block-command') {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.execCommand(pattern.cmd, false, pattern.value);\n });\n }\n });\n return true;\n };\n const sortPatterns = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n const findPattern$2 = predicate => (patterns, text) => {\n const sortedPatterns = sortPatterns(patterns);\n const nuText = text.replace(nbsp, ' ');\n return find$2(sortedPatterns, pattern => predicate(pattern, text, nuText));\n };\n const createFindPatterns = (findPattern, skipFullMatch) => (editor, block, patternSet, normalizedMatches, text) => {\n var _a;\n if (text === void 0) {\n text = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n }\n const dom = editor.dom;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!dom.is(block, forcedRootBlock)) {\n return [];\n }\n return findPattern(patternSet.blockPatterns, text).map(pattern => {\n if (skipFullMatch && Tools.trim(text).length === pattern.start.length) {\n return [];\n }\n return [{\n pattern,\n range: generatePathRange(dom, dom.getRoot(), block, 0, block, 0, normalizedMatches)\n }];\n }).getOr([]);\n };\n\n const startsWithSingleSpace = s => /^\\s[^\\s]/.test(s);\n const stripPattern = (dom, block, pattern) => {\n stripPattern$1(dom, block, pattern).each(node => {\n const text = SugarElement.fromDom(node);\n const textContent = get$3(text);\n if (startsWithSingleSpace(textContent)) {\n set(text, textContent.slice(1));\n }\n });\n };\n const applyPattern$1 = createApplyPattern(stripPattern);\n const findPattern$1 = findPattern$2((pattern, text, nuText) => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n const findPatterns$1 = createFindPatterns(findPattern$1, true);\n const getMatches$1 = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n var _a;\n const offset = Math.max(0, rng.startOffset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, (_a = block.textContent) !== null && _a !== void 0 ? _a : '');\n const inlineMatches = findPatterns$2(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n return {\n inlineMatches,\n blockMatches\n };\n }).filter(({inlineMatches, blockMatches}) => blockMatches.length > 0 || inlineMatches.length > 0);\n };\n const applyMatches$1 = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const bookmark = editor.selection.getBookmark();\n each$e(matches, match => applyPattern$1(editor, match));\n editor.selection.moveToBookmark(bookmark);\n };\n\n const applyPattern = createApplyPattern(stripPattern$1);\n const findPattern = findPattern$2((pattern, text, nuText) => text === pattern.start || nuText === pattern.start);\n const findPatterns = createFindPatterns(findPattern, false);\n const getMatches = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n return findPatterns(editor, block, dynamicPatternSet, false, beforeText);\n }).filter(matches => matches.length > 0);\n };\n const applyMatches = (editor, matches) => {\n each$e(matches, match => applyPattern(editor, match));\n };\n\n const handleEnter = (editor, patternSet) => getMatches$1(editor, patternSet).fold(never, ({inlineMatches, blockMatches}) => {\n editor.undoManager.add();\n editor.undoManager.extra(() => {\n editor.execCommand('mceInsertNewLine');\n }, () => {\n insert$5(editor);\n applyMatches$2(editor, inlineMatches);\n applyMatches$1(editor, blockMatches);\n const range = editor.selection.getRng();\n const spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n editor.execCommand('mceInsertNewLine');\n spot.each(s => {\n const node = s.container;\n if (node.data.charAt(s.offset - 1) === zeroWidth) {\n node.deleteData(s.offset - 1, 1);\n cleanEmptyNodes(editor.dom, node.parentNode, e => e === editor.dom.getRoot());\n }\n });\n });\n return true;\n });\n const handleInlineKey = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset - 1);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n const inlineMatches = findPatterns$2(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n if (inlineMatches.length > 0) {\n editor.undoManager.transact(() => {\n applyMatches$2(editor, inlineMatches);\n });\n }\n });\n };\n const handleBlockPatternOnSpace = (editor, patternSet) => getMatches(editor, patternSet).fold(never, matches => {\n editor.undoManager.transact(() => {\n applyMatches(editor, matches);\n });\n return true;\n });\n const checkKeyEvent = (codes, event, predicate) => {\n for (let i = 0; i < codes.length; i++) {\n if (predicate(codes[i], event)) {\n return true;\n }\n }\n return false;\n };\n const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code, event) => {\n return code === event.keyCode && !VK.modifierPressed(event);\n });\n const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event) => {\n return chr.charCodeAt(0) === event.charCode;\n });\n\n const setup$2 = editor => {\n const charCodes = [\n ',',\n '.',\n ';',\n ':',\n '!',\n '?'\n ];\n const keyCodes = [32];\n const getPatternSet = () => createPatternSet(getTextPatterns(editor).filter(pattern => {\n if (pattern.type === 'inline-command' || pattern.type === 'block-command') {\n return editor.queryCommandSupported(pattern.cmd);\n }\n return true;\n }), getTextPatternsLookup(editor));\n const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'enter');\n const hasPatterns = patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleEnter(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n editor.on('keydown', e => {\n if (e.keyCode === 32 && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\n const hasPatterns = patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleBlockPatternOnSpace(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n const handleInlineTrigger = () => {\n if (editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\n const hasPatterns = patternSet.inlinePatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns) {\n handleInlineKey(editor, patternSet);\n }\n }\n };\n editor.on('keyup', e => {\n if (checkKeyCode(keyCodes, e)) {\n handleInlineTrigger();\n }\n });\n editor.on('keypress', e => {\n if (checkCharCode(charCodes, e)) {\n Delay.setEditorTimeout(editor, handleInlineTrigger);\n }\n });\n };\n\n const setup$1 = editor => {\n setup$2(editor);\n };\n\n const Quirks = editor => {\n const each = Tools.each;\n const BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n const browser = Env.browser;\n const isGecko = browser.isFirefox();\n const isWebKit = browser.isChromium() || browser.isSafari();\n const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n const setEditorCommandState = (cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n const isDefaultPrevented = e => {\n return e.isDefaultPrevented();\n };\n const emptyEditorWhenDeleting = () => {\n const serializeRng = rng => {\n const body = dom.create('body');\n const contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n const allContentsSelected = rng => {\n const selection = serializeRng(rng);\n const allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n const allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE) && editor.selection.isEditable()) {\n const isCollapsed = editor.selection.isCollapsed();\n const body = editor.getBody();\n if (isCollapsed && !isEmptyNode(editor.schema, body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n const selectAll = () => {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n const documentElementEditingFocus = () => {\n if (!editor.inline) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', e => {\n let rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer$2(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n const removeHrOnBackspace = () => {\n editor.on('keydown', e => {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n const node = selection.getNode();\n const previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n const focusBody = () => {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', e => {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n const body = editor.getBody();\n body.blur();\n Delay.setEditorTimeout(editor, () => {\n body.focus();\n });\n }\n });\n }\n };\n const selectControlElements = () => {\n const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n editor.on('click', e => {\n const target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.isEditable(target)) {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, visualAidsAnchorClass) && target.childNodes.length === 0 && dom.isEditable(target.parentNode)) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n const removeStylesWhenDeletingAcrossBlockElements = () => {\n const getAttributeApplyFunction = () => {\n const template = dom.getAttribs(selection.getStart().cloneNode(false));\n return () => {\n const target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, attr => {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n const isSelectionAcrossElements = () => {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', e => {\n let applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false);\n applyAttributes();\n e.preventDefault();\n return false;\n } else {\n return true;\n }\n });\n dom.bind(editor.getDoc(), 'cut', e => {\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n const applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, () => {\n applyAttributes();\n });\n }\n });\n };\n const disableBackspaceIntoATable = () => {\n editor.on('keydown', e => {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n const previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n return true;\n });\n };\n const removeBlockQuoteOnBackSpace = () => {\n editor.on('keydown', e => {\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n let rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n const root = dom.getRoot();\n let parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.nodeName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', undefined, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n const setGeckoEditingOptions = () => {\n const setOpts = () => {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!getObjectResizing(editor)) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!isReadOnly$1(editor)) {\n editor.on('BeforeExecCommand mousedown', setOpts);\n }\n };\n const addBrAfterLastLinks = () => {\n const fixLinks = () => {\n each(dom.select('a:not([data-mce-block])'), node => {\n var _a;\n let parentNode = node.parentNode;\n const root = dom.getRoot();\n if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.lastChild) === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (((_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.lastChild) !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', e => {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n const setDefaultBlockType = () => {\n editor.on('init', () => {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n };\n const isAllContentSelected = editor => {\n const body = editor.getBody();\n const rng = editor.selection.getRng();\n return rng.startContainer === rng.endContainer && rng.startContainer === body && rng.startOffset === 0 && rng.endOffset === body.childNodes.length;\n };\n const normalizeSelection = () => {\n editor.on('keyup focusin mouseup', e => {\n if (!VK.modifierPressed(e) && !isAllContentSelected(editor)) {\n selection.normalize();\n }\n }, true);\n };\n const showBrokenImageIcon = () => {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n const restoreFocusOnKeyDown = () => {\n if (!editor.inline) {\n editor.on('keydown', () => {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n const bodyHeight = () => {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', e => {\n let rng;\n if (e.target.nodeName === 'HTML') {\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n const blockCmdArrowNavigation = () => {\n if (isMac) {\n editor.on('keydown', e => {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n const selection = editor.selection.getSel();\n selection.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n const tapLinksAndImages = () => {\n editor.on('click', e => {\n let elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n const blockFormSubmitInsideEditor = () => {\n editor.on('init', () => {\n editor.dom.bind(editor.getBody(), 'submit', e => {\n e.preventDefault();\n });\n });\n };\n const removeAppleInterchangeBrs = () => {\n parser.addNodeFilter('br', nodes => {\n let i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n const refreshContentEditable = noop;\n const isHidden = () => {\n if (!isGecko || editor.removed) {\n return false;\n }\n const sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n const setupRtc = () => {\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n const setup = () => {\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n };\n if (isRtc(editor)) {\n setupRtc();\n } else {\n setup();\n }\n return {\n refreshContentEditable,\n isHidden\n };\n };\n\n const isGplKey = key => key.toLowerCase() === 'gpl';\n const isValidGeneratedKey = key => key.length >= 64 && key.length <= 255;\n const validateLicenseKey = key => isGplKey(key) || isValidGeneratedKey(key) ? 'VALID' : 'INVALID';\n const validateEditorLicenseKey = editor => {\n const licenseKey = getLicenseKey(editor);\n const hasApiKey = isString(getApiKey(editor));\n if (!hasApiKey && (isUndefined(licenseKey) || validateLicenseKey(licenseKey) === 'INVALID')) {\n console.warn(`TinyMCE is running in evaluation mode. Provide a valid license key or add license_key: 'gpl' to the init config to agree to the open source license terms. Read more at https://www.tiny.cloud/license-key/`);\n }\n };\n\n const DOM$6 = DOMUtils.DOM;\n const appendStyle = (editor, text) => {\n const body = SugarElement.fromDom(editor.getBody());\n const container = getStyleContainer(getRootNode(body));\n const style = SugarElement.fromTag('style');\n set$3(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', () => {\n remove$4(style);\n });\n };\n const getRootName = editor => editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n const removeUndefined = obj => filter$4(obj, v => isUndefined(v) === false);\n const mkParserSettings = editor => {\n const getOption = editor.options.get;\n const blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: getOption('allow_conditional_comments'),\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls'),\n allow_html_in_named_anchor: getOption('allow_html_in_named_anchor'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_mathml_annotation_encodings: getOption('allow_mathml_annotation_encodings'),\n allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n convert_unsafe_embeds: getOption('convert_unsafe_embeds'),\n convert_fonts_to_spans: getOption('convert_fonts_to_spans'),\n fix_list_elements: getOption('fix_list_elements'),\n font_size_legacy_values: getOption('font_size_legacy_values'),\n forced_root_block: getOption('forced_root_block'),\n forced_root_block_attrs: getOption('forced_root_block_attrs'),\n preserve_cdata: getOption('preserve_cdata'),\n inline_styles: getOption('inline_styles'),\n root_name: getRootName(editor),\n sandbox_iframes: getOption('sandbox_iframes'),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n sanitize: getOption('xss_sanitization'),\n validate: true,\n blob_cache: blobCache,\n document: editor.getDoc()\n });\n };\n const mkSchemaSettings = editor => {\n const getOption = editor.options.get;\n return removeUndefined({\n custom_elements: getOption('custom_elements'),\n extended_valid_elements: getOption('extended_valid_elements'),\n invalid_elements: getOption('invalid_elements'),\n invalid_styles: getOption('invalid_styles'),\n schema: getOption('schema'),\n valid_children: getOption('valid_children'),\n valid_classes: getOption('valid_classes'),\n valid_elements: getOption('valid_elements'),\n valid_styles: getOption('valid_styles'),\n verify_html: getOption('verify_html'),\n padd_empty_block_inline_children: getOption('format_empty_lines')\n });\n };\n const mkSerializerSettings = editor => {\n const getOption = editor.options.get;\n return {\n ...mkParserSettings(editor),\n ...mkSchemaSettings(editor),\n ...removeUndefined({\n remove_trailing_brs: getOption('remove_trailing_brs'),\n pad_empty_with_br: getOption('pad_empty_with_br'),\n url_converter: getOption('url_converter'),\n url_converter_scope: getOption('url_converter_scope'),\n element_format: getOption('element_format'),\n entities: getOption('entities'),\n entity_encoding: getOption('entity_encoding'),\n indent: getOption('indent'),\n indent_after: getOption('indent_after'),\n indent_before: getOption('indent_before')\n })\n };\n };\n const createParser = editor => {\n const parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', (nodes, name) => {\n const dom = editor.dom;\n const internalName = 'data-mce-' + name;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr(name);\n if (value && !node.attr(internalName)) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (shouldPreserveCData(editor)) {\n parser.addNodeFilter('#cdata', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode((_a = node.value) !== null && _a !== void 0 ? _a : '') + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', nodes => {\n let i = nodes.length;\n const nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n const node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1));\n }\n }\n });\n return parser;\n };\n const autoFocus = editor => {\n const autoFocus = getAutoFocus(editor);\n if (autoFocus) {\n Delay.setEditorTimeout(editor, () => {\n let focusEditor;\n if (autoFocus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(autoFocus);\n }\n if (focusEditor && !focusEditor.destroyed) {\n focusEditor.focus();\n focusEditor.selection.scrollIntoView();\n }\n }, 100);\n }\n };\n const moveSelectionToFirstCaretPosition = editor => {\n const root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const initEditor = editor => {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n const initInstanceCallback = getInitInstanceCallback(editor);\n if (isFunction(initInstanceCallback)) {\n initInstanceCallback.call(editor, editor);\n }\n autoFocus(editor);\n };\n const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n const {\n pass: bundledCss,\n fail: normalCss\n } = partition$2(css, name => tinymce.Resource.has(toContentSkinResourceName(name)));\n const bundledPromises = bundledCss.map(url => {\n const css = tinymce.Resource.get(toContentSkinResourceName(url));\n if (isString(css)) {\n return Promise.resolve(getStyleSheetLoader$1(editor).loadRawCss(url, css));\n }\n return Promise.resolve();\n });\n const promises = [\n ...bundledPromises,\n getStyleSheetLoader$1(editor).loadAll(normalCss)\n ];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n }\n };\n const loadContentCss = editor => {\n const styleSheetLoader = getStyleSheetLoader$1(editor);\n const fontCss = getFontCss(editor);\n const css = editor.contentCSS;\n const removeCss = () => {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n const loaded = () => {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n }\n };\n if (editor.contentStyles.length > 0) {\n let contentCssText = '';\n Tools.each(editor.contentStyles, style => {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n const contentStyle = getContentStyle(editor);\n if (contentStyle) {\n appendStyle(editor, contentStyle);\n }\n return allStylesheets;\n };\n const preInit = editor => {\n const doc = editor.getDoc(), body = editor.getBody();\n firePreInit(editor);\n if (!shouldBrowserSpellcheck(editor)) {\n doc.body.spellcheck = false;\n DOM$6.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n const directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n const protect = getProtect(editor);\n if (protect) {\n editor.on('BeforeSetContent', e => {\n Tools.each(protect, pattern => {\n e.content = e.content.replace(pattern, str => {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', () => {\n editor.addVisual(editor.getBody());\n });\n editor.on('compositionstart compositionend', e => {\n editor.composing = e.type === 'compositionstart';\n });\n };\n const loadInitialContent = editor => {\n if (!isRtc(editor)) {\n editor.load({\n initial: true,\n format: 'html'\n });\n }\n editor.startContent = editor.getContent({ format: 'raw' });\n };\n const initEditorWithInitialContent = editor => {\n if (editor.removed !== true) {\n loadInitialContent(editor);\n initEditor(editor);\n }\n };\n const startProgress = editor => {\n let canceled = false;\n const progressTimeout = setTimeout(() => {\n if (!canceled) {\n editor.setProgressState(true);\n }\n }, 500);\n return () => {\n clearTimeout(progressTimeout);\n canceled = true;\n editor.setProgressState(false);\n };\n };\n const contentBodyLoaded = editor => {\n const targetElm = editor.getElement();\n let doc = editor.getDoc();\n if (editor.inline) {\n DOM$6.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = document;\n editor.contentWindow = window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n }\n const body = editor.getBody();\n body.disabled = true;\n editor.readonly = isReadOnly$1(editor);\n editor._editableRoot = hasEditableRoot$1(editor);\n if (editor.hasEditableRoot()) {\n if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = 'true';\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(mkSchemaSettings(editor));\n editor.dom = DOMUtils(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: editor.inline,\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: e => {\n editor.dispatch('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$p(editor);\n setup$6(editor);\n setup$n(editor);\n if (!isRtc(editor)) {\n setup$5(editor);\n setup$1(editor);\n }\n const caret = setup$b(editor);\n setup$q(editor, caret);\n setup$o(editor);\n setup$r(editor);\n setup$7(editor);\n const setupRtcThunk = setup$t(editor);\n preInit(editor);\n validateEditorLicenseKey(editor);\n setupRtcThunk.fold(() => {\n const cancelProgress = startProgress(editor);\n loadContentCss(editor).then(() => {\n initEditorWithInitialContent(editor);\n cancelProgress();\n });\n }, setupRtc => {\n editor.setProgressState(true);\n loadContentCss(editor).then(() => {\n setupRtc().then(_rtcMode => {\n editor.setProgressState(false);\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n }, err => {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n });\n });\n });\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n\n const DOM$5 = DOMUtils.DOM;\n const createIframeElement = (id, title, customAttrs, tabindex) => {\n const iframe = SugarElement.fromTag('iframe');\n tabindex.each(t => set$3(iframe, 'tabindex', t));\n setAll$1(iframe, customAttrs);\n setAll$1(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title\n });\n add$2(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n const getIframeHtml = editor => {\n let iframeHTML = getDocType(editor) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const translatedAriaText = editor.translate(getIframeAriaText(editor));\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '' + `` + '
    ' + '';\n return iframeHTML;\n };\n const createIframe = (editor, boxInfo) => {\n const iframeTitle = Env.browser.isFirefox() ? getIframeAriaText(editor) : 'Rich Text Area';\n const translatedTitle = editor.translate(iframeTitle);\n const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n const ifr = createIframeElement(editor.id, translatedTitle, getIframeAttrs(editor), tabindex).dom;\n ifr.onload = () => {\n ifr.onload = null;\n editor.dispatch('load');\n };\n editor.contentAreaContainer = boxInfo.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(boxInfo.iframeContainer, ifr);\n };\n const setupIframeBody = editor => {\n const iframe = editor.iframeElement;\n const ready = () => {\n editor.contentDocument = iframe.contentDocument;\n contentBodyLoaded(editor);\n };\n if (shouldUseDocumentWrite(editor) || Env.browser.isFirefox()) {\n const doc = editor.getDoc();\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n ready();\n } else {\n const binder = bind(SugarElement.fromDom(iframe), 'load', () => {\n binder.unbind();\n ready();\n });\n iframe.srcdoc = editor.iframeHTML;\n }\n };\n const init$1 = (editor, boxInfo) => {\n createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n boxInfo.editorContainer.style.display = editor.orgDisplay;\n editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n editor.getElement().style.visibility = editor.orgVisibility;\n setupIframeBody(editor);\n };\n\n const DOM$4 = DOMUtils.DOM;\n const initPlugin = (editor, initializedPlugins, plugin) => {\n const Plugin = PluginManager.get(plugin);\n const pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n const pluginInstance = Plugin(editor, pluginUrl) || {};\n editor.plugins[plugin] = pluginInstance;\n if (isFunction(pluginInstance.init)) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n const trimLegacyPrefix = name => {\n return name.replace(/^\\-/, '');\n };\n const initPlugins = editor => {\n const initializedPlugins = [];\n each$e(getPlugins(editor), name => {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n const initIcons = editor => {\n const iconPackName = Tools.trim(getIconPackName(editor));\n const currentIcons = editor.ui.registry.getAll().icons;\n const loadIcons = {\n ...IconManager.get('default').icons,\n ...IconManager.get(iconPackName).icons\n };\n each$d(loadIcons, (svgData, icon) => {\n if (!has$2(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n const initTheme = editor => {\n const theme = getTheme(editor);\n if (isString(theme)) {\n const Theme = ThemeManager.get(theme);\n editor.theme = Theme(editor, ThemeManager.urls[theme]) || {};\n if (isFunction(editor.theme.init)) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''));\n }\n } else {\n editor.theme = {};\n }\n };\n const initModel = editor => {\n const model = getModel(editor);\n const Model = ModelManager.get(model);\n editor.model = Model(editor, ModelManager.urls[model]);\n };\n const renderFromLoadedTheme = editor => {\n const render = editor.theme.renderUI;\n return render ? render() : renderThemeFalse(editor);\n };\n const renderFromThemeFunc = editor => {\n const elm = editor.getElement();\n const theme = getTheme(editor);\n const info = theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n const createThemeFalseResult = (element, iframe) => {\n return {\n editorContainer: element,\n iframeContainer: iframe,\n api: {}\n };\n };\n const renderThemeFalseIframe = targetElement => {\n const iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer, iframeContainer);\n };\n const renderThemeFalse = editor => {\n const targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n const renderThemeUi = editor => {\n const elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n const augmentEditorUiApi = (editor, api) => {\n const uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n isEnabled: Optional.from(api.isEnabled).getOr(always),\n setEnabled: state => {\n const shouldSkip = state && editor.mode.get() === 'readonly';\n if (!shouldSkip) {\n Optional.from(api.setEnabled).each(f => f(state));\n }\n }\n };\n editor.ui = {\n ...editor.ui,\n ...uiApiFacade\n };\n };\n const init = async editor => {\n editor.dispatch('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initModel(editor);\n initPlugins(editor);\n const renderInfo = await renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n editor.editorContainer = renderInfo.editorContainer;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n contentBodyLoaded(editor);\n } else {\n init$1(editor, {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n });\n }\n };\n\n const DOM$3 = DOMUtils.DOM;\n const hasSkipLoadPrefix = name => name.charAt(0) === '-';\n const loadLanguage = (scriptLoader, editor) => {\n const languageCode = getLanguageCode(editor);\n const languageUrl = getLanguageUrl(editor);\n if (!I18n.hasCode(languageCode) && languageCode !== 'en') {\n const url = isNotEmpty(languageUrl) ? languageUrl : `${ editor.editorManager.baseURL }/langs/${ languageCode }.js`;\n scriptLoader.add(url).catch(() => {\n languageLoadError(editor, url, languageCode);\n });\n }\n };\n const loadTheme = (editor, suffix) => {\n const theme = getTheme(editor);\n if (isString(theme) && !hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n const themeUrl = getThemeUrl(editor);\n const url = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${ theme }/theme${ suffix }.js`;\n ThemeManager.load(theme, url).catch(() => {\n themeLoadError(editor, url, theme);\n });\n }\n };\n const loadModel = (editor, suffix) => {\n const model = getModel(editor);\n if (model !== 'plugin' && !has$2(ModelManager.urls, model)) {\n const modelUrl = getModelUrl(editor);\n const url = isString(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${ model }/model${ suffix }.js`;\n ModelManager.load(model, url).catch(() => {\n modelLoadError(editor, url, model);\n });\n }\n };\n const getIconsUrlMetaFromUrl = editor => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map(url => ({\n url,\n name: Optional.none()\n }));\n const getIconsUrlMetaFromName = (editor, name, suffix) => Optional.from(name).filter(name => isNotEmpty(name) && !IconManager.has(name)).map(name => ({\n url: `${ editor.editorManager.baseURL }/icons/${ name }/icons${ suffix }.js`,\n name: Optional.some(name)\n }));\n const loadIcons = (scriptLoader, editor, suffix) => {\n const defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), ''));\n each$e(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), urlMeta => {\n scriptLoader.add(urlMeta.url).catch(() => {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n const loadPlugins = (editor, suffix) => {\n const loadPlugin = (name, url) => {\n PluginManager.load(name, url).catch(() => {\n pluginLoadError(editor, url, name);\n });\n };\n each$d(getExternalPlugins$1(editor), (url, name) => {\n loadPlugin(name, url);\n editor.options.set('plugins', getPlugins(editor).concat(name));\n });\n each$e(getPlugins(editor), plugin => {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin] && !hasSkipLoadPrefix(plugin)) {\n loadPlugin(plugin, `plugins/${ plugin }/plugin${ suffix }.js`);\n }\n });\n };\n const isThemeLoaded = editor => {\n const theme = getTheme(editor);\n return !isString(theme) || isNonNullable(ThemeManager.get(theme));\n };\n const isModelLoaded = editor => {\n const model = getModel(editor);\n return isNonNullable(ModelManager.get(model));\n };\n const loadScripts = (editor, suffix) => {\n const scriptLoader = ScriptLoader.ScriptLoader;\n const initEditor = () => {\n if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n init(editor);\n }\n };\n loadTheme(editor, suffix);\n loadModel(editor, suffix);\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue().then(initEditor, initEditor);\n };\n const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n const render = editor => {\n const id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n const readyHandler = () => {\n DOM$3.unbind(window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$3.bind(window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n const element = SugarElement.fromDom(editor.getElement());\n const snapshot = clone$4(element);\n editor.on('remove', () => {\n eachr(element.dom.attributes, attr => remove$9(element, attr.name));\n setAll$1(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n if (!isInline$1(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n const form = editor.getElement().form || DOM$3.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n DOM$3.insertAfter(DOM$3.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = e => {\n editor.dispatch(e.type, e);\n };\n DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', () => {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = () => {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (isEncodingXml(editor)) {\n editor.on('GetContent', e => {\n if (e.save) {\n e.content = DOM$3.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', () => {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = () => {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n\n const setEditableRoot = (editor, state) => {\n if (editor._editableRoot !== state) {\n editor._editableRoot = state;\n editor.getBody().contentEditable = String(editor.hasEditableRoot());\n editor.nodeChanged();\n fireEditableRootStateChange(editor, state);\n }\n };\n const hasEditableRoot = editor => editor._editableRoot;\n\n const sectionResult = (sections, settings) => ({\n sections: constant(sections),\n options: constant(settings)\n });\n const deviceDetection = detect$1().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const normalizePlugins = plugins => {\n if (isNullable(plugins)) {\n return [];\n } else {\n const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n const trimmedPlugins = map$3(pluginNames, trim$4);\n return filter$5(trimmedPlugins, isNotEmpty);\n }\n };\n const extractSections = (keys, options) => {\n const result = bifilter(options, (value, key) => {\n return contains$2(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n const getSection = (sectionResult, name, defaults = {}) => {\n const sections = sectionResult.sections();\n const sectionOptions = get$a(sections, name).getOr({});\n return Tools.extend({}, defaults, sectionOptions);\n };\n const hasSection = (sectionResult, name) => {\n return has$2(sectionResult.sections(), name);\n };\n const getSectionConfig = (sectionResult, name) => {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n const getMobileOverrideOptions = (mobileOptions, isPhone) => {\n const defaultMobileOptions = {\n table_grid: false,\n object_resizing: false,\n resize: false,\n toolbar_mode: get$a(mobileOptions, 'toolbar_mode').getOr('scrolling'),\n toolbar_sticky: false\n };\n const defaultPhoneOptions = { menubar: false };\n return {\n ...defaultMobileOptions,\n ...isPhone ? defaultPhoneOptions : {}\n };\n };\n const getExternalPlugins = (overrideOptions, options) => {\n var _a;\n const userDefinedExternalPlugins = (_a = options.external_plugins) !== null && _a !== void 0 ? _a : {};\n if (overrideOptions && overrideOptions.external_plugins) {\n return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n const combinePlugins = (forcedPlugins, plugins) => [\n ...normalizePlugins(forcedPlugins),\n ...normalizePlugins(plugins)\n ];\n const getPlatformPlugins = (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) => {\n if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n return mobilePlugins;\n } else {\n return desktopPlugins;\n }\n };\n const processPlugins = (isMobileDevice, sectionResult, defaultOverrideOptions, options) => {\n const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n const desktopPlugins = normalizePlugins(options.plugins);\n const mobileConfig = getSectionConfig(sectionResult, 'mobile');\n const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(options, {\n forced_plugins: forcedPlugins,\n plugins: combinedPlugins\n });\n };\n const isOnMobile = (isMobileDevice, sectionResult) => {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n const combineOptions = (isMobileDevice, isPhone, defaultOptions, defaultOverrideOptions, options) => {\n var _a;\n const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a = options.mobile) !== null && _a !== void 0 ? _a : {}, isPhone) } : {};\n const sectionResult = extractSections(['mobile'], deepMerge(deviceOverrideOptions, options));\n const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);\n };\n const normalizeOptions = (defaultOverrideOptions, options) => {\n const copiedOptions = merge(options);\n return combineOptions(isPhone || isTablet, isPhone, copiedOptions, defaultOverrideOptions, copiedOptions);\n };\n\n const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n const registerExecCommands$2 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n const toggleAlign = align => () => {\n each$e('left,center,right,justify'.split(','), name => {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n };\n editor.editorCommands.addCommands({\n JustifyLeft: toggleAlign('left'),\n JustifyCenter: toggleAlign('center'),\n JustifyRight: toggleAlign('right'),\n JustifyFull: toggleAlign('justify'),\n JustifyNone: toggleAlign('none')\n });\n };\n const registerQueryStateCommands = editor => {\n const alignStates = name => () => {\n const selection = editor.selection;\n const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n return exists(nodes, node => isNonNullable(editor.formatter.matchNode(node, name)));\n };\n editor.editorCommands.addCommands({\n JustifyLeft: alignStates('alignleft'),\n JustifyCenter: alignStates('aligncenter'),\n JustifyRight: alignStates('alignright'),\n JustifyFull: alignStates('alignjustify')\n }, 'state');\n };\n const registerCommands$a = editor => {\n registerExecCommands$2(editor);\n registerQueryStateCommands(editor);\n };\n\n const registerCommands$9 = editor => {\n editor.editorCommands.addCommands({\n 'Cut,Copy,Paste': command => {\n const doc = editor.getDoc();\n let failed;\n try {\n doc.execCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. ` + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.os.isMacOS() || Env.os.isiOS()) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n }\n });\n };\n\n const trimOrPadLeftRight = (dom, rng, html, schema) => {\n const root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng), schema)) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng), schema)) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\n }\n return html;\n };\n\n const processValue$1 = value => {\n if (typeof value !== 'string') {\n const details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n const trimOrPad = (editor, value) => {\n const selection = editor.selection;\n const dom = editor.dom;\n if (/^ | $/.test(value)) {\n return trimOrPadLeftRight(dom, selection.getRng(), value, editor.schema);\n } else {\n return value;\n }\n };\n const insertAtCaret = (editor, value) => {\n if (editor.selection.isEditable()) {\n const {content, details} = processValue$1(value);\n preProcessSetContent(editor, {\n ...details,\n content: trimOrPad(editor, content),\n format: 'html',\n set: false,\n selection: true\n }).each(args => {\n const insertedContent = insertContent$1(editor, args.content, details);\n postProcessSetContent(editor, insertedContent, args);\n editor.addVisual();\n });\n }\n };\n\n const registerCommands$8 = editor => {\n editor.editorCommands.addCommands({\n mceCleanup: () => {\n const bm = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bm);\n },\n insertImage: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.createHTML('img', { src: value }));\n },\n insertHorizontalRule: () => {\n editor.execCommand('mceInsertContent', false, '
    ');\n },\n insertText: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.encode(value));\n },\n insertHTML: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceInsertContent: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceSetContent: (_command, _ui, value) => {\n editor.setContent(value);\n },\n mceReplaceContent: (_command, _ui, value) => {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n mceNewDocument: () => {\n editor.setContent(getNewDocumentContent(editor));\n }\n });\n };\n\n const legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n const isFont = isTag('font');\n const getSpecifiedFontProp = (propName, rootElm, elm) => {\n const getProperty = elm => getRaw(elm, propName).orThunk(() => {\n if (isFont(elm)) {\n return get$a(legacyPropNames, propName).bind(legacyPropName => getOpt(elm, legacyPropName));\n } else {\n return Optional.none();\n }\n });\n const isRoot = elm => eq(SugarElement.fromDom(rootElm), elm);\n return closest$1(SugarElement.fromDom(elm), elm => getProperty(elm), isRoot);\n };\n const normalizeFontFamily = fontFamily => fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n const getFontProp = propName => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind(element => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr('');\n const getFontSize = getFontProp('font-size');\n const getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n const findFirstCaretElement = editor => firstPositionIn(editor.getBody()).bind(caret => {\n const container = caret.container();\n return Optional.from(isText$b(container) ? container.parentNode : container);\n });\n const getCaretElement = editor => Optional.from(editor.selection.getRng()).bind(rng => {\n const root = editor.getBody();\n const atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n const bindRange = (editor, binder) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder);\n const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n\n const fromFontSizeNumber = (editor, value) => {\n if (/^[0-9.]+$/.test(value)) {\n const fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n const fontSizes = getFontStyleValues(editor);\n const fontClasses = getFontSizeClasses(editor);\n if (fontClasses.length > 0) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n const normalizeFontNames = font => {\n const fonts = font.split(/\\s*,\\s*/);\n return map$3(fonts, font => {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, `'`))) {\n return `'${ font }'`;\n } else {\n return font;\n }\n }).join(',');\n };\n const fontNameAction = (editor, value) => {\n const font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n const fontNameQuery = editor => mapRange(editor, elm => getFontFamily(editor.getBody(), elm.dom)).getOr('');\n const fontSizeAction = (editor, value) => {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n const fontSizeQuery = editor => mapRange(editor, elm => getFontSize(editor.getBody(), elm.dom)).getOr('');\n\n const lineHeightQuery = editor => mapRange(editor, elm => {\n const root = SugarElement.fromDom(editor.getBody());\n const specifiedStyle = closest$1(elm, elm => getRaw(elm, 'line-height'), curry(eq, root));\n const computedStyle = () => {\n const lineHeight = parseFloat(get$7(elm, 'line-height'));\n const fontSize = parseFloat(get$7(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n const lineHeightAction = (editor, lineHeight) => {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n };\n\n const registerExecCommands$1 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': (command, _ui, value) => {\n toggleFormat(command, { value });\n },\n 'BackColor': (_command, _ui, value) => {\n toggleFormat('hilitecolor', { value });\n },\n 'FontName': (_command, _ui, value) => {\n fontNameAction(editor, value);\n },\n 'FontSize': (_command, _ui, value) => {\n fontSizeAction(editor, value);\n },\n 'LineHeight': (_command, _ui, value) => {\n lineHeightAction(editor, value);\n },\n 'Lang': (command, _ui, lang) => {\n var _a;\n toggleFormat(command, {\n value: lang.code,\n customValue: (_a = lang.customCode) !== null && _a !== void 0 ? _a : null\n });\n },\n 'RemoveFormat': command => {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': () => {\n toggleFormat('blockquote');\n },\n 'FormatBlock': (_command, _ui, value) => {\n toggleFormat(isString(value) ? value : 'p');\n },\n 'mceToggleFormat': (_command, _ui, value) => {\n toggleFormat(value);\n }\n });\n };\n const registerQueryValueCommands = editor => {\n const isFormatMatch = name => editor.formatter.match(name);\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => isFormatMatch(command),\n 'mceBlockQuote': () => isFormatMatch('blockquote')\n }, 'state');\n editor.editorCommands.addQueryValueHandler('FontName', () => fontNameQuery(editor));\n editor.editorCommands.addQueryValueHandler('FontSize', () => fontSizeQuery(editor));\n editor.editorCommands.addQueryValueHandler('LineHeight', () => lineHeightQuery(editor));\n };\n const registerCommands$7 = editor => {\n registerExecCommands$1(editor);\n registerQueryValueCommands(editor);\n };\n\n const registerCommands$6 = editor => {\n editor.editorCommands.addCommands({\n mceAddUndoLevel: () => {\n editor.undoManager.add();\n },\n mceEndUndoLevel: () => {\n editor.undoManager.add();\n },\n Undo: () => {\n editor.undoManager.undo();\n },\n Redo: () => {\n editor.undoManager.redo();\n }\n });\n };\n\n const registerCommands$5 = editor => {\n editor.editorCommands.addCommands({\n Indent: () => {\n indent(editor);\n },\n Outdent: () => {\n outdent(editor);\n }\n });\n editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, 'state');\n };\n\n const registerCommands$4 = editor => {\n const applyLinkToSelection = (_command, _ui, value) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const linkDetails = isString(value) ? { href: value } : value;\n const anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n if (isObject(linkDetails) && isString(linkDetails.href)) {\n linkDetails.href = linkDetails.href.replace(/ /g, '%20');\n if (!anchor || !linkDetails.href) {\n editor.formatter.remove('link');\n }\n if (linkDetails.href) {\n editor.formatter.apply('link', linkDetails, anchor);\n }\n }\n };\n editor.editorCommands.addCommands({\n unlink: () => {\n if (editor.selection.isEditable()) {\n if (editor.selection.isCollapsed()) {\n const elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n editor.formatter.remove('link');\n }\n },\n mceInsertLink: applyLinkToSelection,\n createLink: applyLinkToSelection\n });\n };\n\n const getTopParentBlock = (editor, node, root, container) => {\n const dom = editor.dom;\n const selector = node => dom.isBlock(node) && node.parentElement === root;\n const topParentBlock = selector(node) ? node : dom.getParent(container, selector, root);\n return Optional.from(topParentBlock).map(SugarElement.fromDom);\n };\n const insert = (editor, before) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const node = before ? editor.selection.getStart() : editor.selection.getEnd();\n const container = before ? rng.startContainer : rng.endContainer;\n const root = getEditableRoot(dom, container);\n if (!root || !root.isContentEditable) {\n return;\n }\n const insertFn = before ? before$3 : after$4;\n const newBlockName = getForcedRootBlock(editor);\n getTopParentBlock(editor, node, root, container).each(parentBlock => {\n const newBlock = createNewBlock(editor, container, parentBlock.dom, root, false, newBlockName);\n insertFn(parentBlock, SugarElement.fromDom(newBlock));\n editor.selection.setCursorLocation(newBlock, 0);\n editor.dispatch('NewBlock', { newBlock });\n fireInputEvent(editor, 'insertParagraph');\n });\n };\n const insertBefore = editor => insert(editor, true);\n const insertAfter = editor => insert(editor, false);\n\n const registerCommands$3 = editor => {\n editor.editorCommands.addCommands({\n InsertNewBlockBefore: () => {\n insertBefore(editor);\n },\n InsertNewBlockAfter: () => {\n insertAfter(editor);\n }\n });\n };\n\n const registerCommands$2 = editor => {\n editor.editorCommands.addCommands({\n insertParagraph: () => {\n insertBreak(blockbreak, editor);\n },\n mceInsertNewLine: (_command, _ui, value) => {\n insert$1(editor, value);\n },\n InsertLineBreak: (_command, _ui, _value) => {\n insertBreak(linebreak, editor);\n }\n });\n };\n\n const registerCommands$1 = editor => {\n editor.editorCommands.addCommands({\n mceSelectNodeDepth: (_command, _ui, value) => {\n let counter = 0;\n editor.dom.getParent(editor.selection.getNode(), node => {\n if (isElement$6(node) && counter++ === value) {\n editor.selection.select(node);\n return false;\n } else {\n return true;\n }\n }, editor.getBody());\n },\n mceSelectNode: (_command, _ui, value) => {\n editor.selection.select(value);\n },\n selectAll: () => {\n const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$3);\n if (editingHost) {\n const rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n }\n });\n };\n\n const registerExecCommands = editor => {\n editor.editorCommands.addCommands({\n mceRemoveNode: (_command, _ui, value) => {\n const node = value !== null && value !== void 0 ? value : editor.selection.getNode();\n if (node !== editor.getBody()) {\n const bm = editor.selection.getBookmark();\n editor.dom.remove(node, true);\n editor.selection.moveToBookmark(bm);\n }\n },\n mcePrint: () => {\n editor.getWin().print();\n },\n mceFocus: (_command, _ui, value) => {\n focus(editor, value === true);\n },\n mceToggleVisualAid: () => {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n }\n });\n };\n const registerCommands = editor => {\n registerCommands$a(editor);\n registerCommands$9(editor);\n registerCommands$6(editor);\n registerCommands$1(editor);\n registerCommands$8(editor);\n registerCommands$4(editor);\n registerCommands$5(editor);\n registerCommands$3(editor);\n registerCommands$2(editor);\n registerCommands$7(editor);\n registerExecCommands(editor);\n };\n\n const selectionSafeCommands = ['toggleview'];\n const isSelectionSafeCommand = command => contains$2(selectionSafeCommands, command.toLowerCase());\n class EditorCommands {\n constructor(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n }\n execCommand(command, ui = false, value, args) {\n const editor = this.editor;\n const lowerCaseCommand = command.toLowerCase();\n const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n if (editor.removed) {\n return false;\n }\n if (lowerCaseCommand !== 'mcefocus') {\n if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n editor.focus();\n } else {\n restore(editor);\n }\n }\n const eventArgs = editor.dispatch('BeforeExecCommand', {\n command,\n ui,\n value\n });\n if (eventArgs.isDefaultPrevented()) {\n return false;\n }\n const func = this.commands.exec[lowerCaseCommand];\n if (isFunction(func)) {\n func(lowerCaseCommand, ui, value);\n editor.dispatch('ExecCommand', {\n command,\n ui,\n value\n });\n return true;\n }\n return false;\n }\n queryCommandState(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return false;\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.state[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return false;\n }\n queryCommandValue(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return '';\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.value[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return '';\n }\n addCommands(commandList, type = 'exec') {\n const commands = this.commands;\n each$d(commandList, (callback, command) => {\n each$e(command.toLowerCase().split(','), command => {\n commands[type][command] = callback;\n });\n });\n }\n addCommand(command, callback, scope) {\n const lowerCaseCommand = command.toLowerCase();\n this.commands.exec[lowerCaseCommand] = (_command, ui, value) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value);\n }\n queryCommandSupported(command) {\n const lowerCaseCommand = command.toLowerCase();\n if (this.commands.exec[lowerCaseCommand]) {\n return true;\n } else {\n return false;\n }\n }\n addQueryStateHandler(command, callback, scope) {\n this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n addQueryValueHandler(command, callback, scope) {\n this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n }\n\n const toggleClass = (elm, cls, state) => {\n if (has(elm, cls) && !state) {\n remove$6(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n const setEditorCommandState = (editor, cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n const setContentEditable = (elm, state) => {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n const removeFakeSelection = editor => {\n Optional.from(editor.selection.getNode()).each(elm => {\n elm.removeAttribute('data-mce-selected');\n });\n };\n const restoreFakeSelection = editor => {\n editor.selection.setRng(editor.selection.getRng());\n };\n const setCommonEditorCommands = (editor, state) => {\n setEditorCommandState(editor, 'StyleWithCSS', state);\n setEditorCommandState(editor, 'enableInlineTableEditing', state);\n setEditorCommandState(editor, 'enableObjectResizing', state);\n };\n const setEditorReadonly = editor => {\n editor.readonly = true;\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n };\n const unsetEditorReadonly = (editor, body) => {\n editor.readonly = false;\n if (editor.hasEditableRoot()) {\n setContentEditable(body, true);\n }\n setCommonEditorCommands(editor, false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n };\n const toggleReadOnly = (editor, state) => {\n const body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', state);\n if (state) {\n setEditorReadonly(editor);\n if (editor.hasEditableRoot()) {\n setContentEditable(body, true);\n }\n } else {\n unsetEditorReadonly(editor, body);\n }\n };\n const isReadOnly = editor => editor.readonly;\n const isClickEvent = e => e.type === 'click';\n const allowedEvents = ['copy'];\n const isReadOnlyAllowedEvent = e => contains$2(allowedEvents, e.type);\n const getAnchorHrefOpt = (editor, elm) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n return closest$3(elm, 'a', isRoot).bind(a => getOpt(a, 'href'));\n };\n const processReadonlyEvents = (editor, e) => {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n const elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(href => {\n e.preventDefault();\n if (/^#/.test(href)) {\n const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n }\n });\n } else if (isReadOnlyAllowedEvent(e)) {\n editor.dispatch(e.type, e);\n }\n };\n const registerReadOnlySelectionBlockers = editor => {\n editor.on('beforeinput paste cut dragend dragover draggesture dragdrop drop drag', e => {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('BeforeExecCommand', e => {\n if ((e.command === 'Undo' || e.command === 'Redo') && isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('input', e => {\n if (!e.isComposing && isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\n });\n editor.on('compositionend', () => {\n if (isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\n });\n };\n\n const nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n class EventDispatcher {\n static isNative(name) {\n return !!nativeEvents[name.toLowerCase()];\n }\n constructor(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n fire(name, args) {\n return this.dispatch(name, args);\n }\n dispatch(name, args) {\n const lcName = name.toLowerCase();\n const event = normalize$3(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n if (this.settings.beforeFire) {\n this.settings.beforeFire(event);\n }\n const handlers = this.bindings[lcName];\n if (handlers) {\n for (let i = 0, l = handlers.length; i < l; i++) {\n const callback = handlers[i];\n if (callback.removed) {\n continue;\n }\n if (callback.once) {\n this.off(lcName, callback.func);\n }\n if (event.isImmediatePropagationStopped()) {\n return event;\n }\n if (callback.func.call(this.scope, event) === false) {\n event.preventDefault();\n return event;\n }\n }\n }\n return event;\n }\n on(name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n const wrappedCallback = {\n func: callback,\n removed: false\n };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers = [\n wrappedCallback,\n ...handlers\n ];\n } else {\n handlers = [\n ...handlers,\n wrappedCallback\n ];\n }\n this.bindings[currentName] = handlers;\n }\n }\n return this;\n }\n off(name, callback) {\n if (name) {\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!currentName) {\n each$d(this.bindings, (_value, bindingName) => {\n this.toggleEvent(bindingName, false);\n delete this.bindings[bindingName];\n });\n return this;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n const filteredHandlers = partition$2(handlers, handler => handler.func === callback);\n handlers = filteredHandlers.fail;\n this.bindings[currentName] = handlers;\n each$e(filteredHandlers.pass, handler => {\n handler.removed = true;\n });\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[currentName];\n }\n }\n }\n } else {\n each$d(this.bindings, (_value, name) => {\n this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n }\n once(name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n }\n has(name) {\n name = name.toLowerCase();\n const binding = this.bindings[name];\n return !(!binding || binding.length === 0);\n }\n }\n\n const getEventDispatcher = obj => {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: (name, state) => {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n const Observable = {\n fire(name, args, bubble) {\n return this.dispatch(name, args, bubble);\n },\n dispatch(name, args, bubble) {\n const self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return normalize$3(name.toLowerCase(), args !== null && args !== void 0 ? args : {}, self);\n }\n const dispatcherArgs = getEventDispatcher(self).dispatch(name, args);\n if (bubble !== false && self.parent) {\n let parent = self.parent();\n while (parent && !dispatcherArgs.isPropagationStopped()) {\n parent.dispatch(name, dispatcherArgs, false);\n parent = parent.parent ? parent.parent() : undefined;\n }\n }\n return dispatcherArgs;\n },\n on(name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off(name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once(name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners(name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n const DOM$2 = DOMUtils.DOM;\n let customEventRootDelegates;\n const getEventTarget = (editor, eventName) => {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^(?:mouse|touch|click|contextmenu|drop|dragover|dragend)/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n const eventRoot = getEventRoot(editor);\n if (eventRoot) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$2.select(eventRoot)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n const isListening = editor => !editor.hidden;\n const fireEvent = (editor, eventName, e) => {\n if (isListening(editor)) {\n editor.dispatch(eventName, e);\n } else if (isReadOnly(editor)) {\n processReadonlyEvents(editor, e);\n }\n };\n const bindEventDelegate = (editor, eventName) => {\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n const eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', () => {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$d(customEventRootDelegates, (_value, name) => {\n editor.dom.unbind(getEventTarget(editor, name));\n });\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n const delegate = e => {\n const target = e.target;\n const editors = editor.editorManager.get();\n let i = editors.length;\n while (i--) {\n const body = editors[i].getBody();\n if (body === target || DOM$2.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$2.bind(eventRootElm, eventName, delegate);\n } else {\n const delegate = e => {\n fireEvent(editor, eventName, e);\n };\n DOM$2.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n const EditorObservable = {\n ...Observable,\n bindPendingEventDelegates() {\n const self = this;\n Tools.each(self._pendingNativeEvents, name => {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent(name, state) {\n const self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (self.removed) {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized && self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents() {\n const self = this;\n const body = self.getBody();\n const dom = self.dom;\n if (self.delegates) {\n each$d(self.delegates, (value, name) => {\n self.dom.unbind(getEventTarget(self, name), name, value);\n });\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n };\n\n const stringListProcessor = value => {\n if (isString(value)) {\n return {\n value: value.split(/[ ,]/),\n valid: true\n };\n } else if (isArrayOf(value, isString)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: `The value must be a string[] or a comma/space separated string.`\n };\n }\n };\n const getBuiltInProcessor = type => {\n const validator = (() => {\n switch (type) {\n case 'array':\n return isArray$1;\n case 'boolean':\n return isBoolean;\n case 'function':\n return isFunction;\n case 'number':\n return isNumber;\n case 'object':\n return isObject;\n case 'string':\n return isString;\n case 'string[]':\n return stringListProcessor;\n case 'object[]':\n return val => isArrayOf(val, isObject);\n case 'regexp':\n return val => is$4(val, RegExp);\n default:\n return always;\n }\n })();\n return value => processValue(value, validator, `The value must be a ${ type }.`);\n };\n const isBuiltInSpec = spec => isString(spec.processor);\n const getErrorMessage = (message, result) => {\n const additionalText = isEmpty$3(result.message) ? '' : `. ${ result.message }`;\n return message + additionalText;\n };\n const isValidResult = result => result.valid;\n const processValue = (value, processor, message = '') => {\n const result = processor(value);\n if (isBoolean(result)) {\n return result ? {\n value: value,\n valid: true\n } : {\n valid: false,\n message\n };\n } else {\n return result;\n }\n };\n const processDefaultValue = (name, defaultValue, processor) => {\n if (!isUndefined(defaultValue)) {\n const result = processValue(defaultValue, processor);\n if (isValidResult(result)) {\n return result.value;\n } else {\n console.error(getErrorMessage(`Invalid default value passed for the \"${ name }\" option`, result));\n }\n }\n return undefined;\n };\n const create$5 = (editor, initialOptions, rawInitialOptions = initialOptions) => {\n const registry = {};\n const values = {};\n const setValue = (name, value, processor) => {\n const result = processValue(value, processor);\n if (isValidResult(result)) {\n values[name] = result.value;\n return true;\n } else {\n console.warn(getErrorMessage(`Invalid value passed for the ${ name } option`, result));\n return false;\n }\n };\n const register = (name, spec) => {\n const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n const defaultValue = processDefaultValue(name, spec.default, processor);\n registry[name] = {\n ...spec,\n default: defaultValue,\n processor\n };\n const initValue = get$a(values, name).orThunk(() => get$a(initialOptions, name));\n initValue.each(value => setValue(name, value, processor));\n };\n const isRegistered = name => has$2(registry, name);\n const get = name => get$a(values, name).orThunk(() => get$a(registry, name).map(spec => spec.default)).getOrUndefined();\n const set = (name, value) => {\n if (!isRegistered(name)) {\n console.warn(`\"${ name }\" is not a registered option. Ensure the option has been registered before setting a value.`);\n return false;\n } else {\n const spec = registry[name];\n if (spec.immutable) {\n console.error(`\"${ name }\" is an immutable option and cannot be updated`);\n return false;\n } else {\n return setValue(name, value, spec.processor);\n }\n }\n };\n const unset = name => {\n const registered = isRegistered(name);\n if (registered) {\n delete values[name];\n }\n return registered;\n };\n const isSet = name => has$2(values, name);\n const debug = () => {\n try {\n console.log(JSON.parse(JSON.stringify(rawInitialOptions, (_key, value) => {\n if (isBoolean(value) || isNumber(value) || isString(value) || isNull(value) || isArray$1(value) || isPlainObject(value)) {\n return value;\n }\n return Object.prototype.toString.call(value);\n })));\n } catch (error) {\n console.error(error);\n }\n };\n return {\n register,\n isRegistered,\n get,\n set,\n unset,\n isSet,\n debug\n };\n };\n\n const defaultModes = [\n 'design',\n 'readonly'\n ];\n const switchToMode = (editor, activeMode, availableModes, mode) => {\n const oldMode = availableModes[activeMode.get()];\n const newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n console.error(`problem while activating editor mode ${ mode }:`, e);\n return;\n }\n oldMode.deactivate();\n if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n toggleReadOnly(editor, newMode.editorReadOnly);\n }\n activeMode.set(mode);\n fireSwitchMode(editor, mode);\n };\n const setMode = (editor, availableModes, activeMode, mode) => {\n if (mode === activeMode.get()) {\n return;\n } else if (!has$2(availableModes, mode)) {\n throw new Error(`Editor mode '${ mode }' is invalid`);\n }\n if (editor.initialized) {\n switchToMode(editor, activeMode, availableModes, mode);\n } else {\n editor.on('init', () => switchToMode(editor, activeMode, availableModes, mode));\n }\n };\n const registerMode = (availableModes, mode, api) => {\n if (contains$2(defaultModes, mode)) {\n throw new Error(`Cannot override default mode ${ mode }`);\n }\n return {\n ...availableModes,\n [mode]: {\n ...api,\n deactivate: () => {\n try {\n api.deactivate();\n } catch (e) {\n console.error(`problem while deactivating editor mode ${ mode }:`, e);\n }\n }\n }\n };\n };\n\n const create$4 = editor => {\n const activeMode = Cell('design');\n const availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: () => isReadOnly(editor),\n set: mode => setMode(editor, availableModes.get(), activeMode, mode),\n get: () => activeMode.get(),\n register: (mode, api) => {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n const each$2 = Tools.each, explode = Tools.explode;\n const keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n const modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n const isModifier = key => key in modifierNames;\n const parseShortcut = pattern => {\n const shortcut = {};\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n each$2(explode(pattern.toLowerCase(), '+'), value => {\n if (isModifier(value)) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n const id = [shortcut.keyCode];\n let key;\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (isMac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (isMac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n class Shortcuts {\n constructor(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n const self = this;\n editor.on('keyup keypress keydown', e => {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$2(self.shortcuts, shortcut => {\n if (self.matchShortcut(e, shortcut)) {\n self.pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n self.executeShortcutAction(shortcut);\n }\n }\n });\n if (self.matchShortcut(e, self.pendingPatterns[0])) {\n if (self.pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n self.executeShortcutAction(self.pendingPatterns[0]);\n }\n }\n self.pendingPatterns.shift();\n }\n }\n });\n }\n add(pattern, desc, cmdFunc, scope) {\n const self = this;\n const func = self.normalizeCommandFunc(cmdFunc);\n each$2(explode(Tools.trim(pattern)), pattern => {\n const shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n }\n remove(pattern) {\n const shortcut = this.createShortcut(pattern);\n if (this.shortcuts[shortcut.id]) {\n delete this.shortcuts[shortcut.id];\n return true;\n }\n return false;\n }\n normalizeCommandFunc(cmdFunc) {\n const self = this;\n const cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return () => {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return () => {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n }\n createShortcut(pattern, desc, cmdFunc, scope) {\n const shortcuts = Tools.map(explode(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || this.editor\n });\n return Tools.extend(shortcuts[0], {\n desc: this.editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n }\n hasModifier(e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n }\n isFunctionKey(e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n }\n matchShortcut(e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n }\n executeShortcutAction(shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n }\n }\n\n const create$3 = () => {\n const buttons = {};\n const menuItems = {};\n const popups = {};\n const icons = {};\n const contextMenus = {};\n const contextToolbars = {};\n const contexts = {};\n const sidebars = {};\n const views = {};\n const add = (collection, type) => (name, spec) => {\n collection[name.toLowerCase()] = {\n ...spec,\n type\n };\n };\n const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\n const addContext = (name, pred) => contexts[name.toLowerCase()] = pred;\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: add(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addView: add(views, 'views'),\n addIcon,\n addContext,\n getAll: () => ({\n buttons,\n menuItems,\n icons,\n popups,\n contextMenus,\n contextToolbars,\n sidebars,\n views,\n contexts\n })\n };\n };\n\n const registry = () => {\n const bridge = create$3();\n return {\n addAutocompleter: bridge.addAutocompleter,\n addButton: bridge.addButton,\n addContextForm: bridge.addContextForm,\n addContextMenu: bridge.addContextMenu,\n addContextToolbar: bridge.addContextToolbar,\n addIcon: bridge.addIcon,\n addMenuButton: bridge.addMenuButton,\n addMenuItem: bridge.addMenuItem,\n addNestedMenuItem: bridge.addNestedMenuItem,\n addSidebar: bridge.addSidebar,\n addSplitButton: bridge.addSplitButton,\n addToggleButton: bridge.addToggleButton,\n addGroupToolbarButton: bridge.addGroupToolbarButton,\n addToggleMenuItem: bridge.addToggleMenuItem,\n addView: bridge.addView,\n addContext: bridge.addContext,\n getAll: bridge.getAll\n };\n };\n\n const DOM$1 = DOMUtils.DOM;\n const extend = Tools.extend, each$1 = Tools.each;\n class Editor {\n constructor(id, options, editorManager) {\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.composing = false;\n this.destroyed = false;\n this.hasHiddenInput = false;\n this.iframeElement = null;\n this.initialized = false;\n this.readonly = false;\n this.removed = false;\n this.startContent = '';\n this._pendingNativeEvents = [];\n this._skinLoaded = false;\n this._editableRoot = true;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend(this, EditorObservable);\n const self = this;\n this.id = id;\n this.hidden = false;\n const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n this.options = create$5(self, normalizedOptions, options);\n register$7(self);\n const getOption = this.options.get;\n if (getOption('deprecation_warnings')) {\n logWarnings(options, normalizedOptions);\n }\n const suffix = getOption('suffix');\n if (suffix) {\n editorManager.suffix = suffix;\n }\n this.suffix = editorManager.suffix;\n const baseUrl = getOption('base_url');\n if (baseUrl) {\n editorManager._setBaseUrl(baseUrl);\n }\n this.baseUri = editorManager.baseURI;\n const referrerPolicy = getReferrerPolicy(self);\n if (referrerPolicy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n }\n const contentCssCors = hasContentCssCors(self);\n if (isNonNullable(contentCssCors)) {\n DOMUtils.DOM.styleSheetLoader._setContentCssCors(contentCssCors);\n }\n AddOnManager.languageLoad = getOption('language_load');\n AddOnManager.baseURL = editorManager.baseURL;\n this.setDirty(false);\n this.documentBaseURI = new URI(getDocumentBaseUrl(self), { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = isInline$1(self);\n this.hasVisual = isVisualAidsEnabled(self);\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n registerCommands(this);\n const cacheSuffix = getOption('cache_suffix');\n if (cacheSuffix) {\n Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n setEnabled: noop,\n isEnabled: always\n };\n this.mode = create$4(self);\n editorManager.dispatch('SetupEditor', { editor: this });\n const setupCallback = getSetupCallback(self);\n if (isFunction(setupCallback)) {\n setupCallback.call(self, self);\n }\n }\n render() {\n render(this);\n }\n focus(skipFocus) {\n this.execCommand('mceFocus', false, skipFocus);\n }\n hasFocus() {\n return hasFocus(this);\n }\n translate(text) {\n return I18n.translate(text);\n }\n getParam(name, defaultVal, type) {\n const options = this.options;\n if (!options.isRegistered(name)) {\n if (isNonNullable(type)) {\n options.register(name, {\n processor: type,\n default: defaultVal\n });\n } else {\n options.register(name, {\n processor: always,\n default: defaultVal\n });\n }\n }\n return !options.isSet(name) && !isUndefined(defaultVal) ? defaultVal : options.get(name);\n }\n hasPlugin(name, loaded) {\n const hasPlugin = contains$2(getPlugins(this), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n }\n nodeChanged(args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n }\n addCommand(name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n }\n addQueryStateHandler(name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n }\n addQueryValueHandler(name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n }\n addShortcut(pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n }\n execCommand(cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n }\n queryCommandState(cmd) {\n return this.editorCommands.queryCommandState(cmd);\n }\n queryCommandValue(cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n }\n queryCommandSupported(cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n }\n show() {\n const self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = 'true';\n } else {\n DOM$1.show(self.getContainer());\n DOM$1.hide(self.id);\n }\n self.load();\n self.dispatch('show');\n }\n }\n hide() {\n const self = this;\n if (!self.hidden) {\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = 'false';\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$1.hide(self.getContainer());\n DOM$1.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.dispatch('hide');\n }\n }\n isHidden() {\n return this.hidden;\n }\n setProgressState(state, time) {\n this.dispatch('ProgressState', {\n state,\n time\n });\n }\n load(args = {}) {\n const self = this;\n const elm = self.getElement();\n if (self.removed) {\n return '';\n }\n if (elm) {\n const loadArgs = {\n ...args,\n load: true\n };\n const value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n const html = self.setContent(value, loadArgs);\n if (!loadArgs.no_events) {\n self.dispatch('LoadContent', {\n ...loadArgs,\n element: elm\n });\n }\n return html;\n } else {\n return '';\n }\n }\n save(args = {}) {\n const self = this;\n let elm = self.getElement();\n if (!elm || !self.initialized || self.removed) {\n return '';\n }\n const getArgs = {\n ...args,\n save: true,\n element: elm\n };\n let html = self.getContent(getArgs);\n const saveArgs = {\n ...getArgs,\n content: html\n };\n if (!saveArgs.no_events) {\n self.dispatch('SaveContent', saveArgs);\n }\n if (saveArgs.format === 'raw') {\n self.dispatch('RawSaveContent', saveArgs);\n }\n html = saveArgs.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n const form = DOM$1.getParent(self.id, 'form');\n if (form) {\n each$1(form.elements, elm => {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n } else {\n return true;\n }\n });\n }\n } else {\n elm.value = html;\n }\n saveArgs.element = getArgs.element = elm = null;\n if (saveArgs.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n }\n setContent(content, args) {\n return setContent(this, content, args);\n }\n getContent(args) {\n return getContent(this, args);\n }\n insertContent(content, args) {\n if (args) {\n content = extend({ content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n }\n resetContent(initialContent) {\n if (initialContent === undefined) {\n setContent(this, this.startContent, { format: 'raw' });\n } else {\n setContent(this, initialContent);\n }\n this.undoManager.reset();\n this.setDirty(false);\n this.nodeChanged();\n }\n isDirty() {\n return !this.isNotDirty;\n }\n setDirty(state) {\n const oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.dispatch('dirty');\n }\n }\n getContainer() {\n const self = this;\n if (!self.container) {\n self.container = self.editorContainer || DOM$1.get(self.id + '_parent');\n }\n return self.container;\n }\n getContentAreaContainer() {\n return this.contentAreaContainer;\n }\n getElement() {\n if (!this.targetElm) {\n this.targetElm = DOM$1.get(this.id);\n }\n return this.targetElm;\n }\n getWin() {\n const self = this;\n if (!self.contentWindow) {\n const elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n }\n getDoc() {\n const self = this;\n if (!self.contentDocument) {\n const win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n }\n getBody() {\n var _a, _b;\n const doc = this.getDoc();\n return (_b = (_a = this.bodyElement) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.body) !== null && _b !== void 0 ? _b : null;\n }\n convertURL(url, name, elm) {\n const self = this, getOption = self.options.get;\n const urlConverterCallback = getUrlConverterCallback(self);\n if (isFunction(urlConverterCallback)) {\n return urlConverterCallback.call(self, url, elm, true, name);\n }\n if (!getOption('convert_urls') || elm === 'link' || isObject(elm) && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n const urlObject = new URI(url);\n if (urlObject.protocol !== 'http' && urlObject.protocol !== 'https' && urlObject.protocol !== '') {\n return url;\n }\n if (getOption('relative_urls')) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, getOption('remove_script_host'));\n return url;\n }\n addVisual(elm) {\n addVisual(this, elm);\n }\n setEditableRoot(state) {\n setEditableRoot(this, state);\n }\n hasEditableRoot() {\n return hasEditableRoot(this);\n }\n remove() {\n remove$1(this);\n }\n destroy(automatic) {\n destroy(this, automatic);\n }\n uploadImages() {\n return this.editorUpload.uploadImages();\n }\n _scanForImages() {\n return this.editorUpload.scanForImages();\n }\n }\n\n const DOM = DOMUtils.DOM;\n const each = Tools.each;\n let boundGlobalEvents = false;\n let beforeUnloadDelegate;\n let editors = [];\n const globalEventDelegate = e => {\n const type = e.type;\n each(EditorManager.get(), editor => {\n switch (type) {\n case 'scroll':\n editor.dispatch('ScrollWindow', e);\n break;\n case 'resize':\n editor.dispatch('ResizeWindow', e);\n break;\n }\n });\n };\n const toggleGlobalEvents = state => {\n if (state !== boundGlobalEvents) {\n const DOM = DOMUtils.DOM;\n if (state) {\n DOM.bind(window, 'resize', globalEventDelegate);\n DOM.bind(window, 'scroll', globalEventDelegate);\n } else {\n DOM.unbind(window, 'resize', globalEventDelegate);\n DOM.unbind(window, 'scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n const removeEditorFromList = targetEditor => {\n const oldEditors = editors;\n editors = filter$5(editors, editor => {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n const purgeDestroyedEditor = editor => {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n }\n };\n const isQuirksMode = document.compatMode !== 'CSS1Compat';\n const EditorManager = {\n ...Observable,\n baseURI: null,\n baseURL: null,\n defaultOptions: {},\n documentBaseURL: null,\n suffix: null,\n majorVersion: '7',\n minorVersion: '4.1',\n releaseDate: 'TBD',\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n setup() {\n const self = this;\n let baseURL = '';\n let suffix = '';\n let documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n const preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n const srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && document.currentScript) {\n const src = document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n setup$w(self);\n },\n overrideDefaults(defaultOptions) {\n const baseUrl = defaultOptions.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n const suffix = defaultOptions.suffix;\n if (suffix) {\n this.suffix = suffix;\n }\n this.defaultOptions = defaultOptions;\n const pluginBaseUrls = defaultOptions.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$d(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init(options) {\n const self = this;\n let result;\n const invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n const isInvalidInlineTarget = (options, elm) => options.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n const createId = elm => {\n let id = elm.id;\n if (!id) {\n id = get$a(elm, 'name').filter(name => !DOM.get(name)).getOrThunk(DOM.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n const execCallback = name => {\n const callback = options[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n const findTargets = options => {\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tiny.cloud/docs/tinymce/7/support/#supportedwebbrowsers');\n return [];\n } else if (isQuirksMode) {\n initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n return [];\n } else if (isString(options.selector)) {\n return DOM.select(options.selector);\n } else if (isNonNullable(options.target)) {\n return [options.target];\n } else {\n return [];\n }\n };\n let provideResults = editors => {\n result = editors;\n };\n const initEditors = () => {\n let initCount = 0;\n const editors = [];\n let targets;\n const createEditor = (id, options, targetElm) => {\n const editor = new Editor(id, options, self);\n editors.push(editor);\n editor.on('init', () => {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = unique$1(findTargets(options));\n Tools.each(targets, elm => {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, elm => {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each(targets, elm => {\n if (isInvalidInlineTarget(options, elm)) {\n initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), options, elm);\n }\n });\n }\n };\n DOM.bind(window, 'ready', initEditors);\n return new Promise(resolve => {\n if (result) {\n resolve(result);\n } else {\n provideResults = editors => {\n resolve(editors);\n };\n }\n });\n },\n get(id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find$2(editors, editor => {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add(editor) {\n const self = this;\n const existingEditor = self.get(editor.id);\n if (existingEditor === editor) {\n return editor;\n }\n if (existingEditor === null) {\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.dispatch('AddEditor', { editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = e => {\n const event = self.dispatch('BeforeUnload');\n if (event.returnValue) {\n e.preventDefault();\n e.returnValue = event.returnValue;\n return event.returnValue;\n }\n };\n window.addEventListener('beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor(id, options) {\n return this.add(new Editor(id, options, this));\n },\n remove(selector) {\n const self = this;\n let editor;\n if (!selector) {\n for (let i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each(DOM.select(selector), elm => {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.dispatch('RemoveEditor', { editor });\n }\n if (editors.length === 0) {\n window.removeEventListener('beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand(cmd, ui, value) {\n var _a;\n const self = this;\n const editorId = isObject(value) ? (_a = value.id) !== null && _a !== void 0 ? _a : value.index : value;\n switch (cmd) {\n case 'mceAddEditor': {\n if (!self.get(editorId)) {\n const editorOptions = value.options;\n new Editor(editorId, editorOptions, self).render();\n }\n return true;\n }\n case 'mceRemoveEditor': {\n const editor = self.get(editorId);\n if (editor) {\n editor.remove();\n }\n return true;\n }\n case 'mceToggleEditor': {\n const editor = self.get(editorId);\n if (!editor) {\n self.execCommand('mceAddEditor', false, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: () => {\n each(editors, editor => {\n editor.save();\n });\n },\n addI18n: (code, items) => {\n I18n.add(code, items);\n },\n translate: text => {\n return I18n.translate(text);\n },\n setActive(editor) {\n const activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.dispatch('deactivate', { relatedTarget: editor });\n }\n editor.dispatch('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl(baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n };\n EditorManager.setup();\n\n const setup = () => {\n const dataValue = value$2();\n const FakeClipboardItem = items => ({\n items,\n types: keys(items),\n getType: type => get$a(items, type).getOrUndefined()\n });\n const write = data => {\n dataValue.set(data);\n };\n const read = () => dataValue.get().getOrUndefined();\n const clear = dataValue.clear;\n return {\n FakeClipboardItem,\n write,\n read,\n clear\n };\n };\n const FakeClipboard = setup();\n\n const min = Math.min, max = Math.max, round = Math.round;\n const relativePosition = (rect, targetRect, rel) => {\n let x = targetRect.x;\n let y = targetRect.y;\n const w = rect.w;\n const h = rect.h;\n const targetW = targetRect.w;\n const targetH = targetRect.h;\n const relChars = (rel || '').split('');\n if (relChars[0] === 'b') {\n y += targetH;\n }\n if (relChars[1] === 'r') {\n x += targetW;\n }\n if (relChars[0] === 'c') {\n y += round(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round(targetW / 2);\n }\n if (relChars[3] === 'b') {\n y -= h;\n }\n if (relChars[4] === 'r') {\n x -= w;\n }\n if (relChars[3] === 'c') {\n y -= round(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round(w / 2);\n }\n return create$2(x, y, w, h);\n };\n const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n for (let i = 0; i < rels.length; i++) {\n const pos = relativePosition(rect, targetRect, rels[i]);\n if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n return rels[i];\n }\n }\n return null;\n };\n const inflate = (rect, w, h) => {\n return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n const intersect = (rect, cropRect) => {\n const x1 = max(rect.x, cropRect.x);\n const y1 = max(rect.y, cropRect.y);\n const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const clamp = (rect, clampRect, fixedSize) => {\n let x1 = rect.x;\n let y1 = rect.y;\n let x2 = rect.x + rect.w;\n let y2 = rect.y + rect.h;\n const cx2 = clampRect.x + clampRect.w;\n const cy2 = clampRect.y + clampRect.h;\n const underflowX1 = max(0, clampRect.x - x1);\n const underflowY1 = max(0, clampRect.y - y1);\n const overflowX2 = max(0, x2 - cx2);\n const overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const create$2 = (x, y, w, h) => {\n return {\n x,\n y,\n w,\n h\n };\n };\n const fromClientRect = clientRect => {\n return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n const Rect = {\n inflate,\n relativePosition,\n findBestRelativePosition,\n intersect,\n clamp,\n create: create$2,\n fromClientRect\n };\n\n const awaiter = (resolveCb, rejectCb, timeout = 1000) => {\n let done = false;\n let timer = null;\n const complete = completer => (...args) => {\n if (!done) {\n done = true;\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n completer.apply(null, args);\n }\n };\n const resolve = complete(resolveCb);\n const reject = complete(rejectCb);\n const start = (...args) => {\n if (!done && timer === null) {\n timer = setTimeout(() => reject.apply(null, args), timeout);\n }\n };\n return {\n start,\n resolve,\n reject\n };\n };\n const create$1 = () => {\n const tasks = {};\n const resultFns = {};\n const resources = {};\n const load = (id, url) => {\n const loadErrMsg = `Script at URL \"${ url }\" failed to load`;\n const runErrMsg = `Script at URL \"${ url }\" did not call \\`tinymce.Resource.add('${ id }', data)\\` within 1 second`;\n if (tasks[id] !== undefined) {\n return tasks[id];\n } else {\n const task = new Promise((resolve, reject) => {\n const waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n });\n tasks[id] = task;\n return task;\n }\n };\n const add = (id, data) => {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = Promise.resolve(data);\n resources[id] = data;\n };\n const has = id => {\n return id in resources;\n };\n const unload = id => {\n delete tasks[id];\n delete resources[id];\n };\n const get = id => resources[id];\n return {\n load,\n add,\n has,\n get,\n unload\n };\n };\n const Resource = create$1();\n\n const create = () => (() => {\n let data = {};\n let keys = [];\n const storage = {\n getItem: key => {\n const item = data[key];\n return item ? item : null;\n },\n setItem: (key, value) => {\n keys.push(key);\n data[key] = String(value);\n },\n key: index => {\n return keys[index];\n },\n removeItem: key => {\n keys = keys.filter(k => k === key);\n delete data[key];\n },\n clear: () => {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: () => keys.length,\n configurable: false,\n enumerable: false\n });\n return storage;\n })();\n\n let localStorage;\n try {\n const test = '__storage_test__';\n localStorage = window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (e) {\n localStorage = create();\n }\n var LocalStorage = localStorage;\n\n const publicApi = {\n geom: { Rect },\n util: {\n Delay,\n Tools,\n VK,\n URI,\n EventDispatcher,\n Observable,\n I18n,\n LocalStorage,\n ImageUploader\n },\n dom: {\n EventUtils,\n TreeWalker: DomTreeWalker,\n TextSeeker,\n DOMUtils,\n ScriptLoader,\n RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader,\n ControlSelection,\n BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles,\n Entities,\n Node: AstNode,\n Schema,\n DomParser,\n Writer,\n Serializer: HtmlSerializer\n },\n Env,\n AddOnManager,\n Annotator,\n Formatter,\n UndoManager,\n EditorCommands,\n WindowManager,\n NotificationManager,\n EditorObservable,\n Shortcuts,\n Editor,\n FocusManager,\n EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager,\n ThemeManager,\n ModelManager,\n IconManager,\n Resource,\n FakeClipboard,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n walk: Tools.walk,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix\n };\n const tinymce$1 = Tools.extend(EditorManager, publicApi);\n\n const exportToModuleLoaders = tinymce => {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n const exportToWindowGlobal = tinymce => {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce$1);\n exportToModuleLoaders(tinymce$1);\n\n})();\n","/**\n* Tom Select v2.3.1\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n*/\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TomSelect = factory());\n})(this, (function () { 'use strict';\n\n\t/**\n\t * MicroEvent - to make any js object an event emitter\n\t *\n\t * - pure javascript - server compatible, browser compatible\n\t * - dont rely on the browser doms\n\t * - super simple - you get it immediatly, no mistery, no magic involved\n\t *\n\t * @author Jerome Etienne (https://github.com/jeromeetienne)\n\t */\n\n\t/**\n\t * Execute callback for each event in space separated list of event names\n\t *\n\t */\n\tfunction forEvents(events, callback) {\n\t events.split(/\\s+/).forEach(event => {\n\t callback(event);\n\t });\n\t}\n\tclass MicroEvent {\n\t constructor() {\n\t this._events = void 0;\n\t this._events = {};\n\t }\n\t on(events, fct) {\n\t forEvents(events, event => {\n\t const event_array = this._events[event] || [];\n\t event_array.push(fct);\n\t this._events[event] = event_array;\n\t });\n\t }\n\t off(events, fct) {\n\t var n = arguments.length;\n\t if (n === 0) {\n\t this._events = {};\n\t return;\n\t }\n\t forEvents(events, event => {\n\t if (n === 1) {\n\t delete this._events[event];\n\t return;\n\t }\n\t const event_array = this._events[event];\n\t if (event_array === undefined) return;\n\t event_array.splice(event_array.indexOf(fct), 1);\n\t this._events[event] = event_array;\n\t });\n\t }\n\t trigger(events, ...args) {\n\t var self = this;\n\t forEvents(events, event => {\n\t const event_array = self._events[event];\n\t if (event_array === undefined) return;\n\t event_array.forEach(fct => {\n\t fct.apply(self, args);\n\t });\n\t });\n\t }\n\t}\n\n\t/**\n\t * microplugin.js\n\t * Copyright (c) 2013 Brian Reavis & contributors\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n\t * file except in compliance with the License. You may obtain a copy of the License at:\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software distributed under\n\t * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n\t * ANY KIND, either express or implied. See the License for the specific language\n\t * governing permissions and limitations under the License.\n\t *\n\t * @author Brian Reavis \n\t */\n\n\tfunction MicroPlugin(Interface) {\n\t Interface.plugins = {};\n\t return class extends Interface {\n\t constructor(...args) {\n\t super(...args);\n\t this.plugins = {\n\t names: [],\n\t settings: {},\n\t requested: {},\n\t loaded: {}\n\t };\n\t }\n\t /**\n\t * Registers a plugin.\n\t *\n\t * @param {function} fn\n\t */\n\t static define(name, fn) {\n\t Interface.plugins[name] = {\n\t 'name': name,\n\t 'fn': fn\n\t };\n\t }\n\n\t /**\n\t * Initializes the listed plugins (with options).\n\t * Acceptable formats:\n\t *\n\t * List (without options):\n\t * ['a', 'b', 'c']\n\t *\n\t * List (with options):\n\t * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t *\n\t * Hash (with options):\n\t * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t *\n\t * @param {array|object} plugins\n\t */\n\t initializePlugins(plugins) {\n\t var key, name;\n\t const self = this;\n\t const queue = [];\n\t if (Array.isArray(plugins)) {\n\t plugins.forEach(plugin => {\n\t if (typeof plugin === 'string') {\n\t queue.push(plugin);\n\t } else {\n\t self.plugins.settings[plugin.name] = plugin.options;\n\t queue.push(plugin.name);\n\t }\n\t });\n\t } else if (plugins) {\n\t for (key in plugins) {\n\t if (plugins.hasOwnProperty(key)) {\n\t self.plugins.settings[key] = plugins[key];\n\t queue.push(key);\n\t }\n\t }\n\t }\n\t while (name = queue.shift()) {\n\t self.require(name);\n\t }\n\t }\n\t loadPlugin(name) {\n\t var self = this;\n\t var plugins = self.plugins;\n\t var plugin = Interface.plugins[name];\n\t if (!Interface.plugins.hasOwnProperty(name)) {\n\t throw new Error('Unable to find \"' + name + '\" plugin');\n\t }\n\t plugins.requested[name] = true;\n\t plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t plugins.names.push(name);\n\t }\n\n\t /**\n\t * Initializes a plugin.\n\t *\n\t */\n\t require(name) {\n\t var self = this;\n\t var plugins = self.plugins;\n\t if (!self.plugins.loaded.hasOwnProperty(name)) {\n\t if (plugins.requested[name]) {\n\t throw new Error('Plugin has circular dependency (\"' + name + '\")');\n\t }\n\t self.loadPlugin(name);\n\t }\n\t return plugins.loaded[name];\n\t }\n\t };\n\t}\n\n\t/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\t/**\n\t * Convert array of strings to a regular expression\n\t *\tex ['ab','a'] => (?:ab|a)\n\t * \tex ['a','b'] => [ab]\n\t * @param {string[]} chars\n\t * @return {string}\n\t */\n\tconst arrayToPattern = chars => {\n\t chars = chars.filter(Boolean);\n\n\t if (chars.length < 2) {\n\t return chars[0] || '';\n\t }\n\n\t return maxValueLength(chars) == 1 ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n\t};\n\t/**\n\t * @param {string[]} array\n\t * @return {string}\n\t */\n\n\tconst sequencePattern = array => {\n\t if (!hasDuplicates(array)) {\n\t return array.join('');\n\t }\n\n\t let pattern = '';\n\t let prev_char_count = 0;\n\n\t const prev_pattern = () => {\n\t if (prev_char_count > 1) {\n\t pattern += '{' + prev_char_count + '}';\n\t }\n\t };\n\n\t array.forEach((char, i) => {\n\t if (char === array[i - 1]) {\n\t prev_char_count++;\n\t return;\n\t }\n\n\t prev_pattern();\n\t pattern += char;\n\t prev_char_count = 1;\n\t });\n\t prev_pattern();\n\t return pattern;\n\t};\n\t/**\n\t * Convert array of strings to a regular expression\n\t *\tex ['ab','a'] => (?:ab|a)\n\t * \tex ['a','b'] => [ab]\n\t * @param {Set} chars\n\t * @return {string}\n\t */\n\n\tconst setToPattern = chars => {\n\t let array = toArray(chars);\n\t return arrayToPattern(array);\n\t};\n\t/**\n\t *\n\t * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n\t * @param {any[]} array\n\t */\n\n\tconst hasDuplicates = array => {\n\t return new Set(array).size !== array.length;\n\t};\n\t/**\n\t * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n\t * @param {string} str\n\t * @return {string}\n\t */\n\n\tconst escape_regex = str => {\n\t return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n\t};\n\t/**\n\t * Return the max length of array values\n\t * @param {string[]} array\n\t *\n\t */\n\n\tconst maxValueLength = array => {\n\t return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n\t};\n\t/**\n\t * @param {string} str\n\t */\n\n\tconst unicodeLength = str => {\n\t return toArray(str).length;\n\t};\n\t/**\n\t * @param {any} p\n\t * @return {any[]}\n\t */\n\n\tconst toArray = p => Array.from(p);\n\n\t/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\t/**\n\t * Get all possible combinations of substrings that add up to the given string\n\t * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n\t * @param {string} input\n\t * @return {string[][]}\n\t */\n\tconst allSubstrings = input => {\n\t if (input.length === 1) return [[input]];\n\t /** @type {string[][]} */\n\n\t let result = [];\n\t const start = input.substring(1);\n\t const suba = allSubstrings(start);\n\t suba.forEach(function (subresult) {\n\t let tmp = subresult.slice(0);\n\t tmp[0] = input.charAt(0) + tmp[0];\n\t result.push(tmp);\n\t tmp = subresult.slice(0);\n\t tmp.unshift(input.charAt(0));\n\t result.push(tmp);\n\t });\n\t return result;\n\t};\n\n\t/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\n\t/**\n\t * @typedef {{[key:string]:string}} TUnicodeMap\n\t * @typedef {{[key:string]:Set}} TUnicodeSets\n\t * @typedef {[[number,number]]} TCodePoints\n\t * @typedef {{folded:string,composed:string,code_point:number}} TCodePointObj\n\t * @typedef {{start:number,end:number,length:number,substr:string}} TSequencePart\n\t */\n\t/** @type {TCodePoints} */\n\n\tconst code_points = [[0, 65535]];\n\tconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\n\t/** @type {TUnicodeMap} */\n\n\tlet unicode_map;\n\t/** @type {RegExp} */\n\n\tlet multi_char_reg;\n\tconst max_char_length = 3;\n\t/** @type {TUnicodeMap} */\n\n\tconst latin_convert = {};\n\t/** @type {TUnicodeMap} */\n\n\tconst latin_condensed = {\n\t '/': '⁄∕',\n\t '0': '߀',\n\t \"a\": \"ⱥɐɑ\",\n\t \"aa\": \"ꜳ\",\n\t \"ae\": \"æǽǣ\",\n\t \"ao\": \"ꜵ\",\n\t \"au\": \"ꜷ\",\n\t \"av\": \"ꜹꜻ\",\n\t \"ay\": \"ꜽ\",\n\t \"b\": \"ƀɓƃ\",\n\t \"c\": \"ꜿƈȼↄ\",\n\t \"d\": \"đɗɖᴅƌꮷԁɦ\",\n\t \"e\": \"ɛǝᴇɇ\",\n\t \"f\": \"ꝼƒ\",\n\t \"g\": \"ǥɠꞡᵹꝿɢ\",\n\t \"h\": \"ħⱨⱶɥ\",\n\t \"i\": \"ɨı\",\n\t \"j\": \"ɉȷ\",\n\t \"k\": \"ƙⱪꝁꝃꝅꞣ\",\n\t \"l\": \"łƚɫⱡꝉꝇꞁɭ\",\n\t \"m\": \"ɱɯϻ\",\n\t \"n\": \"ꞥƞɲꞑᴎлԉ\",\n\t \"o\": \"øǿɔɵꝋꝍᴑ\",\n\t \"oe\": \"œ\",\n\t \"oi\": \"ƣ\",\n\t \"oo\": \"ꝏ\",\n\t \"ou\": \"ȣ\",\n\t \"p\": \"ƥᵽꝑꝓꝕρ\",\n\t \"q\": \"ꝗꝙɋ\",\n\t \"r\": \"ɍɽꝛꞧꞃ\",\n\t \"s\": \"ßȿꞩꞅʂ\",\n\t \"t\": \"ŧƭʈⱦꞇ\",\n\t \"th\": \"þ\",\n\t \"tz\": \"ꜩ\",\n\t \"u\": \"ʉ\",\n\t \"v\": \"ʋꝟʌ\",\n\t \"vy\": \"ꝡ\",\n\t \"w\": \"ⱳ\",\n\t \"y\": \"ƴɏỿ\",\n\t \"z\": \"ƶȥɀⱬꝣ\",\n\t \"hv\": \"ƕ\"\n\t};\n\n\tfor (let latin in latin_condensed) {\n\t let unicode = latin_condensed[latin] || '';\n\n\t for (let i = 0; i < unicode.length; i++) {\n\t let char = unicode.substring(i, i + 1);\n\t latin_convert[char] = latin;\n\t }\n\t}\n\n\tconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n\t/**\n\t * Initialize the unicode_map from the give code point ranges\n\t *\n\t * @param {TCodePoints=} _code_points\n\t */\n\n\tconst initialize = _code_points => {\n\t if (unicode_map !== undefined) return;\n\t unicode_map = generateMap(_code_points || code_points);\n\t};\n\t/**\n\t * Helper method for normalize a string\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n\t * @param {string} str\n\t * @param {string} form\n\t */\n\n\tconst normalize = (str, form = 'NFKD') => str.normalize(form);\n\t/**\n\t * Remove accents without reordering string\n\t * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n\t * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n\t * @param {string} str\n\t * @return {string}\n\t */\n\n\tconst asciifold = str => {\n\t return toArray(str).reduce(\n\t /**\n\t * @param {string} result\n\t * @param {string} char\n\t */\n\t (result, char) => {\n\t return result + _asciifold(char);\n\t }, '');\n\t};\n\t/**\n\t * @param {string} str\n\t * @return {string}\n\t */\n\n\tconst _asciifold = str => {\n\t str = normalize(str).toLowerCase().replace(convert_pat, (\n\t /** @type {string} */\n\t char) => {\n\t return latin_convert[char] || '';\n\t }); //return str;\n\n\t return normalize(str, 'NFC');\n\t};\n\t/**\n\t * Generate a list of unicode variants from the list of code points\n\t * @param {TCodePoints} code_points\n\t * @yield {TCodePointObj}\n\t */\n\n\tfunction* generator(code_points) {\n\t for (const [code_point_min, code_point_max] of code_points) {\n\t for (let i = code_point_min; i <= code_point_max; i++) {\n\t let composed = String.fromCharCode(i);\n\t let folded = asciifold(composed);\n\n\t if (folded == composed.toLowerCase()) {\n\t continue;\n\t } // skip when folded is a string longer than 3 characters long\n\t // bc the resulting regex patterns will be long\n\t // eg:\n\t // folded صلى الله عليه وسلم length 18 code point 65018\n\t // folded جل جلاله length 8 code point 65019\n\n\n\t if (folded.length > max_char_length) {\n\t continue;\n\t }\n\n\t if (folded.length == 0) {\n\t continue;\n\t }\n\n\t yield {\n\t folded: folded,\n\t composed: composed,\n\t code_point: i\n\t };\n\t }\n\t }\n\t}\n\t/**\n\t * Generate a unicode map from the list of code points\n\t * @param {TCodePoints} code_points\n\t * @return {TUnicodeSets}\n\t */\n\n\tconst generateSets = code_points => {\n\t /** @type {{[key:string]:Set}} */\n\t const unicode_sets = {};\n\t /**\n\t * @param {string} folded\n\t * @param {string} to_add\n\t */\n\n\t const addMatching = (folded, to_add) => {\n\t /** @type {Set} */\n\t const folded_set = unicode_sets[folded] || new Set();\n\t const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n\n\t if (to_add.match(patt)) {\n\t return;\n\t }\n\n\t folded_set.add(escape_regex(to_add));\n\t unicode_sets[folded] = folded_set;\n\t };\n\n\t for (let value of generator(code_points)) {\n\t addMatching(value.folded, value.folded);\n\t addMatching(value.folded, value.composed);\n\t }\n\n\t return unicode_sets;\n\t};\n\t/**\n\t * Generate a unicode map from the list of code points\n\t * ae => (?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n\t *\n\t * @param {TCodePoints} code_points\n\t * @return {TUnicodeMap}\n\t */\n\n\tconst generateMap = code_points => {\n\t /** @type {TUnicodeSets} */\n\t const unicode_sets = generateSets(code_points);\n\t /** @type {TUnicodeMap} */\n\n\t const unicode_map = {};\n\t /** @type {string[]} */\n\n\t let multi_char = [];\n\n\t for (let folded in unicode_sets) {\n\t let set = unicode_sets[folded];\n\n\t if (set) {\n\t unicode_map[folded] = setToPattern(set);\n\t }\n\n\t if (folded.length > 1) {\n\t multi_char.push(escape_regex(folded));\n\t }\n\t }\n\n\t multi_char.sort((a, b) => b.length - a.length);\n\t const multi_char_patt = arrayToPattern(multi_char);\n\t multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n\t return unicode_map;\n\t};\n\t/**\n\t * Map each element of an array from it's folded value to all possible unicode matches\n\t * @param {string[]} strings\n\t * @param {number} min_replacement\n\t * @return {string}\n\t */\n\n\tconst mapSequence = (strings, min_replacement = 1) => {\n\t let chars_replaced = 0;\n\t strings = strings.map(str => {\n\t if (unicode_map[str]) {\n\t chars_replaced += str.length;\n\t }\n\n\t return unicode_map[str] || str;\n\t });\n\n\t if (chars_replaced >= min_replacement) {\n\t return sequencePattern(strings);\n\t }\n\n\t return '';\n\t};\n\t/**\n\t * Convert a short string and split it into all possible patterns\n\t * Keep a pattern only if min_replacement is met\n\t *\n\t * 'abc'\n\t * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n\t *\t\t=> ['abc-pattern','ab-c-pattern'...]\n\t *\n\t *\n\t * @param {string} str\n\t * @param {number} min_replacement\n\t * @return {string}\n\t */\n\n\tconst substringsToPattern = (str, min_replacement = 1) => {\n\t min_replacement = Math.max(min_replacement, str.length - 1);\n\t return arrayToPattern(allSubstrings(str).map(sub_pat => {\n\t return mapSequence(sub_pat, min_replacement);\n\t }));\n\t};\n\t/**\n\t * Convert an array of sequences into a pattern\n\t * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n\t *\n\t * @param {Sequence[]} sequences\n\t * @param {boolean} all\n\t */\n\n\tconst sequencesToPattern = (sequences, all = true) => {\n\t let min_replacement = sequences.length > 1 ? 1 : 0;\n\t return arrayToPattern(sequences.map(sequence => {\n\t let seq = [];\n\t const len = all ? sequence.length() : sequence.length() - 1;\n\n\t for (let j = 0; j < len; j++) {\n\t seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n\t }\n\n\t return sequencePattern(seq);\n\t }));\n\t};\n\t/**\n\t * Return true if the sequence is already in the sequences\n\t * @param {Sequence} needle_seq\n\t * @param {Sequence[]} sequences\n\t */\n\n\n\tconst inSequences = (needle_seq, sequences) => {\n\t for (const seq of sequences) {\n\t if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n\t continue;\n\t }\n\n\t if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n\t continue;\n\t }\n\n\t let needle_parts = needle_seq.parts;\n\t /**\n\t * @param {TSequencePart} part\n\t */\n\n\t const filter = part => {\n\t for (const needle_part of needle_parts) {\n\t if (needle_part.start === part.start && needle_part.substr === part.substr) {\n\t return false;\n\t }\n\n\t if (part.length == 1 || needle_part.length == 1) {\n\t continue;\n\t } // check for overlapping parts\n\t // a = ['::=','==']\n\t // b = ['::','===']\n\t // a = ['r','sm']\n\t // b = ['rs','m']\n\n\n\t if (part.start < needle_part.start && part.end > needle_part.start) {\n\t return true;\n\t }\n\n\t if (needle_part.start < part.start && needle_part.end > part.start) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t };\n\n\t let filtered = seq.parts.filter(filter);\n\n\t if (filtered.length > 0) {\n\t continue;\n\t }\n\n\t return true;\n\t }\n\n\t return false;\n\t};\n\n\tclass Sequence {\n\t constructor() {\n\t /** @type {TSequencePart[]} */\n\t this.parts = [];\n\t /** @type {string[]} */\n\n\t this.substrs = [];\n\t this.start = 0;\n\t this.end = 0;\n\t }\n\t /**\n\t * @param {TSequencePart|undefined} part\n\t */\n\n\n\t add(part) {\n\t if (part) {\n\t this.parts.push(part);\n\t this.substrs.push(part.substr);\n\t this.start = Math.min(part.start, this.start);\n\t this.end = Math.max(part.end, this.end);\n\t }\n\t }\n\n\t last() {\n\t return this.parts[this.parts.length - 1];\n\t }\n\n\t length() {\n\t return this.parts.length;\n\t }\n\t /**\n\t * @param {number} position\n\t * @param {TSequencePart} last_piece\n\t */\n\n\n\t clone(position, last_piece) {\n\t let clone = new Sequence();\n\t let parts = JSON.parse(JSON.stringify(this.parts));\n\t let last_part = parts.pop();\n\n\t for (const part of parts) {\n\t clone.add(part);\n\t }\n\n\t let last_substr = last_piece.substr.substring(0, position - last_part.start);\n\t let clone_last_len = last_substr.length;\n\t clone.add({\n\t start: last_part.start,\n\t end: last_part.start + clone_last_len,\n\t length: clone_last_len,\n\t substr: last_substr\n\t });\n\t return clone;\n\t }\n\n\t}\n\t/**\n\t * Expand a regular expression pattern to include unicode variants\n\t * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n\t *\n\t * Issue:\n\t * ﺊﺋ [ 'ﺊ = \\\\u{fe8a}', 'ﺋ = \\\\u{fe8b}' ]\n\t *\tbecomes:\tئئ [ 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}', 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}' ]\n\t *\n\t *\tİIJ = IIJ = ⅡJ\n\t *\n\t * \t1/2/4\n\t *\n\t * @param {string} str\n\t * @return {string|undefined}\n\t */\n\n\n\tconst getPattern = str => {\n\t initialize();\n\t str = asciifold(str);\n\t let pattern = '';\n\t let sequences = [new Sequence()];\n\n\t for (let i = 0; i < str.length; i++) {\n\t let substr = str.substring(i);\n\t let match = substr.match(multi_char_reg);\n\t const char = str.substring(i, i + 1);\n\t const match_str = match ? match[0] : null; // loop through sequences\n\t // add either the char or multi_match\n\n\t let overlapping = [];\n\t let added_types = new Set();\n\n\t for (const sequence of sequences) {\n\t const last_piece = sequence.last();\n\n\t if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n\t // if we have a multi match\n\t if (match_str) {\n\t const len = match_str.length;\n\t sequence.add({\n\t start: i,\n\t end: i + len,\n\t length: len,\n\t substr: match_str\n\t });\n\t added_types.add('1');\n\t } else {\n\t sequence.add({\n\t start: i,\n\t end: i + 1,\n\t length: 1,\n\t substr: char\n\t });\n\t added_types.add('2');\n\t }\n\t } else if (match_str) {\n\t let clone = sequence.clone(i, last_piece);\n\t const len = match_str.length;\n\t clone.add({\n\t start: i,\n\t end: i + len,\n\t length: len,\n\t substr: match_str\n\t });\n\t overlapping.push(clone);\n\t } else {\n\t // don't add char\n\t // adding would create invalid patterns: 234 => [2,34,4]\n\t added_types.add('3');\n\t }\n\t } // if we have overlapping\n\n\n\t if (overlapping.length > 0) {\n\t // ['ii','iii'] before ['i','i','iii']\n\t overlapping = overlapping.sort((a, b) => {\n\t return a.length() - b.length();\n\t });\n\n\t for (let clone of overlapping) {\n\t // don't add if we already have an equivalent sequence\n\t if (inSequences(clone, sequences)) {\n\t continue;\n\t }\n\n\t sequences.push(clone);\n\t }\n\n\t continue;\n\t } // if we haven't done anything unique\n\t // clean up the patterns\n\t // helps keep patterns smaller\n\t // if str = 'r₨㎧aarss', pattern will be 446 instead of 655\n\n\n\t if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n\t pattern += sequencesToPattern(sequences, false);\n\t let new_seq = new Sequence();\n\t const old_seq = sequences[0];\n\n\t if (old_seq) {\n\t new_seq.add(old_seq.last());\n\t }\n\n\t sequences = [new_seq];\n\t }\n\t }\n\n\t pattern += sequencesToPattern(sequences, true);\n\t return pattern;\n\t};\n\n\t/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\n\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param {Object} obj The root object to fetch property on\n\t * @param {String} name The optionally dotted property name to fetch\n\t * @return {Object} The resolved property value\n\t */\n\tconst getAttr = (obj, name) => {\n\t if (!obj) return;\n\t return obj[name];\n\t};\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param {Object} obj The root object to fetch property on\n\t * @param {String} name The optionally dotted property name to fetch\n\t * @return {Object} The resolved property value\n\t */\n\n\tconst getAttrNesting = (obj, name) => {\n\t if (!obj) return;\n\t var part,\n\t names = name.split(\".\");\n\n\t while ((part = names.shift()) && (obj = obj[part]));\n\n\t return obj;\n\t};\n\t/**\n\t * Calculates how close of a match the\n\t * given value is against a search token.\n\t *\n\t */\n\n\tconst scoreValue = (value, token, weight) => {\n\t var score, pos;\n\t if (!value) return 0;\n\t value = value + '';\n\t if (token.regex == null) return 0;\n\t pos = value.search(token.regex);\n\t if (pos === -1) return 0;\n\t score = token.string.length / value.length;\n\t if (pos === 0) score += 0.5;\n\t return score * weight;\n\t};\n\t/**\n\t * Cast object property to an array if it exists and has a value\n\t *\n\t */\n\n\tconst propToArray = (obj, key) => {\n\t var value = obj[key];\n\t if (typeof value == 'function') return value;\n\n\t if (value && !Array.isArray(value)) {\n\t obj[key] = [value];\n\t }\n\t};\n\t/**\n\t * Iterates over arrays and hashes.\n\t *\n\t * ```\n\t * iterate(this.items, function(item, id) {\n\t * // invoked for each item\n\t * });\n\t * ```\n\t *\n\t */\n\n\tconst iterate$1 = (object, callback) => {\n\t if (Array.isArray(object)) {\n\t object.forEach(callback);\n\t } else {\n\t for (var key in object) {\n\t if (object.hasOwnProperty(key)) {\n\t callback(object[key], key);\n\t }\n\t }\n\t }\n\t};\n\tconst cmp = (a, b) => {\n\t if (typeof a === 'number' && typeof b === 'number') {\n\t return a > b ? 1 : a < b ? -1 : 0;\n\t }\n\n\t a = asciifold(a + '').toLowerCase();\n\t b = asciifold(b + '').toLowerCase();\n\t if (a > b) return 1;\n\t if (b > a) return -1;\n\t return 0;\n\t};\n\n\t/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\n\n\t/**\n\t * sifter.js\n\t * Copyright (c) 2013–2020 Brian Reavis & contributors\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n\t * file except in compliance with the License. You may obtain a copy of the License at:\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software distributed under\n\t * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n\t * ANY KIND, either express or implied. See the License for the specific language\n\t * governing permissions and limitations under the License.\n\t *\n\t * @author Brian Reavis \n\t */\n\n\tclass Sifter {\n\t // []|{};\n\n\t /**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t */\n\t constructor(items, settings) {\n\t this.items = void 0;\n\t this.settings = void 0;\n\t this.items = items;\n\t this.settings = settings || {\n\t diacritics: true\n\t };\n\t }\n\n\t /**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t */\n\t tokenize(query, respect_word_boundaries, weights) {\n\t if (!query || !query.length) return [];\n\t const tokens = [];\n\t const words = query.split(/\\s+/);\n\t var field_regex;\n\n\t if (weights) {\n\t field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n\t }\n\n\t words.forEach(word => {\n\t let field_match;\n\t let field = null;\n\t let regex = null; // look for \"field:query\" tokens\n\n\t if (field_regex && (field_match = word.match(field_regex))) {\n\t field = field_match[1];\n\t word = field_match[2];\n\t }\n\n\t if (word.length > 0) {\n\t if (this.settings.diacritics) {\n\t regex = getPattern(word) || null;\n\t } else {\n\t regex = escape_regex(word);\n\t }\n\n\t if (regex && respect_word_boundaries) regex = \"\\\\b\" + regex;\n\t }\n\n\t tokens.push({\n\t string: word,\n\t regex: regex ? new RegExp(regex, 'iu') : null,\n\t field: field\n\t });\n\t });\n\t return tokens;\n\t }\n\n\t /**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @returns {T.ScoreFn}\n\t */\n\t getScoreFunction(query, options) {\n\t var search = this.prepareSearch(query, options);\n\t return this._getScoreFunction(search);\n\t }\n\t /**\n\t * @returns {T.ScoreFn}\n\t *\n\t */\n\n\n\t _getScoreFunction(search) {\n\t const tokens = search.tokens,\n\t token_count = tokens.length;\n\n\t if (!token_count) {\n\t return function () {\n\t return 0;\n\t };\n\t }\n\n\t const fields = search.options.fields,\n\t weights = search.weights,\n\t field_count = fields.length,\n\t getAttrFn = search.getAttrFn;\n\n\t if (!field_count) {\n\t return function () {\n\t return 1;\n\t };\n\t }\n\t /**\n\t * Calculates the score of an object\n\t * against the search query.\n\t *\n\t */\n\n\n\t const scoreObject = function () {\n\t if (field_count === 1) {\n\t return function (token, data) {\n\t const field = fields[0].field;\n\t return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n\t };\n\t }\n\n\t return function (token, data) {\n\t var sum = 0; // is the token specific to a field?\n\n\t if (token.field) {\n\t const value = getAttrFn(data, token.field);\n\n\t if (!token.regex && value) {\n\t sum += 1 / field_count;\n\t } else {\n\t sum += scoreValue(value, token, 1);\n\t }\n\t } else {\n\t iterate$1(weights, (weight, field) => {\n\t sum += scoreValue(getAttrFn(data, field), token, weight);\n\t });\n\t }\n\n\t return sum / field_count;\n\t };\n\t }();\n\n\t if (token_count === 1) {\n\t return function (data) {\n\t return scoreObject(tokens[0], data);\n\t };\n\t }\n\n\t if (search.options.conjunction === 'and') {\n\t return function (data) {\n\t var score,\n\t sum = 0;\n\n\t for (let token of tokens) {\n\t score = scoreObject(token, data);\n\t if (score <= 0) return 0;\n\t sum += score;\n\t }\n\n\t return sum / token_count;\n\t };\n\t } else {\n\t return function (data) {\n\t var sum = 0;\n\t iterate$1(tokens, token => {\n\t sum += scoreObject(token, data);\n\t });\n\t return sum / token_count;\n\t };\n\t }\n\t }\n\n\t /**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @return function(a,b)\n\t */\n\t getSortFunction(query, options) {\n\t var search = this.prepareSearch(query, options);\n\t return this._getSortFunction(search);\n\t }\n\n\t _getSortFunction(search) {\n\t var implicit_score,\n\t sort_flds = [];\n\t const self = this,\n\t options = search.options,\n\t sort = !search.query && options.sort_empty ? options.sort_empty : options.sort;\n\n\t if (typeof sort == 'function') {\n\t return sort.bind(this);\n\t }\n\t /**\n\t * Fetches the specified sort field value\n\t * from a search result item.\n\t *\n\t */\n\n\n\t const get_field = function get_field(name, result) {\n\t if (name === '$score') return result.score;\n\t return search.getAttrFn(self.items[result.id], name);\n\t }; // parse options\n\n\n\t if (sort) {\n\t for (let s of sort) {\n\t if (search.query || s.field !== '$score') {\n\t sort_flds.push(s);\n\t }\n\t }\n\t } // the \"$score\" field is implied to be the primary\n\t // sort field, unless it's manually specified\n\n\n\t if (search.query) {\n\t implicit_score = true;\n\n\t for (let fld of sort_flds) {\n\t if (fld.field === '$score') {\n\t implicit_score = false;\n\t break;\n\t }\n\t }\n\n\t if (implicit_score) {\n\t sort_flds.unshift({\n\t field: '$score',\n\t direction: 'desc'\n\t });\n\t } // without a search.query, all items will have the same score\n\n\t } else {\n\t sort_flds = sort_flds.filter(fld => fld.field !== '$score');\n\t } // build function\n\n\n\t const sort_flds_count = sort_flds.length;\n\n\t if (!sort_flds_count) {\n\t return null;\n\t }\n\n\t return function (a, b) {\n\t var result, field;\n\n\t for (let sort_fld of sort_flds) {\n\t field = sort_fld.field;\n\t let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n\t result = multiplier * cmp(get_field(field, a), get_field(field, b));\n\t if (result) return result;\n\t }\n\n\t return 0;\n\t };\n\t }\n\n\t /**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t */\n\t prepareSearch(query, optsUser) {\n\t const weights = {};\n\t var options = Object.assign({}, optsUser);\n\t propToArray(options, 'sort');\n\t propToArray(options, 'sort_empty'); // convert fields to new format\n\n\t if (options.fields) {\n\t propToArray(options, 'fields');\n\t const fields = [];\n\t options.fields.forEach(field => {\n\t if (typeof field == 'string') {\n\t field = {\n\t field: field,\n\t weight: 1\n\t };\n\t }\n\n\t fields.push(field);\n\t weights[field.field] = 'weight' in field ? field.weight : 1;\n\t });\n\t options.fields = fields;\n\t }\n\n\t return {\n\t options: options,\n\t query: query.toLowerCase().trim(),\n\t tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n\t total: 0,\n\t items: [],\n\t weights: weights,\n\t getAttrFn: options.nesting ? getAttrNesting : getAttr\n\t };\n\t }\n\n\t /**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t */\n\t search(query, options) {\n\t var self = this,\n\t score,\n\t search;\n\t search = this.prepareSearch(query, options);\n\t options = search.options;\n\t query = search.query; // generate result scoring function\n\n\t const fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n\t if (query.length) {\n\t iterate$1(self.items, (item, id) => {\n\t score = fn_score(item);\n\n\t if (options.filter === false || score > 0) {\n\t search.items.push({\n\t 'score': score,\n\t 'id': id\n\t });\n\t }\n\t });\n\t } else {\n\t iterate$1(self.items, (_, id) => {\n\t search.items.push({\n\t 'score': 1,\n\t 'id': id\n\t });\n\t });\n\t }\n\n\t const fn_sort = self._getSortFunction(search);\n\n\t if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n\t search.total = search.items.length;\n\n\t if (typeof options.limit === 'number') {\n\t search.items = search.items.slice(0, options.limit);\n\t }\n\n\t return search;\n\t }\n\n\t}\n\n\t/**\n\t * Iterates over arrays and hashes.\n\t *\n\t * ```\n\t * iterate(this.items, function(item, id) {\n\t * // invoked for each item\n\t * });\n\t * ```\n\t *\n\t */\n\tconst iterate = (object, callback) => {\n\t if (Array.isArray(object)) {\n\t object.forEach(callback);\n\t } else {\n\t for (var key in object) {\n\t if (object.hasOwnProperty(key)) {\n\t callback(object[key], key);\n\t }\n\t }\n\t }\n\t};\n\n\t/**\n\t * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n\t * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n\t *\n\t * param query should be {}\n\t */\n\tconst getDom = query => {\n\t if (query.jquery) {\n\t return query[0];\n\t }\n\t if (query instanceof HTMLElement) {\n\t return query;\n\t }\n\t if (isHtmlString(query)) {\n\t var tpl = document.createElement('template');\n\t tpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t return tpl.content.firstChild;\n\t }\n\t return document.querySelector(query);\n\t};\n\tconst isHtmlString = arg => {\n\t if (typeof arg === 'string' && arg.indexOf('<') > -1) {\n\t return true;\n\t }\n\t return false;\n\t};\n\tconst escapeQuery = query => {\n\t return query.replace(/['\"\\\\]/g, '\\\\$&');\n\t};\n\n\t/**\n\t * Dispatch an event\n\t *\n\t */\n\tconst triggerEvent = (dom_el, event_name) => {\n\t var event = document.createEvent('HTMLEvents');\n\t event.initEvent(event_name, true, false);\n\t dom_el.dispatchEvent(event);\n\t};\n\n\t/**\n\t * Apply CSS rules to a dom element\n\t *\n\t */\n\tconst applyCSS = (dom_el, css) => {\n\t Object.assign(dom_el.style, css);\n\t};\n\n\t/**\n\t * Add css classes\n\t *\n\t */\n\tconst addClasses = (elmts, ...classes) => {\n\t var norm_classes = classesArray(classes);\n\t elmts = castAsArray(elmts);\n\t elmts.map(el => {\n\t norm_classes.map(cls => {\n\t el.classList.add(cls);\n\t });\n\t });\n\t};\n\n\t/**\n\t * Remove css classes\n\t *\n\t */\n\tconst removeClasses = (elmts, ...classes) => {\n\t var norm_classes = classesArray(classes);\n\t elmts = castAsArray(elmts);\n\t elmts.map(el => {\n\t norm_classes.map(cls => {\n\t el.classList.remove(cls);\n\t });\n\t });\n\t};\n\n\t/**\n\t * Return arguments\n\t *\n\t */\n\tconst classesArray = args => {\n\t var classes = [];\n\t iterate(args, _classes => {\n\t if (typeof _classes === 'string') {\n\t _classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t }\n\t if (Array.isArray(_classes)) {\n\t classes = classes.concat(_classes);\n\t }\n\t });\n\t return classes.filter(Boolean);\n\t};\n\n\t/**\n\t * Create an array from arg if it's not already an array\n\t *\n\t */\n\tconst castAsArray = arg => {\n\t if (!Array.isArray(arg)) {\n\t arg = [arg];\n\t }\n\t return arg;\n\t};\n\n\t/**\n\t * Get the closest node to the evt.target matching the selector\n\t * Stops at wrapper\n\t *\n\t */\n\tconst parentMatch = (target, selector, wrapper) => {\n\t if (wrapper && !wrapper.contains(target)) {\n\t return;\n\t }\n\t while (target && target.matches) {\n\t if (target.matches(selector)) {\n\t return target;\n\t }\n\t target = target.parentNode;\n\t }\n\t};\n\n\t/**\n\t * Get the first or last item from an array\n\t *\n\t * > 0 - right (last)\n\t * <= 0 - left (first)\n\t *\n\t */\n\tconst getTail = (list, direction = 0) => {\n\t if (direction > 0) {\n\t return list[list.length - 1];\n\t }\n\t return list[0];\n\t};\n\n\t/**\n\t * Return true if an object is empty\n\t *\n\t */\n\tconst isEmptyObject = obj => {\n\t return Object.keys(obj).length === 0;\n\t};\n\n\t/**\n\t * Get the index of an element amongst sibling nodes of the same type\n\t *\n\t */\n\tconst nodeIndex = (el, amongst) => {\n\t if (!el) return -1;\n\t amongst = amongst || el.nodeName;\n\t var i = 0;\n\t while (el = el.previousElementSibling) {\n\t if (el.matches(amongst)) {\n\t i++;\n\t }\n\t }\n\t return i;\n\t};\n\n\t/**\n\t * Set attributes of an element\n\t *\n\t */\n\tconst setAttr = (el, attrs) => {\n\t iterate(attrs, (val, attr) => {\n\t if (val == null) {\n\t el.removeAttribute(attr);\n\t } else {\n\t el.setAttribute(attr, '' + val);\n\t }\n\t });\n\t};\n\n\t/**\n\t * Replace a node\n\t */\n\tconst replaceNode = (existing, replacement) => {\n\t if (existing.parentNode) existing.parentNode.replaceChild(replacement, existing);\n\t};\n\n\t/**\n\t * highlight v3 | MIT license | Johann Burkard \n\t * Highlights arbitrary terms in a node.\n\t *\n\t * - Modified by Marshal 2011-6-24 (added regex)\n\t * - Modified by Brian Reavis 2012-8-27 (cleanup)\n\t */\n\n\tconst highlight = (element, regex) => {\n\t if (regex === null) return;\n\n\t // convet string to regex\n\t if (typeof regex === 'string') {\n\t if (!regex.length) return;\n\t regex = new RegExp(regex, 'i');\n\t }\n\n\t // Wrap matching part of text node with highlighting , e.g.\n\t // Soccer -> Soccer for regex = /soc/i\n\t const highlightText = node => {\n\t var match = node.data.match(regex);\n\t if (match && node.data.length > 0) {\n\t var spannode = document.createElement('span');\n\t spannode.className = 'highlight';\n\t var middlebit = node.splitText(match.index);\n\t middlebit.splitText(match[0].length);\n\t var middleclone = middlebit.cloneNode(true);\n\t spannode.appendChild(middleclone);\n\t replaceNode(middlebit, spannode);\n\t return 1;\n\t }\n\t return 0;\n\t };\n\n\t // Recurse element node, looking for child text nodes to highlight, unless element\n\t // is childless,