{"version":3,"file":"bravo-formatter.min.cjs","mappings":"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AAU,CACR,MACA,MACA,MACA,QACA,KACA,MACA,uBACA,KACA,UACA,KACA,OACA,OACA,UACA,WACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,WACA,OACA,MACA,OACA,SACA,SACA,UACA,SACA,UACA,QACA,QACA,YACA,MACA,OACA,OACA,QACA,WACA,SACA,OACA,SACA,KACA,SACA,KACA,QACA,YACA,WACA,OACA,KACA,OACA,UACA,OACA,OACA,QACA,SACA,QACA,UACA,MACA,KACA,MACA,OACA,QACA,KACA,KACA,KACA,QACA,QACA,OACA,YACA,YACA,QACA,QACA,YACA,UACA,QACA,SACA,OACA,SACA,MACA,OACA,SACA,QACA,cACA,OACA,KACA,QACA,OACA,YACA,QACA,SACA,QACA,OACA,QACA,SACA,OACA,UAEFC,UAAW,CACT,QACA,OACA,QACA,OACA,WACA,YACA,WACA,QACA,MACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,aACA,aACA,UACA,SACA,SACA,OACA,YAGFC,aAAc,CAAC,MAAO,QAAS,UAAW,QAAS,QAAS,QAC5DC,KAAM,CAAC,QAEPC,IAAK,CACH,OACA,OACA,QACA,KACA,MACA,QACA,UACA,WACA,UACA,WACA,mBC5ISC,EAAYX,EAAgB,CAEvCY,KAAM,CACJ,kBACA,8BACA,qBACA,sBACA,eACA,oBACA,wBACA,sBACA,qBACA,sBAGFC,kBAAmB,CACjB,YACA,YACA,MACA,OACA,QACA,UACA,YACA,aACA,MACA,MACA,mBACA,aACA,cACA,aACA,MACA,UACA,YAGFC,UAAW,CACT,YACA,YACA,mBACA,MACA,UACA,SACA,UACA,QACA,UACA,cACA,aACA,MACA,MACA,aACA,OAGFC,qBAAsB,CAAC,wBAAyB,mBAAoB,mBAAoB,kBAExFC,MAAO,CAEL,eACA,eACA,kBACA,iBACA,sBACA,2BACA,gBACA,SACA,cACA,UACA,gBAGFC,QAAS,CAAC,aAEVC,WAAY,CAEV,mBACA,gBACA,aAGFC,KAAM,CACJ,eACA,UACA,OACA,WACA,WACA,YACA,aACA,sBACA,cACA,WACA,aACA,aAGFC,SAAU,CACR,mBACA,WACA,UACA,eACA,eACA,gBACA,iBACA,kBACA,WACA,kBAGFC,UAAW,CAAC,SAEZC,eAAgB,CAAC,kBAEjBC,UAAW,CACT,qBACA,qBACA,WACA,UACA,cACA,eACA,YACA,aACA,cACA,iBACA,YACA,yBACA,cACA,kBACA,kBACA,mBACA,cACA,gBACA,eACA,YACA,gBACA,eACA,cACA,cACA,UACA,aACA,cACA,YACA,YACA,kBACA,cACA,qBACA,kBACA,iBACA,eACA,0BACA,aACA,kBACA,mBACA,kBACA,gBACA,mBACA,kBACA,aACA,YACA,cACA,iBACA,yBACA,iBACA,aACA,mBACA,eACA,eACA,YACA,cACA,gBACA,gBACA,aACA,WACA,eACA,YACA,OACA,QAGFC,KAAM,CAAC,mBAAoB,MAAO,OAAQ,SAAU,UAEpDC,IAAK,CAAC,iBAAkB,kBAAmB,0BAA2B,qBAEtEC,SAAU,CAAC,gBAAiB,UAAW,eAAgB,gBAAiB,oBAExEC,KAAM,CACJ,eACA,aACA,sBACA,aACA,qBACA,mBACA,4BACA,mBACA,kBAGFC,KAAM,CACJ,MACA,OACA,SACA,SACA,cACA,OACA,OACA,MACA,QACA,MACA,KACA,MACA,QACA,WACA,QACA,MACA,cACA,gBACA,cACA,WACA,gBACA,MACA,QACA,QACA,OACA,UACA,QACA,MACA,OACA,OACA,QACA,MACA,OACA,OACA,QACA,MACA,OACA,OACA,QACA,QACA,gBAGFC,WAAY,CAAC,cAAe,aAAc,YAAa,OAAQ,MAAO,kBAAmB,mBAEzFC,IAAK,CACH,qBACA,0BACA,mBACA,kBACA,eACA,sBACA,oBACA,WACA,oBACA,kBAGFC,UAAW,CAAC,OAAQ,aAAc,eAAgB,YAAa,QAAS,cAExEC,SAAU,CAAC,gBAEXC,qBAAsB,CACpB,OACA,YACA,aACA,aACA,cACA,SACA,UACA,WACA,YAGFC,OAAQ,CACN,QACA,cACA,cACA,mBACA,MACA,uBACA,wBACA,SACA,kBACA,YACA,SACA,cACA,cACA,WACA,UACA,QACA,OACA,SACA,OACA,QACA,QACA,YACA,yBACA,eACA,kBACA,iBACA,qBACA,eACA,iBACA,gBACA,UACA,SACA,UACA,QACA,OACA,QACA,+BACA,UACA,QACA,cACA,SACA,SACA,YACA,YACA,YACA,iBACA,SACA,YACA,OACA,UACA,SAGFC,KAAM,CACJ,eACA,OACA,UACA,WACA,WACA,YACA,aACA,cACA,cAGFC,UAAW,CACT,oBACA,UACA,SACA,YACA,gBACA,gBACA,iBACA,kBACA,mBACA,kBACA,oBACA,mBACA,mBACA,eACA,cACA,eAGFC,KAAM,CAAC,iBAEPC,YAAa,CAAC,WAAY,KAAM,SAAU,UAE1CC,gBAAiB,CACf,MACA,UACA,SACA,UACA,OACA,QACA,YACA,aACA,uBACA,QACA,eACA,wBACA,OACA,MACA,MACA,OACA,MACA,YACA,SACA,aACA,cACA,MACA,MACA,SACA,WACA,UACA,YAEFC,cAAe,CAAC,aAChBC,cAAe,CAAC,UAAW,QAAS,OAAQ,QAAS,aAAc,UAAW,UAC9EC,iBAAkB,CAEhB,WACA,WACA,SACA,SACA,SACA,wBACA,QACA,OAEFC,eAAgB,CACd,eACA,eACA,oBACA,OACA,WACA,WACA,MACA,YACA,YACA,kBACA,OACA,SACA,QACA,oBACA,MACA,iBACA,UACA,mBACA,SACA,oBACA,OACA,YACA,oBACA,mBACA,oBACA,oBACA,kBACA,mBACA,oBACA,mBACA,mBACA,OACA,QAEFC,SAAU,CAAC,YAAa,WAAY,mBAAoB,mBACxDC,WAAY,CAAC,eAAgB,uBAC7BC,WAAY,CACV,MACA,OACA,QACA,OACA,QACA,OACA,QACA,QACA,OACA,MACA,OACA,UACA,MACA,QACA,KACA,MACA,OACA,QACA,KACA,MACA,UACA,OACA,QACA,MACA,OACA,OACA,MACA,QAEFC,YAAa,CAAC,eAAgB,iBAAkB,kBAChDC,aAAc,CACZ,SAEA,QACA,OACA,SACA,QACA,OACA,QACA,UACA,QACA,OACA,QACA,QACA,SAC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hD,OAAS2H,EAAUgK,MAC3D3O,EAAM5D,GAAO,IAEb4D,EAAM5D,GAInB,SAASiS,EAA6BN,EAAiBa,GACrD,IAAIC,EAAQ,EACZ,IAAK,IAAIjQ,EAAIgQ,EAAYhQ,EAAImP,EAAO/S,OAAQ4D,IAAK,CAC/C,MAAMoB,EAAQ+N,EAAOnP,GAQrB,GAPmB,MAAfoB,EAAMkB,KACR2N,IACwB,MAAf7O,EAAMkB,KACf2N,IACwB,OAAf7O,EAAMkB,OACf2N,GAAS,GAEG,IAAVA,EACF,OAAOjQ,C,CAGX,OAAOmP,EAAO/S,OAAS,CACzB,CCzPO,MAAMyO,EAAYX,EAAgB,CAEvCc,UAAW,CACT,YACA,MACA,OACA,cACA,QACA,YACA,YACA,aACA,QACA,aACA,kBACA,YACA,WACA,UACA,MACA,SACA,MACA,kBACA,kBACA,eACA,YACA,YACA,aACA,iBACA,YACA,UACA,aACA,WACA,WACA,WACA,aACA,SACA,cACA,MACA,UACA,WACA,MACA,WACA,gBACA,UAGFkF,OAAQ,CACN,MACA,SACA,OACA,WACA,aACA,eACA,cACA,aACA,aACA,cACA,aACA,QACA,YACA,YACA,WACA,OACA,OACA,QACA,QACA,SACA,SACA,SACA,YACA,QACA,SACA,SACA,OACA,QACA,cACA,iBACA,UACA,OACA,OACA,QACA,mBACA,cACA,MACA,OACA,WACA,gBACA,mBACA,SACA,WACA,MACA,OACA,OACA,MACA,aACA,YACA,gBACA,YACA,OACA,eACA,SACA,WACA,kBACA,mBACA,UACA,MACA,SACA,iBACA,cACA,eACA,aACA,yBACA,sBACA,uBACA,yBACA,0BACA,0BACA,0BACA,6BACA,UACA,aACA,SACA,mBACA,SACA,kBACA,aACA,aACA,kBACA,eACA,MACA,UACA,QACA,QACA,kBACA,yBACA,UACA,cACA,UACA,WACA,OACA,aACA,WACA,YACA,cACA,MACA,OACA,qBACA,SACA,SACA,QACA,UACA,MACA,aACA,WACA,QACA,QACA,OACA,SACA,KACA,SACA,mBACA,QACA,QACA,OACA,QACA,MACA,kBACA,cACA,mBACA,MACA,SACA,MACA,QACA,iBACA,SACA,aACA,YACA,gBACA,SACA,eACA,WACA,aACA,qBACA,mBACA,SACA,MACA,UACA,OACA,WACA,SACA,QACA,MACA,WACA,UACA,UACA,cACA,SACA,OACA,OACA,eACA,eACA,cACA,iBACA,gBACA,SACA,UACA,MACA,QACA,QACA,kBACA,QACA,OACA,QACA,QACA,SACA,OACA,MACA,OACA,WACA,UACA,YACA,YACA,aACA,aACA,QACA,OACA,QACA,UACA,SACA,WACA,SACA,YACA,MACA,OACA,OACA,YACA,eACA,gBACA,mBACA,gBACA,eACA,UACA,UACA,UACA,YACA,aACA,eACA,YACA,OACA,aACA,WACA,QACA,kBACA,QACA,UACA,cACA,SACA,QACA,QACA,YACA,UACA,WACA,qBACA,iBACA,aACA,wBACA,uBACA,uCACA,OACA,WACA,OACA,gBACA,aACA,YACA,cACA,aACA,YACA,YACA,gBACA,WACA,QACA,WACA,eACA,UACA,iBACA,eACA,QAGFpS,MAAO,CACL,kBACA,oBACA,oBACA,mBACA,YACA,gBACA,eACA,mBACA,YAGFqS,IAAK,CAAC,UAENC,KAAM,CACJ,YACA,eACA,OACA,aACA,QACA,MACA,OACA,aACA,cACA,aACA,YACA,mBAGFC,KAAM,CAAC,UC7TI7F,EAAWN,EAAgB,CAEtCoG,SAAU,CACR,MACA,WACA,QACA,WACA,MACA,KACA,QACA,eACA,aACA,YACA,UACA,KACA,QACA,MACA,YACA,SACA,QACA,UACA,aACA,KACA,UACA,WACA,OACA,QACA,YACA,QACA,QACA,UACA,aACA,SACA,SACA,YACA,aACA,aACA,UACA,WACA,SACA,OACA,UACA,eACA,mBACA,eACA,iBACA,eACA,oBACA,UACA,SACA,OACA,WACA,SACA,UACA,UACA,aACA,gBACA,UACA,WACA,WACA,KACA,WACA,SACA,UACA,WACA,OACA,SACA,WACA,aACA,SACA,WACA,QACA,SACA,YACA,SACA,OACA,WACA,SACA,YACA,QACA,QACA,MACA,OACA,OACA,WACA,YACA,MACA,SACA,OACA,QACA,UACA,OACA,QACA,KACA,YACA,KACA,YACA,QACA,UACA,QACA,QACA,cACA,OACA,KACA,SACA,UACA,MACA,OACA,MACA,WACA,OACA,WACA,QACA,OACA,QACA,SACA,UACA,WACA,OACA,UACA,WACA,OACA,OACA,aACA,eACA,eACA,gBACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,QACA,WACA,OACA,KACA,MACA,KACA,eACA,WACA,QACA,eACA,MACA,QACA,UACA,YACA,OACA,SACA,YACA,cACA,eACA,OACA,YACA,SACA,OACA,YACA,UACA,QACA,SACA,aACA,YACA,UACA,OACA,SACA,QACA,UACA,QACA,aACA,WACA,WACA,SACA,qBACA,SACA,UACA,OACA,SACA,gBACA,aACA,cACA,kBACA,kBACA,gBACA,WACA,MACA,SACA,SACA,aACA,UACA,SACA,WACA,WACA,YACA,eACA,SACA,OACA,SACA,WACA,WACA,SACA,YACA,OACA,WACA,SACA,QACA,UACA,UACA,UACA,SACA,eACA,QACA,aACA,OACA,KACA,UACA,OACA,OACA,SACA,QACA,OACA,QACA,YACA,WACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,MACA,YACA,UACA,QACA,UCzOE5C,EAAiB1F,EAAc,CAAC,4BAEhC2F,EAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,4BACA,cAGA,cACA,SAEA,MAEA,aACA,4BACA,aACA,SAEA,2BACA,oCAGI4F,EAAiB5F,EAAc,CAEnC,SACA,mBACA,2BAEA,cAEA,yBAEA,cACA,eACA,gBACA,kBACA,iBACA,gBACA,eACA,oDAEA,mBAEA,uBACA,QACA,KAEA,kBACA,iBACA,iBACA,cACA,aACA,mBACA,kBACA,iBACA,iBACA,mBACA,gBACA,wBACA,aACA,qBACA,wBACA,OACA,QACA,UACA,SACA,UACA,eACA,yBACA,kBACA,kBACA,gCACA,eACA,wBACA,cACA,oBACA,mBACA,cACA,kBACA,kBACA,iBACA,oBACA,iBACA,yBACA,cACA,kBACA,iBACA,iCACA,oBACA,gBACA,mBACA,kBACA,iBACA,kBACA,qBACA,iBACA,OACA,sBACA,WACA,UACA,oBACA,UACA,QACA,eACA,kBACA,QACA,eACA,UACA,QACA,aACA,OACA,UACA,UACA,UACA,oBACA,SACA,SACA,WACA,YACA,cACA,iBACA,0BACA,wCACA,0CACA,yBACA,qCACA,qBACA,2BACA,gCACA,8BACA,sDACA,gCACA,2BACA,yBACA,wBACA,iCACA,6CACA,0BACA,8BACA,oBACA,oBACA,qCACA,mCACA,0BACA,WACA,wBACA,SACA,cACA,aAGI6F,EAAwB7F,EAAc,CAAC,cAAe,eAAgB,oBAEtE8F,EAAgB9F,EAAc,CAAC,OAAQ,qCAAsC,yBAE7E+F,EAAkB/F,EAAc,CAAC,YAAa,YAAa,WAAY,2BAGhEuI,EAAsB,CACjCtC,iBAAkB,CAChBP,eAAc,EACdC,gBAAiB,IAAIA,KAAoBC,GACzCC,sBAAqB,EACrBC,cAAa,EACbC,gBAAe,EACfG,iBAAkB1D,EAClB2D,sBAAuBtD,EACvBwD,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,IAAK,IAAK,OACvC,CAAED,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAM,KAAM,MAAOC,eAAe,IAEvEC,WAAY,CAAC,SACbG,WAAY,CAAEC,YAAY,EAAMC,MAAO,CAAC,MACxC0B,WAAY,CAAEtH,MAAO,MAAOC,KAAM,OAClC8F,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAElDa,cAAe,CACblC,eAAcA,IC1LL/C,EAAYX,EAAgB,CAEvC4B,KAAM,CACJ,MACA,OACA,OACA,OACA,MACA,SACA,OACA,OACA,UACA,OACA,MACA,UAEA,MACA,YACA,QACA,WACA,MACA,QACA,KACA,MACA,QACA,OACA,WACA,KACA,OACA,WACA,MACA,QACA,UACA,OACA,QACA,YACA,aACA,qBACA,OACA,MACA,OACA,MACA,QACA,gBAEFZ,MAAO,CAAC,iBAAkB,WAAY,aAAc,OAAQ,aAAc,SAC1EE,WAAY,CAAC,SAAU,QACvBC,KAAM,CACJ,aAEA,WACA,cACA,WACA,WACA,MACA,UACA,aACA,YACA,UACA,gBACA,qBACA,OACA,WACA,SACA,QACA,iBACA,WACA,UACA,SACA,YACA,UACA,mBACA,QACA,iBACA,aACA,QAEFmB,YAAa,CAAC,cAAe,WAAY,KAAM,YAAa,SAAU,SAAU,OAChFJ,OAAQ,CACN,QACA,SACA,mBACA,MACA,SACA,YACA,iBACA,SACA,MACA,SACA,QACA,cACA,gBACA,kBACA,UACA,UACA,QACA,QACA,SACA,cACA,SACA,QACA,OACA,QACA,SACA,eACA,YACA,SACA,QACA,iBACA,UACA,iBACA,SACA,UACA,OACA,QACA,YACA,UACA,QACA,QACA,aACA,SACA,YACA,YACA,OACA,QACA,WACA,SAEFqE,QAAS,CAAC,OAAQ,eAAgB,YAAa,cAAe,oBAAqB,oBACnF9F,KAAM,CACJ,cACA,cACA,QACA,mBACA,eACA,OACA,cACA,iBACA,MACA,UACA,MACA,OACA,OACA,gBACA,WAEFK,UAAW,CACT,MACA,eACA,cACA,OACA,QACA,YACA,aACA,oBACA,MACA,MACA,QACA,aACA,oBACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,cACA,MACA,UACA,WACA,YAEFlN,MAAO,CAAC,UAAW,SAAU,aAAc,kBAAmB,aAAc,SAE5E4S,OAAQ,CACN,OACA,MACA,cACA,aACA,OACA,aACA,aACA,YACA,eACA,SAMFjD,UAAW,CAAC,UAAW,UAAW,UAAW,UClMlCjD,EAAWN,EAAgB,CAGtCyG,YAAa,CACX,MACA,QACA,QACA,UACA,UACA,MACA,SACA,SACA,UACA,UACA,SACA,UACA,YACA,gBACA,aACA,UACA,UACA,UACA,cACA,UACA,cACA,WACA,OACA,YACA,WACA,MACA,eACA,WACA,UACA,YACA,aACA,OACA,cACA,YACA,UACA,aACA,YACA,SACA,UACA,YACA,UACA,SACA,SACA,OACA,aACA,QACA,SACA,YACA,YACA,eACA,OACA,gBACA,SACA,QACA,UACA,SACA,cACA,cACA,QACA,MACA,OACA,WACA,QACA,QACA,OACA,WACA,OACA,QACA,UACA,OACA,UACA,eACA,WACA,QACA,SACA,QACA,OACA,SACA,UACA,UACA,SACA,eACA,eACA,YACA,QACA,cACA,aACA,OACA,SACA,aACA,aACA,QACA,OACA,WACA,UACA,eACA,eACA,SACA,SACA,SACA,cACA,WACA,UACA,OACA,QACA,SACA,UACA,SACA,OACA,QACA,kBACA,SACA,OACA,SACA,OACA,QACA,gBACA,SACA,OACA,SACA,MACA,aACA,SACA,cACA,SACA,SACA,SACA,gBACA,YACA,aACA,UACA,QACA,eACA,YACA,OACA,YACA,SACA,QACA,WACA,MACA,MACA,MACA,eACA,aACA,OACA,QACA,OACA,aACA,YACA,QACA,SACA,WACA,cACA,OACA,QACA,QACA,MACA,OACA,SACA,aACA,QACA,OACA,WACA,SACA,MACA,aACA,WACA,UACA,UACA,gBACA,OACA,QACA,SACA,QACA,OACA,QACA,UACA,UACA,cACA,QAEFC,SAAU,CACR,MACA,QACA,MACA,QACA,KACA,gBACA,UACA,SACA,SACA,UACA,OACA,KACA,OACA,OACA,OACA,SACA,OACA,SACA,QACA,OACA,UACA,eACA,oBACA,SACA,WACA,UACA,SACA,WACA,WACA,SACA,OACA,OACA,MACA,WACA,SACA,WACA,WACA,QACA,QACA,QACA,YACA,MACA,OACA,OACA,WACA,QACA,QACA,WACA,SACA,KACA,SACA,KACA,QACA,SACA,MACA,YACA,WACA,OACA,KACA,OACA,UACA,OACA,OACA,OACA,QACA,QACA,MACA,OACA,OACA,MACA,OACA,KACA,KACA,KACA,QACA,MACA,QACA,OACA,cACA,YACA,UACA,YACA,WACA,YACA,QACA,QACA,SACA,SACA,QACA,SACA,MACA,OACA,SACA,MACA,WACA,QACA,cACA,OACA,YACA,KACA,YACA,UACA,OACA,WACA,YACA,QACA,aACA,SACA,OACA,QACA,eACA,SACA,UACA,OACA,QACA,SACA,OACA,SACA,OACA,SACA,QACA,WACA,QACA,QACA,aACA,UACA,UACA,aACA,YACA,UACA,QACA,UACA,YACA,QACA,OACA,UACA,QAEFC,UAAW,CACT,WACA,eACA,MACA,MACA,MACA,UACA,OACA,SACA,WACA,cACA,kBC3UEnD,EAAiB1F,EAAc,CAAC,4BAGhC2F,EAAkB3F,EAAc,CAGpC,OACA,QACA,WACA,SACA,SACA,eACA,WACA,UACA,aACA,gBACA,QAMA,sBACA,SAEA,aACA,4BACA,aACA,kBAGA,qCAGA,2BACA,yBAEA,6CACA,wDAII4F,EAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,cACA,YAEA,mBAEA,QACA,SACA,WACA,OACA,QACA,YACA,YACA,aACA,kBAGI8I,EAAkB9I,EAAc,CAEpC,MACA,OACA,gBAGI6F,EAAwB7F,EAAc,CAAC,2BAGvC8F,EAAgB9F,EAAc,CAClC,OACA,qCACA,uBAEA,mBAGI+F,EAAkB/F,EAAc,CAAC,2BAG1B+I,EAAuB,CAClC9C,iBAAkB,CAChBP,eAAc,EACdC,gBAAiB,IAAIA,KAAoBC,KAAmBkD,GAC5DjD,sBAAqB,EACrBC,cAAa,EACbC,gBAAe,EACfG,iBAAkB1D,EAClB2D,sBAAuBtD,EACvBuD,YAAa,CAAC,MACdC,YAAa,CAAC,QAAS,SACvBI,WAAY,CAAC,MACbuC,cAAe,CAAC,CAAE1C,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAC/DS,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,KAAM,IAAK,OAEzDa,cAAe,CACblC,eAAc,EACdkD,oBC5GStG,EAAWN,EAAgB,CAEtC+G,IAAK,CACH,aACA,UACA,SACA,MACA,QACA,QACA,UACA,YACA,MACA,YACA,QACA,SACA,UACA,MACA,MACA,KACA,MACA,QACA,aACA,KACA,SACA,UACA,iBACA,kBACA,OACA,MACA,iBACA,SACA,SACA,QACA,UACA,SACA,SACA,SACA,MACA,OACA,QACA,OACA,OACA,UACA,OACA,QACA,KACA,OACA,QACA,OACA,UACA,WACA,OACA,eACA,QACA,SACA,UACA,OACA,YACA,UACA,QACA,aACA,WACA,SACA,eACA,SACA,OACA,QACA,WACA,OACA,UACA,YACA,SACA,cACA,UACA,aACA,eACA,gBACA,gBACA,aACA,UACA,SACA,YACA,UACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,qBACA,kBACA,oBACA,WACA,UACA,WACA,eACA,UACA,MACA,SACA,QACA,OACA,UACA,eACA,cACA,eACA,eACA,oBACA,eACA,SACA,cACA,QACA,OACA,WACA,YACA,WACA,OACA,WACA,MACA,WACA,kBACA,aACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,UACA,kBACA,SACA,mBACA,OACA,WACA,eACA,gBACA,cACA,YACA,UACA,UACA,OACA,WACA,cACA,MACA,KACA,SACA,gBACA,OACA,OACA,WACA,YACA,UACA,OACA,OACA,SACA,QACA,QACA,SACA,WACA,MACA,OACA,SACA,UACA,OACA,QACA,SACA,SACA,UACA,QACA,SACA,QACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,OACA,YACA,SACA,SACA,UACA,WACA,cACA,QACA,OACA,SACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,SACA,SACA,QACA,YACA,UACA,MACA,QACA,UACA,SACA,QACA,OACA,OACA,WACA,WACA,UACA,YACA,aACA,MACA,SACA,OACA,QACA,SACA,QACA,UACA,OACA,OACA,SACA,OACA,gBACA,UACA,OACA,QACA,OACA,mBACA,cACA,cAEA,aACA,KACA,SACA,UACA,oBACA,oBACA,YACA,SACA,YACA,KACA,YACA,QACA,UACA,SACA,eACA,QACA,QACA,cACA,SACA,gBACA,UACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,WACA,YACA,OACA,KACA,YACA,MACA,KACA,YACA,SACA,SACA,UACA,UACA,OACA,OACA,aACA,MACA,OACA,iBACA,OACA,WACA,OACA,aACA,UACA,UACA,QACA,SACA,OACA,OACA,QACA,OACA,QACA,SACA,QACA,OACA,OACA,QACA,YACA,iBACA,OACA,SACA,QACA,UACA,OACA,OACA,WACA,WACA,OACA,eACA,SACA,uBACA,eACA,kBACA,cACA,kBACA,iBACA,kBACA,cACA,mBACA,aACA,gBACA,oBACA,kBACA,oBACA,iBACA,qBACA,iBACA,gCACA,cACA,kBACA,0BACA,QACA,2BACA,uBACA,WACA,WACA,qBACA,uBACA,uBACA,WACA,SACA,aACA,YACA,aACA,SACA,QACA,eACA,cACA,YACA,UACA,QACA,SACA,qBACA,gBACA,WACA,WACA,MACA,OACA,WACA,SACA,UACA,QACA,QACA,QACA,cACA,OACA,QACA,WACA,UACA,QACA,SACA,QACA,MACA,OACA,UACA,KACA,aACA,aACA,UACA,UACA,UACA,SACA,YACA,OACA,MACA,WACA,qBACA,OACA,SACA,UACA,WACA,KACA,SACA,eACA,KACA,MACA,SACA,OACA,OACA,WACA,UACA,SACA,aACA,KACA,QACA,aACA,SACA,MACA,QACA,UACA,OACA,WACA,QACA,UACA,YACA,OACA,gBACA,SACA,kBACA,OACA,SACA,UACA,YACA,eACA,aACA,WACA,aACA,QACA,SACA,UACA,OACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,WACA,UACA,aACA,YACA,UACA,cACA,UACA,WACA,QACA,QACA,UACA,QACA,QACA,QACA,QACA,MACA,OACA,YACA,aACA,QACA,OACA,UACA,UACA,YACA,mBACA,WACA,YACA,aACA,SACA,QACA,WACA,iBACA,gBACA,eACA,UACA,SACA,SACA,SACA,aACA,SACA,aACA,UACA,SACA,UACA,WACA,cACA,cACA,SACA,UACA,QACA,WACA,UACA,UACA,WACA,SACA,oBACA,SACA,YACA,UACA,QACA,UACA,SACA,QACA,QACA,OACA,WACA,SACA,UACA,MACA,WACA,SACA,OACA,UACA,YACA,aACA,QACA,YACA,WACA,SACA,cACA,UACA,SACA,qBACA,WACA,SACA,YACA,YACA,WACA,SACA,eACA,UACA,SACA,MACA,SACA,QACA,OACA,WACA,SACA,SACA,SACA,OACA,QACA,SACA,YACA,OACA,WACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,QACA,SACA,UACA,WACA,gBACA,MACA,eACA,WACA,aACA,iBACA,oBACA,YACA,sBACA,eACA,mBACA,aACA,iBACA,iBACA,eACA,cACA,eACA,gBACA,kBACA,eACA,MACA,QACA,WACA,SACA,YACA,oBACA,mBACA,qBACA,SACA,OACA,UACA,gBACA,SACA,kBACA,UACA,eACA,gBACA,QACA,UACA,QACA,WACA,UACA,SACA,cACA,QACA,aACA,SACA,aACA,iBACA,YACA,YACA,aACA,OACA,OACA,OACA,OACA,OACA,YACA,eACA,gBACA,WACA,UACA,WACA,KACA,WACA,cACA,gBACA,UACA,UACA,WACA,OACA,WACA,OACA,QACA,YACA,cACA,YACA,mBACA,WACA,OACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,SACA,UACA,QACA,MACA,OACA,iBACA,UACA,QACA,WACA,WACA,gBACA,QACA,SACA,YACA,UACA,eACA,WACA,YACA,UACA,MACA,OACA,UACA,UACA,aACA,OACA,WACA,OACA,gBACA,OACA,QACA,QACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,OACA,MACA,KACA,MACA,OACA,aACA,cC/qBSpG,EAAYX,EAAgB,CAEvC+G,IAAK,CACH,UACA,aACA,UACA,SACA,UACA,OACA,QACA,YACA,UACA,UACA,WACA,WACA,cACA,SACA,aACA,UACA,cACA,eACA,gBACA,iBACA,MACA,OACA,MACA,SACA,MACA,MACA,MACA,YACA,QACA,WACA,eACA,kBACA,kBACA,OACA,aACA,eACA,MACA,SACA,aACA,cACA,UACA,SACA,YACA,MACA,cACA,OACA,cACA,WACA,UACA,WACA,MACA,OACA,UACA,cACA,cACA,OACA,OACA,QACA,YACA,MACA,kBACA,YACA,aACA,OACA,UACA,mBACA,cACA,MACA,eACA,eACA,gBACA,cACA,cACA,WACA,SACA,yBACA,YACA,gBACA,OACA,aACA,MACA,MACA,QACA,WACA,UACA,aACA,YACA,YACA,UACA,mBACA,gBACA,cACA,cACA,MACA,SACA,UACA,MACA,aACA,eACA,QACA,cACA,QACA,SACA,aACA,cACA,YACA,gBACA,WACA,WACA,MACA,SACA,QACA,SACA,eACA,eACA,aACA,oBACA,oBACA,eACA,gBACA,qBACA,aACA,gBACA,cACA,eACA,cACA,YACA,cACA,aACA,aACA,mBACA,sBACA,aACA,aACA,cACA,cACA,eACA,WACA,cACA,YACA,eACA,aACA,aACA,WACA,iBACA,QACA,QACA,SACA,UACA,KACA,YACA,SACA,MACA,QACA,OACA,QACA,OACA,cACA,QACA,eACA,WACA,WACA,WACA,mBACA,kBACA,MACA,YACA,aACA,MACA,OACA,MACA,eACA,MACA,aACA,cACA,KACA,MACA,QACA,QACA,eACA,iBACA,gBACA,UACA,OACA,oBACA,eACA,iBACA,UACA,QACA,OACA,cACA,QACA,eACA,cACA,MACA,OACA,OACA,OACA,MACA,QACA,UACA,QACA,OACA,SACA,cACA,gBACA,kBACA,UACA,WACA,MACA,WACA,cACA,cACA,YACA,UACA,UACA,aACA,QACA,aACA,sBACA,QACA,iBACA,YACA,QACA,OACA,aACA,UACA,UACA,aACA,0BACA,uBACA,4BACA,WAEA,WACA,SAGA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QAEA,QACA,SACA,mBACA,OACA,MACA,SACA,OACA,OACA,gBACA,YACA,OACA,YACA,UACA,mBAEA,OACA,WACA,YACA,UC1QEvD,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SACA,uBAGA,kEACA,0CACA,SAEA,MAEA,yFACA,wDAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,iCAEA,8CAEA,qCAEA,4CACA,+BACA,yCACA,4BACA,cACA,gBACA,iBACA,uBACA,4BAEA,mBAEA,iBACA,yBACA,cACA,iBACA,kBACA,eACA,uBACA,iBACA,eACA,aACA,aACA,UACA,gBACA,cACA,eACA,gBACA,QACA,SACA,cACA,OACA,mBACA,cACA,aACA,iBACA,SACA,4BACA,kBACA,eACA,kBACA,eACA,mBACA,cACA,kBACA,gBACA,uBACA,iBACA,sBACA,cACA,qBACA,WACA,KACA,gBACA,aACA,gBACA,aACA,eACA,iBACA,YACA,gBACA,cACA,eACA,YACA,YACA,UACA,UACA,QACA,kBACA,4BACA,QACA,UACA,OACA,iBACA,iBACA,OACA,mBACA,wBACA,kBACA,aACA,iBACA,UACA,oBACA,oBACA,oBACA,eACA,cACA,eACA,cACA,eACA,oBACA,gBACA,cACA,WACA,SACA,WACA,YACA,oBACA,mBACA,yBACA,YACA,eACA,WACA,gBACA,kBACA,OACA,2BACA,yBACA,eACA,mBACA,qBACA,qBACA,qBACA,yBACA,iBACA,eACA,oBACA,uBACA,oBACA,uBACA,sBACA,2BACA,wBACA,uBACA,oBACA,sBACA,mBACA,mBACA,iBACA,cACA,4BACA,eACA,cACA,cACA,eACA,qBACA,uBACA,cACA,aACA,eACA,wBACA,YACA,eACA,mBACA,qBACA,mBACA,yBACA,2BACA,sBACA,eACA,sBACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,2BACA,uBACA,eACA,qBACA,sBACA,eACA,aACA,mBACA,oBACA,cACA,uBACA,oBACA,cACA,gBACA,uBACA,iBACA,gBACA,wBACA,oBACA,WACA,SACA,qBACA,mBACA,gBACA,cACA,oBACA,oBACA,kBACA,eACA,aACA,mBACA,mBACA,eACA,MACA,WACA,YACA,SACA,aACA,aACA,cACA,aAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,6BACA,2BAGI8F,GAAgB9F,EAAc,CAClC,OACA,8BACA,uBACA,eACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CACpC,gDACA,gBACA,2BAIWkJ,GAA0B,CACrCjD,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfoD,aAAa,EACbjD,iBAAkB1D,EAClB2D,sBAAuBtD,EAEvBwD,YAAa,CAAC,WAAY,WAAY,CAAEC,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAC9FC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKiI,sBAAsB,GAC3DJ,cAAe,CACb,CAAEK,MAAO,sBACT,CAAE/C,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAEjDI,WAAY,CAAEC,YAAY,GAC1BG,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CAAC,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,KAAM,KAAM,KAC1EC,YAOJ,SAAqBC,GACnB,OAAOA,EAAOnQ,KAAI,CAACoC,EAAOpB,KACxB,MAAMsR,EAAYnC,EAAOnP,EAAI,IAAMmG,EACnC,OAAI1D,EAAQiE,IAAItF,IAA6B,MAAnBkQ,EAAUhP,KAE3B,IAAKlB,EAAOhD,KAAM2H,EAAUgB,wBAE9B3F,CAAK,GAEhB,GAdE0O,cAAe,CACblC,eAAcA,KClSLpD,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,aACA,UACA,SACA,SACA,MACA,QACA,QACA,UACA,YACA,YACA,MACA,QACA,SACA,UACA,MACA,MACA,QACA,KACA,MACA,QACA,aACA,KACA,YACA,iBACA,kBACA,iBACA,MACA,iBACA,SACA,SACA,QACA,UACA,SACA,SACA,SACA,MACA,OACA,QACA,OACA,UACA,OACA,QACA,UACA,KACA,OACA,QACA,OACA,UACA,WACA,OACA,eACA,QACA,qBACA,SACA,UACA,UACA,OACA,YACA,UACA,QACA,WACA,SACA,eACA,SACA,QACA,QACA,WACA,OACA,UACA,YACA,SACA,UACA,gBACA,cACA,UACA,SACA,YACA,UACA,aACA,YACA,aACA,cACA,aACA,YACA,aACA,aACA,aACA,qBACA,kBACA,oBACA,WACA,UACA,WACA,UACA,MACA,SACA,QACA,OACA,YACA,UACA,eACA,eACA,oBACA,eACA,SACA,cACA,OACA,WACA,YACA,WACA,OACA,WACA,MACA,WACA,kBACA,aACA,aACA,aACA,MACA,UACA,UACA,UACA,eACA,UACA,aACA,UACA,kBACA,SACA,aACA,OACA,WACA,cACA,gBACA,cACA,YACA,UACA,UACA,OACA,WACA,cACA,MACA,KACA,SACA,OACA,OACA,WACA,YACA,UACA,OACA,OACA,SACA,QACA,SACA,WACA,aACA,MACA,OACA,WACA,SACA,UACA,mBACA,OACA,QACA,SACA,SACA,UACA,QACA,SACA,QACA,SACA,WACA,UACA,UACA,SACA,OACA,YACA,SACA,UACA,SACA,WACA,cACA,SACA,wBACA,QACA,OACA,SACA,QACA,SACA,OACA,kBACA,SACA,SACA,QACA,cACA,QACA,QACA,SACA,SACA,QACA,YACA,UACA,MACA,QACA,UACA,SACA,QACA,OACA,OACA,WACA,WACA,UACA,YACA,iBACA,WACA,qBACA,MACA,aACA,wBACA,wBACA,SACA,QACA,SACA,QACA,WACA,SACA,oBACA,YACA,UACA,OACA,SACA,OACA,gBACA,YACA,UACA,OACA,QACA,OACA,mBACA,cACA,cACA,aACA,KACA,SACA,oBACA,SACA,KACA,WACA,QACA,UACA,SACA,UACA,eACA,WACA,QACA,QACA,cACA,SACA,gBACA,UACA,WACA,KACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,YACA,WACA,OACA,YACA,UACA,KACA,iBACA,kBACA,YACA,MACA,KACA,YACA,SACA,UACA,OACA,OACA,aACA,aACA,MACA,UACA,OACA,iBACA,OACA,MACA,WACA,OACA,aACA,UACA,OACA,UACA,QACA,SACA,OACA,OACA,QACA,OACA,QACA,SACA,QACA,aACA,OACA,OACA,QACA,YACA,iBACA,OACA,SACA,QACA,UACA,OACA,OACA,WACA,WACA,OACA,eACA,SACA,uBACA,cACA,gCACA,uBACA,eACA,0BACA,cACA,kBACA,iBACA,kBACA,cACA,yBACA,qBACA,aACA,gBACA,oBACA,kBACA,oBACA,iBACA,qBACA,iBACA,gCACA,0BACA,qBACA,cACA,gCACA,QACA,WACA,2BACA,uBACA,WACA,WACA,uBACA,uBACA,SACA,aACA,YACA,aACA,SACA,SACA,QACA,eACA,cACA,YACA,UACA,SACA,qBACA,gBACA,WACA,MACA,OACA,WACA,SACA,QACA,kBACA,aACA,eACA,QACA,cACA,OACA,QACA,WACA,UACA,QACA,MACA,aACA,SACA,oBACA,QACA,MACA,OACA,KACA,YACA,OACA,MACA,SACA,UACA,qBACA,YACA,QACA,OACA,QACA,SACA,UACA,WACA,KACA,MACA,SACA,KACA,MACA,KACA,MACA,OACA,OACA,WACA,kBACA,SACA,WACA,aACA,UACA,KACA,QACA,aACA,eACA,SACA,MACA,QACA,UACA,OACA,QACA,YACA,OACA,SACA,UACA,YACA,eACA,aACA,WACA,qBACA,OACA,eACA,UACA,eACA,QACA,SACA,UACA,aACA,QACA,UACA,OACA,WACA,YACA,YACA,UACA,WACA,OACA,UACA,aACA,wBACA,YACA,UACA,cACA,UACA,WACA,QACA,QACA,UACA,QACA,QACA,SACA,QACA,OACA,OACA,QACA,YACA,aACA,OACA,UACA,UACA,YACA,mBACA,YACA,YACA,aACA,SACA,eACA,QACA,WACA,iBACA,gBACA,eACA,UACA,SACA,SACA,SACA,aACA,SACA,SACA,aACA,UACA,UACA,WACA,kBACA,qBACA,sBACA,yBACA,uBACA,0BACA,8BACA,cACA,UACA,qBACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,SACA,SACA,SACA,oBACA,YACA,UACA,QACA,UACA,SACA,QACA,QACA,OACA,WACA,SACA,SACA,UACA,MACA,OACA,YACA,aACA,aACA,QACA,YACA,WACA,SACA,UACA,cACA,SACA,YACA,mBACA,6BACA,iBACA,mBACA,qBACA,WACA,SACA,YACA,YACA,SACA,eACA,SACA,UACA,MACA,QACA,OACA,WACA,SACA,SACA,SACA,OACA,QACA,OACA,WACA,WACA,SACA,OACA,SACA,SACA,SACA,uBACA,cACA,gCACA,uBACA,eACA,0BACA,cACA,kBACA,iBACA,kBACA,cACA,yBACA,qBACA,aACA,gBACA,oBACA,kBACA,oBACA,iBACA,qBACA,iBACA,gCACA,0BACA,qBACA,cACA,gCACA,UACA,WACA,MACA,eACA,WACA,aACA,kBACA,qBACA,mBACA,iBACA,oBACA,sBACA,eACA,mBACA,aACA,cACA,eACA,iBACA,gBACA,kBACA,iBACA,eACA,eACA,OACA,MACA,UACA,QACA,WACA,SACA,oBACA,mBACA,qBACA,SACA,OACA,UACA,SACA,gBACA,SACA,SACA,kBACA,UACA,eACA,gBACA,QACA,UACA,QACA,WACA,SACA,QACA,SACA,aACA,iBACA,aACA,YACA,YACA,aACA,OACA,OACA,OACA,kBACA,OACA,OACA,YACA,eACA,gBACA,WACA,UACA,WACA,MACA,KACA,WACA,cACA,UACA,WACA,OACA,WACA,OACA,QACA,YACA,cACA,YACA,OACA,WACA,mBACA,UACA,YACA,QACA,SACA,UACA,SACA,aACA,WACA,QACA,SACA,UACA,QACA,MACA,OACA,iBACA,UACA,QACA,WACA,WACA,gBACA,aACA,QACA,SACA,YACA,UACA,eACA,YACA,UACA,OACA,OACA,UACA,UACA,OACA,WACA,OACA,gBACA,OACA,QACA,QACA,SACA,OACA,UACA,OACA,UACA,QACA,OACA,KACA,MACA,MACA,MACA,OACA,aACA,WACA,UC5uBSpG,GAAYX,EAAgB,CAEvC+G,IAAK,CACH,MACA,OACA,UACA,UACA,cACA,cAEA,YACA,QACA,OACA,OACA,QACA,MACA,YACA,MACA,cACA,SACA,UACA,YACA,aACA,SACA,UACA,oBACA,sBACA,mBACA,kBACA,kBACA,OACA,OACA,UACA,OACA,cACA,mBACA,UACA,WACA,eACA,YACA,WACA,SACA,YACA,gBACA,OACA,UACA,aACA,MACA,MACA,QACA,QACA,YACA,UACA,eACA,eACA,eACA,oBACA,eACA,UACA,WACA,OACA,WACA,cACA,WACA,WACA,MACA,UACA,aACA,YACA,YACA,UACA,UACA,aACA,MACA,MACA,MACA,aACA,UACA,eACA,QACA,cACA,cACA,QACA,SACA,eACA,mBACA,aACA,cACA,YACA,gBACA,iBACA,qBACA,2BACA,wBACA,+BACA,aACA,WACA,WACA,eACA,WACA,cACA,gBACA,MACA,OACA,cACA,KACA,SAEA,YACA,YACA,aACA,aACA,SACA,QACA,0BACA,0BACA,sBACA,oBACA,qBACA,uBACA,0BACA,gCACA,iCACA,wBACA,wBACA,qCACA,oCACA,wBACA,2BACA,6BACA,yBACA,2BACA,sBACA,uBACA,WACA,KACA,eACA,UACA,iBACA,iBACA,UACA,SACA,cACA,UACA,eACA,UACA,SACA,aACA,oBACA,oBACA,gBACA,gBACA,qBACA,aACA,eACA,cACA,YACA,cACA,aACA,mBACA,sBACA,cACA,iBACA,gBACA,cACA,aACA,cACA,eACA,oBACA,gCACA,cACA,WACA,oBACA,oBACA,aACA,YACA,eACA,aACA,aACA,MACA,WACA,iBACA,aACA,QACA,OACA,QACA,OACA,SACA,OACA,aACA,KACA,YACA,YACA,iBACA,SACA,MACA,QACA,OACA,QACA,OACA,QACA,WACA,WACA,WACA,kBACA,QACA,MACA,cACA,eACA,YACA,cACA,YACA,gBACA,cACA,aACA,YACA,MACA,YACA,cACA,MACA,MACA,SACA,MACA,QACA,YACA,kBACA,aACA,eACA,aACA,MACA,SACA,WACA,aACA,MACA,YACA,QACA,SACA,MACA,eAEA,MACA,eACA,aACA,cACA,KACA,QACA,UACA,WACA,MACA,QACA,uBACA,eACA,UACA,QACA,UACA,OACA,eACA,OACA,SACA,eACA,cACA,iBACA,gBACA,oBACA,eACA,SACA,UACA,UACA,QACA,QACA,gBACA,QACA,YACA,aACA,OACA,QACA,SACA,cACA,SACA,eACA,OACA,OACA,OACA,MACA,QACA,UACA,cACA,kBACA,QACA,OACA,UACA,cACA,eACA,YACA,YACA,qBACA,cACA,aACA,cACA,gBACA,aACA,gBACA,eACA,cACA,cACA,qBACA,cACA,cACA,YACA,kBACA,qBACA,aACA,sBACA,qBACA,eACA,kBACA,qBACA,kBACA,iBACA,uBACA,mBACA,kBACA,gBACA,cACA,aACA,cACA,aACA,oBACA,cACA,YACA,kBACA,iBACA,0BACA,2BACA,qBACA,eACA,kBACA,mBACA,kBACA,oBACA,mBACA,mBACA,kBACA,mBACA,qBACA,eACA,cACA,qBACA,sBACA,mBACA,kBACA,YACA,kBACA,iBACA,cACA,UACA,gBACA,YACA,mBACA,aACA,eACA,WACA,cACA,YACA,OACA,OACA,mBACA,wBACA,MACA,SACA,aACA,cACA,cACA,SACA,UACA,SACA,YACA,kBACA,UACA,MACA,UACA,cACA,MACA,OACA,cACA,cACA,WACA,YACA,eACA,gBACA,YACA,UACA,aACA,OACA,WACA,QACA,aACA,sBACA,QACA,iBACA,YACA,QACA,OACA,WACA,WACA,gBACA,OACA,aACA,cACA,6BACA,SACA,UACA,WACA,WACA,UACA,6BACA,oCACA,OACA,UACA,aACA,gBAEA,OACA,WAGA,MACA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QACA,QACA,SACA,mBACA,OACA,WACA,YACA,OACA,OACA,OACA,gBACA,UACA,mBACA,SACA,YACA,OACA,OACA,UCjcEvD,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,kEACA,0CACA,SAEA,MAEA,yFACA,6CAGI4F,GAAiB5F,EAAc,CAEnC,iCAEA,8CAEA,qCAEA,cACA,eACA,6BACA,gBACA,mBACA,gBACA,iBACA,uBAEA,mBAEA,iBACA,cACA,iBACA,iBACA,sBACA,kBACA,uBACA,eACA,mBACA,aACA,aACA,gBACA,SACA,cACA,OACA,mBACA,4BACA,+BACA,cACA,iBACA,QACA,SACA,kBACA,eACA,kBACA,kBACA,eACA,uBACA,mBACA,wBACA,cACA,gBACA,kCACA,oBACA,iBACA,cACA,qBACA,WACA,KACA,gBACA,aACA,gBACA,gBACA,aACA,qBACA,iBACA,sBACA,YACA,cACA,gCACA,kBACA,eACA,YACA,YACA,UACA,UACA,QACA,QACA,UACA,OACA,eACA,oBACA,iBACA,OACA,YACA,wBACA,WACA,2BACA,cACA,kBACA,iBACA,UACA,oBACA,oBACA,eACA,cACA,eACA,QACA,eACA,gBACA,gBACA,cACA,UACA,SACA,WACA,wBACA,YACA,oBACA,mBACA,YACA,eACA,qBACA,WACA,kBACA,OACA,mBACA,qBACA,qBACA,iBACA,eACA,uBACA,oBACA,uBACA,wBACA,oBACA,sBACA,mBACA,mBACA,iBACA,cACA,eACA,cACA,cACA,qBACA,uBACA,cACA,aACA,qBACA,mBACA,eACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,uBACA,sBACA,gBACA,aACA,mBACA,cACA,oBACA,cACA,gBACA,iBACA,gBACA,WACA,kBACA,0BACA,gBACA,cACA,oBACA,yBACA,eACA,aACA,QACA,sBACA,mBACA,kBACA,gBACA,MACA,KAGA,UACA,QACA,OACA,SACA,SACA,UAGI6F,GAAwB7F,EAAc,CAAC,2BAEvC8F,GAAgB9F,EAAc,CAClC,OACA,8BACA,uBACA,uBACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CACpC,kCACA,gBACA,2BAIWuJ,GAAwB,CACnCtD,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfoD,aAAa,EACbjD,iBAAkB1D,GAClB2D,sBAAuBtD,GAEvBwD,YAAa,CACX,WACA,CAAEC,MAAO,WAAYC,SAAU,CAAC,MAChC,CAAED,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKiI,sBAAsB,GAC3DJ,cAAe,CACb,CAAEK,MAAO,sBACT,CAAE/C,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAEjDI,WAAY,CAAEC,YAAY,GAC1BG,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CAAC,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KACvFC,YAOJ,SAAqBC,GACnB,OAAOA,EAAOnQ,KAAI,CAACoC,EAAOpB,KACxB,MAAMsR,EAAYnC,EAAOnP,EAAI,IAAMmG,EACnC,OAAI1D,EAAQiE,IAAItF,IAA6B,MAAnBkQ,EAAUhP,KAE3B,IAAKlB,EAAOhD,KAAM2H,EAAUgB,wBAE9B3F,CAAK,GAEhB,GAdE0O,cAAe,CACblC,eAAcA,KCrQL/C,GAAYX,EAAgB,CAEvC+G,IAAK,CACH,QACA,MACA,OACA,UACA,YACA,YACA,eACA,YACA,sBACA,eACA,iBACA,cACA,iBACA,eACA,gBACA,eACA,eACA,kBACA,eACA,YACA,YACA,aACA,iBACA,gBACA,YACA,cACA,eACA,eACA,gBACA,gBACA,aACA,aACA,YACA,gBACA,iBACA,iBACA,cACA,OACA,OACA,QACA,MACA,SACA,gBACA,gBACA,UACA,YACA,UACA,SACA,UACA,YACA,WACA,UACA,OACA,cACA,eACA,YACA,WACA,YACA,WACA,SACA,UACA,WACA,iBACA,sBACA,wBACA,MACA,QACA,QACA,SACA,YACA,OACA,kBACA,eACA,mBACA,gBACA,kBACA,mBACA,gBACA,oBACA,iBACA,oBACA,iBACA,SACA,cACA,UACA,aACA,kBAEA,eACA,cACA,MACA,cACA,QACA,WACA,YACA,QACA,YACA,kBACA,QACA,aACA,SACA,UACA,UACA,SACA,WACA,YACA,WACA,WACA,WACA,MACA,aACA,OACA,QACA,SACA,KACA,MACA,QACA,QACA,MACA,OACA,SACA,OACA,SACA,kBACA,gBACA,eACA,gBACA,sBACA,MACA,YACA,QACA,WACA,YACA,aACA,UACA,SACA,UACA,YACA,QACA,SACA,MACA,OACA,aACA,gBACA,qBACA,sBACA,gBACA,eACA,eACA,aACA,gBACA,gBACA,iBACA,gBACA,gBACA,QACA,eACA,KACA,cACA,WACA,WACA,QACA,UACA,SACA,OACA,kBACA,kBACA,cACA,iBACA,kBACA,iBACA,eACA,iBACA,aACA,gBACA,iBACA,gBACA,cACA,SACA,UACA,UACA,QACA,aACA,QACA,SACA,cACA,eACA,OACA,MACA,QACA,OACA,SACA,aACA,cACA,kBACA,gBACA,YACA,aACA,mBACA,SACA,WACA,MACA,MACA,QACA,UACA,SACA,YACA,SACA,SACA,WACA,WACA,WACA,OACA,QAEA,QACA,OACA,WACA,eACA,gBACA,UACA,WACA,iBACA,cAIA,UCtOSzG,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,SACA,MACA,QACA,UACA,MACA,MACA,QACA,KACA,MACA,KACA,QACA,UACA,SACA,UACA,QACA,SACA,QACA,KACA,OACA,OACA,OACA,UACA,UACA,aACA,SACA,YACA,UACA,WACA,aACA,QACA,SACA,UACA,WACA,UACA,YACA,UACA,YACA,SACA,UACA,OACA,WACA,WACA,KACA,OACA,OACA,UACA,OACA,MACA,QACA,SACA,UACA,UACA,SACA,UACA,QACA,QACA,SACA,QACA,UACA,QACA,YACA,MACA,QACA,OACA,MACA,WACA,SACA,QACA,QACA,SACA,MACA,OACA,SACA,KACA,YACA,SACA,QACA,KACA,UACA,YACA,QACA,QACA,SACA,QACA,SACA,YACA,OACA,KACA,aACA,OACA,MACA,OACA,WACA,QACA,WACA,OACA,OACA,MACA,UACA,QACA,OACA,QACA,MACA,MACA,UACA,UACA,eACA,QACA,QACA,UACA,YACA,OACA,KACA,KACA,MACA,YACA,OACA,QACA,SACA,SACA,SACA,KACA,SACA,UACA,KACA,QACA,SACA,QACA,OACA,QACA,YACA,WACA,OACA,OACA,YACA,UACA,UACA,UACA,YACA,QACA,YACA,SACA,QACA,MACA,QACA,SACA,SACA,UACA,SACA,YACA,SACA,QACA,OACA,WACA,MACA,OACA,YACA,YACA,SACA,QACA,SACA,OACA,OACA,MACA,OACA,OACA,QACA,aACA,SACA,SACA,OACA,OACA,KACA,OACA,cACA,UACA,OACA,WACA,YACA,QACA,QACA,SACA,UACA,SACA,QACA,SACA,SACA,MACA,OACA,QACA,WACA,QACA,SACA,SACA,MACA,OACA,OACA,QACA,QACA,SACA,OACA,SACA,OACA,SC3MEvD,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,cACA,SAEA,MAEA,aACA,0BACA,aACA,SAEA,OACA,SACA,cAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,aAEA,SACA,cACA,oBACA,cACA,qBACA,oBACA,kBACA,eACA,uBACA,eACA,kBACA,gBACA,aACA,qBACA,aACA,UACA,mBACA,UACA,QACA,QACA,UACA,SACA,uBACA,YACA,kBACA,oBACA,SAEA,MACA,qBACA,OACA,uBAGI6F,GAAwB7F,EAAc,CAAC,cAAe,eAAgB,oBAEtE8F,GAAgB9F,EAAc,CAAC,OAAQ,8BAA+B,eAEtE+F,GAAkB/F,EAAc,CAAC,oCAG1BwJ,GAAuB,CAClCvD,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfoD,aAAa,EACbjD,iBAAkB1D,GAClB2D,sBAAuBtD,GAIvBwD,YAAa,CAAC,QAAS,SACvBI,WAAY,CAAC,MACbL,YAAa,CAAC,KAAM,MACpBQ,WAAY,CAAEC,YAAY,EAAM4C,SAAU,CAAC,KAAM3C,MAAO,CAAC,MACzDE,iBAAkB,CAAC,IAAK,MACxBC,UAAW,CAAC,IAAK,KAAM,IAAK,OAE9Ba,cAAe,CACblC,eAAcA,KCxGLpD,GAAWN,EAAgB,CAEtC+G,IAAK,CAEH,MACA,QACA,YACA,MACA,QACA,MACA,MACA,QACA,QACA,KACA,MACA,KACA,YACA,SACA,MACA,QACA,UACA,aACA,SACA,YACA,QACA,OACA,OACA,QACA,OACA,KACA,OAEA,OACA,UACA,UACA,OACA,OACA,YACA,YACA,UACA,cACA,YACA,QACA,YACA,QACA,UACA,WACA,UACA,UACA,UACA,UACA,SACA,YACA,WACA,WACA,UACA,WACA,cACA,UACA,UACA,QACA,QACA,SACA,UACA,SACA,cACA,WACA,OACA,OACA,YACA,MACA,UACA,UACA,UACA,SACA,SACA,OACA,gBACA,WACA,SACA,OACA,WACA,UACA,OACA,QACA,QACA,MACA,SACA,SACA,YACA,aACA,YACA,UACA,SACA,OACA,WACA,QACA,QACA,QACA,QACA,MACA,SACA,QACA,OACA,OACA,WACA,UACA,OACA,QACA,QACA,OACA,SACA,OACA,SACA,OACA,aACA,KACA,YACA,KACA,YACA,QACA,UACA,YACA,UACA,WACA,SACA,eACA,MACA,YACA,YACA,WACA,OACA,aACA,KACA,YACA,OACA,WACA,QACA,UACA,SACA,QACA,UACA,OACA,QACA,QACA,QACA,QACA,UACA,QACA,OACA,OACA,OACA,MACA,MACA,SACA,SACA,QACA,MACA,QACA,SACA,MACA,OACA,SACA,QACA,WACA,OACA,MACA,WACA,SACA,QACA,MACA,aACA,SACA,MACA,SACA,OACA,cACA,SACA,UACA,UACA,cACA,cACA,cACA,gBACA,YACA,SACA,SACA,eACA,WACA,YACA,UACA,KACA,KACA,OACA,SACA,OACA,WACA,SACA,KACA,SACA,UACA,QACA,WACA,eACA,SACA,UACA,SACA,MACA,aACA,UACA,kBACA,YACA,aACA,YACA,SACA,OACA,YACA,SACA,YACA,QACA,UACA,YACA,SACA,QACA,QACA,MACA,OACA,SACA,MACA,YACA,MACA,YACA,SACA,WACA,SACA,SACA,YACA,UACA,SACA,WACA,MACA,SACA,OACA,YACA,MACA,MACA,MACA,SACA,UACA,SACA,OACA,WACA,WACA,eACA,MACA,QACA,QACA,OACA,SACA,OACA,SACA,MACA,UACA,UACA,UACA,WACA,WACA,QACA,SACA,SACA,SACA,SACA,SACA,QACA,cACA,eACA,gBACA,UACA,MACA,UACA,UACA,QACA,MACA,MACA,OACA,OACA,YACA,gBACA,gBACA,kBACA,kBACA,KACA,WACA,UACA,gBACA,UACA,OACA,MACA,MACA,MACA,QACA,QACA,SACA,WACA,YACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,WACA,SACA,UACA,OACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,UACA,QACA,OACA,UCtUSpG,GAAYX,EAAgB,CAEvCwH,QAAS,CACP,MACA,OACA,OACA,OACA,QACA,SACA,OACA,MACA,OACA,MACA,QACA,KACA,MACA,MACA,QACA,QACA,YACA,QACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,gBAEFC,UAAW,CACT,MACA,SACA,UACA,QACA,OACA,QACA,cACA,YACA,UACA,YACA,iBACA,gBACA,UACA,OACA,QACA,UACA,SACA,YACA,QACA,OACA,QAEA,uBACA,iBACA,mBAEA,QACA,QACA,SACA,gBAEFrG,SAAU,CACR,aACA,eACA,oBACA,aACA,UACA,UACA,WACA,iBACA,iBACA,WACA,WACA,kBACA,kBACA,QACA,kBACA,kBACA,UACA,eACA,UACA,eACA,kBACA,gBACA,gBACA,QACA,aAEFsG,WAAY,CAAC,WAAY,SACzBxG,WAAY,CACV,WACA,aACA,OACA,cACA,UACA,UACA,YACA,WACA,kBACA,kBACA,WACA,YACA,cACA,eACA,mBACA,mBACA,mBACA,kBACA,UACA,UACA,UACA,gBACA,SACA,gBACA,WACA,WACA,YACA,gBACA,iBACA,eACA,kBACA,gBACA,gBACA,YACA,UAEFyG,YAAa,CAAC,YAAa,cAAe,cAC1CC,WAAY,CAAC,cAAe,UAAW,gBAAiB,+BAAgC,OACxFC,aAAc,CAAC,uBACfC,WAAY,CACV,aACA,sBACA,cACA,aACA,cACA,gBACA,aACA,kBACA,qBACA,yBACA,kBAEFC,IAAK,CACH,iBACA,YACA,QACA,UACA,aACA,eACA,iBACA,kBACA,OACA,eACA,aACA,aACA,YACA,SACA,WACA,eACA,aACA,YACA,YACA,WACA,QACA,WACA,UACA,cACA,eACA,WACA,gBAEFC,SAAU,CAAC,SAAU,OAAQ,WAAY,SACzCC,YAAa,CAAC,WAAY,QAAS,SAAU,MAAO,QACpDC,IAAK,CAAC,cAAe,WAAY,aAAc,MAAO,OAAQ,WAC9DpH,UAAW,CACT,MACA,UACA,OACA,SACA,SACA,QACA,YACA,aACA,YACA,aACA,QACA,WACA,WACA,cACA,OACA,MACA,SACA,MACA,kBACA,kBACA,eACA,OACA,aACA,iBACA,aACA,UACA,YACA,YACA,WACA,WACA,WACA,sBACA,iBACA,eACA,gBACA,aACA,gBACA,sBACA,mBACA,sBACA,qBACA,sBACA,iBACA,SACA,aACA,cACA,MACA,UACA,WACA,YAGF0F,OAAQ,CAAC,cAAe,MAAO,aAAc,OAAQ,QAAS,kBAAmB,cACjF2B,gBAAiB,CAAC,QAAS,WAAY,MAAO,WAAY,SAC1DC,MAAO,CAAC,KAAM,mBAAoB,aAAc,WAAY,YAG5D7E,UAAW,CAET,WACA,YACA,SACA,QACA,YACA,gBACA,eACA,MACA,SACA,QAEA,YACA,OACA,oBACA,eACA,qBACA,gBACA,6BACA,wBACA,gBACA,UACA,UACA,QAEA,aC/PEC,GAAiB1F,EAAc,CAAC,qCAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,sBACA,SACA,uBACA,aAGA,2BACA,SAEA,MAEA,eACA,4BACA,aAEA,mHACA,2BACA,6HAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,gBAEA,qBAEA,aAEA,cACA,MACA,oDACA,SACA,YACA,gBAEA,iBAEA,aACA,QACA,aACA,UACA,SACA,YACA,OACA,eAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAEhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,6CAEA,0BAGI+F,GAAkB/F,EAAc,CACpC,kCACA,YACA,2BAGWuK,GAAwB,CACnCtE,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfoD,aAAa,EACbjD,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,MAC7B,CAAED,MAAO,MAAOC,SAAU,CAAC,OAK7BE,WAAY,CAAC,SACbC,WAAY,CAAEvF,KAAM,MACpB6H,cAAe,CAAC,CAAEK,MAAO,kCACzBzC,WAAY,CAAE6C,SAAU,CAAC,KAAM3C,MAAO,CAAC,MACvC0B,WAAY,CAAC,EACbvB,UAAW,CACT,KACA,KACA,IACA,KACA,KAEA,KACA,KACA,KACA,IACA,MAEFC,YAQJ,SAAqBC,GACnB,IAAIqD,EAA+BrM,EAEnC,OAAOgJ,EAAOnQ,KAAIoC,GAEZqB,EAAQiE,IAAItF,IAAUqB,EAAQgE,GAAG+L,GAC5B,IAAKpR,EAAOhD,KAAM2H,EAAUS,mBAGjCM,EAAW1F,EAAMhD,QACnBoU,EAAwBpR,GAGnBA,IAEX,GArBE0O,cAAe,CACb2C,qBAAsB,CAAC,KACvB7E,eAAcA,KCxHL/C,GAAYX,EAAgB,CAIvC4B,KAAM,CACJ,MACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,SACA,QACA,QACA,OACA,OACA,UACA,MACA,OACA,OACA,MACA,OACA,UACA,MACA,MACA,YACA,QACA,MACA,MACA,KACA,MACA,QACA,YACA,MACA,KACA,QACA,UACA,SACA,QACA,QACA,UACA,OACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,aACA,QACA,gBAGFM,OAAQ,CACN,MACA,QACA,aACA,QACA,mBACA,cACA,MACA,SACA,YACA,SACA,UACA,OACA,SACA,QACA,OACA,QACA,MACA,YACA,eACA,UACA,cACA,qBACA,WACA,cACA,gBACA,iBACA,eACA,iBACA,iBACA,wBACA,wBACA,SACA,UACA,UACA,QACA,OACA,QACA,aACA,UACA,cACA,aACA,kBACA,kBACA,SACA,SACA,YACA,WACA,SACA,YACA,OACA,SACA,SAGFsG,OAAQ,CACN,YACA,aACA,QACA,UACA,eACA,aACA,SACA,SACA,UACA,WACA,SACA,QACA,MACA,eACA,UACA,WACA,QACA,UACA,WACA,SACA,SACA,SACA,SACA,aACA,SACA,YACA,QAGFC,UAAW,CACT,YACA,aACA,UACA,SACA,eACA,UACA,WACA,UACA,aAGFC,QAAS,CACP,eACA,iBACA,iBACA,wBACA,yBAGFC,SAAU,CAAC,UAAW,UAAW,YAAa,gBAE9CvH,SAAU,CAER,kBACA,eACA,eACA,oBACA,WACA,YACA,aACA,UACA,WACA,eACA,gBACA,mBACA,YACA,iBACA,YACA,gBACA,YACA,iBACA,mBACA,MACA,WACA,eACA,iBACA,sBACA,YACA,eACA,yBAGFwH,KAAM,CAAC,aAAc,YAAa,cAElCC,SAAU,CACR,OACA,YACA,MACA,SACA,SACA,WACA,WACA,SACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,SACA,QACA,UACA,QACA,SACA,QACA,SAGFC,QAAS,CACP,SACA,YACA,SACA,OACA,WACA,aACA,mBACA,mBACA,UACA,UACA,UACA,cACA,OACA,SAGFC,WAAY,CACV,oBACA,wBACA,oBACA,mBACA,SACA,UACA,mBACA,kBACA,YACA,YACA,QACA,aACA,cACA,iBACA,oBACA,WACA,YACA,YACA,cACA,YACA,WACA,UACA,aACA,aACA,UACA,gBACA,wBAGF1G,KAAM,CAAC,QAEP0F,IAAK,CACH,gBACA,sBACA,kBACA,wBACA,gCACA,UACA,eACA,qBACA,6BACA,gBACA,sBACA,8BACA,SACA,eACA,qBACA,6BACA,SACA,aACA,YACA,aACA,YACA,YACA,WACA,QACA,UACA,eACA,WACA,qBACA,6BACA,8BACA,QACA,gBAGFpG,KAAM,CACJ,gBACA,YACA,uBACA,4BACA,qBACA,oBACA,qBACA,aACA,kBACA,qBACA,0BACA,eACA,eACA,mBACA,oBACA,oBACA,uBACA,mBACA,sBACA,mBACA,yBACA,4BACA,yBACA,4BACA,sBACA,wBACA,2BACA,eACA,YACA,gBACA,oBACA,kBACA,qBACA,eACA,WACA,sBACA,2BACA,oBACA,mBACA,oBACA,YACA,iBACA,oBACA,yBACA,cACA,kBACA,mBACA,uBACA,0BACA,mBACA,iBACA,oBACA,cACA,cACA,UACA,WACA,gBAGFqH,SAAU,CAAC,UAAW,UAAW,UAAW,UAE5C1G,YAAa,CAEX,WACA,WACA,QACA,UAGFtB,MAAO,CACL,YACA,eACA,YACA,aACA,aACA,eACA,cACA,cACA,iBACA,kBACA,gBACA,eACA,gBACA,kBACA,cACA,cACA,kBACA,aACA,UAGFiI,MAAO,CACL,UACA,QACA,YACA,YACA,aACA,cACA,QACA,YACA,aAGFnI,UAAW,CAET,YACA,MACA,UACA,SACA,UACA,WACA,UACA,WACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,WACA,YACA,mBACA,WACA,kBACA,MACA,MACA,OACA,kBACA,kBACA,eACA,YACA,sBACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WAEA,SACA,aACA,cACA,aACA,MACA,UACA,WACA,WACA,UACA,WACA,UAGF0F,OAAQ,CACN,YACA,aACA,cACA,MACA,aACA,OACA,YACA,QACA,eACA,OACA,cAGF0C,IAAK,CAAC,kBAAmB,uBAEzBC,QAAS,CACP,aACA,aACA,kBACA,kBACA,mBACA,gBACA,eACA,iBACA,kBACA,eACA,cACA,2BACA,uBACA,yBACA,qCACA,yBACA,yBACA,uBACA,yBACA,uBACA,2BACA,sBACA,qBACA,mBACA,mBACA,mBACA,mBACA,cACA,kBACA,iBACA,mBACA,0BACA,oBACA,wBACA,kBACA,oBACA,2BACA,qBACA,sBACA,qBACA,iCACA,qBACA,yBACA,8BACA,uBACA,cACA,qBACA,4BACA,qCACA,yBACA,kBACA,kBACA,wBACA,wBACA,iBACA,yBACA,0BACA,oBACA,kBACA,iBACA,cACA,qBACA,gCACA,0BACA,+BACA,wBACA,0BACA,mBACA,yBACA,wBACA,oBACA,8BACA,wBACA,yBACA,yBACA,sBACA,2BACA,iCACA,kBACA,mBACA,mBACA,+BACA,0BACA,yBACA,sBACA,mBACA,0BACA,wBACA,0BACA,4BACA,YACA,qBACA,yBACA,2BACA,kCACA,iBACA,kBACA,sBACA,eACA,oBACA,cACA,kBACA,kBACA,aACA,iBACA,aACA,kBACA,aACA,aACA,eACA,2BACA,wBACA,oBACA,qBACA,qBACA,cACA,2BACA,OACA,WAGFC,SAAU,CACR,yBACA,4BACA,uBACA,eACA,kBACA,yBACA,mBACA,0BACA,qBACA,yBACA,4BACA,wBACA,+BACA,uBACA,oBACA,8BACA,wBACA,iBACA,mCACA,oCACA,qCACA,sCACA,0BACA,2BACA,4BACA,qBACA,mBACA,2BACA,qBACA,uBACA,gCACA,8BACA,kBACA,kBACA,oBACA,0BACA,0BACA,yBACA,gCACA,0BACA,qCACA,8BACA,sCACA,+BACA,iCACA,0BACA,YACA,eACA,eACA,eACA,yBACA,oBACA,oBACA,aACA,sBACA,eACA,uBACA,uBACA,mBACA,iBACA,gCACA,+BACA,6BACA,4BACA,iCACA,yCACA,yCACA,sCACA,sCACA,mCACA,mCACA,8BACA,oBACA,gBACA,iBACA,kBACA,eACA,iBACA,gBACA,qBACA,gBACA,uBACA,yBACA,uBACA,8BACA,4BACA,mCACA,kBACA,yBACA,kBACA,sBACA,uBACA,cAGFC,QAAS,CACP,qCACA,0BACA,kCAGFC,aAAc,CACZ,gCACA,mCACA,qCACA,wCACA,yBAGFC,MAAO,CAAC,qBACRpD,KAAM,CAAC,QAGP5C,UAAW,CACT,MACA,cACA,YACA,oBACA,UACA,OACA,UACA,UACA,OACA,YACA,UCvtBSjD,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,QACA,WACA,SACA,SACA,MACA,QACA,QACA,YACA,MACA,OACA,QACA,SACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,aACA,YACA,aACA,aACA,KACA,SACA,SACA,YACA,gBACA,WACA,SACA,QACA,UACA,SACA,SACA,MACA,UACA,OACA,UACA,KACA,QACA,OACA,SACA,UACA,WACA,OACA,OACA,UACA,QACA,OACA,YACA,kBACA,QACA,aACA,QACA,QACA,UACA,WACA,UACA,YACA,SACA,UACA,UACA,WACA,SACA,YACA,cACA,eACA,gBACA,WACA,aACA,aACA,cACA,UACA,WACA,aACA,OACA,OACA,SACA,QACA,MACA,OACA,UACA,kBACA,eACA,eACA,iBACA,eACA,oBACA,eACA,SACA,QACA,OACA,WACA,MACA,aACA,MACA,UACA,UACA,UACA,WACA,aACA,WACA,UACA,SACA,YACA,aACA,UACA,QACA,OACA,SACA,aACA,UACA,UACA,WACA,KACA,WACA,SACA,SACA,OACA,OACA,OACA,SACA,WACA,YACA,MACA,OACA,SACA,QACA,SACA,UACA,YACA,YACA,UACA,SACA,UACA,aACA,YACA,WACA,UACA,QACA,SACA,QACA,SACA,WACA,QACA,QACA,YACA,MACA,QACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,YACA,SACA,QACA,UACA,WACA,QACA,WACA,SACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,WACA,SACA,KACA,UACA,YACA,YACA,QACA,UACA,UACA,WACA,YACA,SACA,QACA,QACA,QACA,cACA,SACA,UACA,MACA,UACA,YACA,WACA,OACA,UACA,KACA,SACA,YACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,UACA,YACA,QACA,OACA,QACA,OACA,QACA,SACA,OACA,QACA,YACA,iBACA,WACA,OACA,SACA,SACA,UACA,QACA,eACA,WACA,SACA,SACA,WACA,OACA,QACA,OACA,OACA,QACA,WACA,UACA,QACA,MACA,OACA,MACA,MACA,OACA,OACA,KACA,OACA,YACA,aACA,MACA,UACA,SACA,UACA,SACA,OACA,SACA,QACA,UACA,SACA,KACA,MACA,SACA,OACA,MACA,KACA,OACA,WACA,SACA,UACA,KACA,QACA,aACA,SACA,MACA,QACA,OACA,WACA,UACA,aACA,QACA,QACA,WACA,SACA,UACA,YACA,UACA,WACA,UACA,QACA,SACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,QACA,aACA,aACA,YACA,aACA,UACA,cACA,QACA,QACA,OACA,OACA,WACA,UACA,YACA,MACA,aACA,cACA,UACA,UACA,WACA,UACA,SACA,aACA,UACA,UACA,QACA,UACA,WACA,SACA,YACA,UACA,SACA,QACA,OACA,WACA,SACA,UACA,WACA,MACA,OACA,OACA,YACA,SACA,UACA,SACA,SACA,SACA,WACA,SACA,WACA,YACA,eACA,SACA,UACA,eACA,MACA,QACA,OACA,QACA,OACA,UACA,SACA,OACA,WACA,WACA,OACA,MACA,SACA,aACA,QACA,YACA,aACA,QACA,SACA,UACA,SACA,SACA,QACA,eACA,YACA,UACA,YACA,QACA,SACA,QACA,SACA,cACA,aACA,OACA,WACA,YACA,OACA,OACA,OACA,OACA,YACA,KACA,WACA,cACA,YACA,QACA,UACA,OACA,OACA,WACA,UACA,OACA,QACA,UACA,YACA,cACA,cACA,QACA,SACA,UACA,WACA,WACA,QACA,SACA,OACA,QACA,SACA,QACA,WACA,YACA,QACA,SACA,UACA,WACA,UACA,UACA,UACA,OACA,QACA,WACA,OACA,QACA,aACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,MACA,gBACA,YACA,aACA,YACA,YACA,gBACA,WACA,QACA,UACA,eACA,WACA,OACA,MACA,UCxcEvD,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBAGA,cACA,SAEA,MAEA,0DACA,2CACA,8EAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,gBACA,mBAEA,qBAEA,yBAEA,iCACA,gCACA,kBACA,YACA,+BACA,4BACA,iBACA,kBACA,uBACA,wBAEA,0BAEA,aACA,QAEA,QACA,kBACA,kBACA,mBACA,iBACA,2BACA,eACA,sBACA,kBACA,6BACA,sBACA,iBACA,cACA,cACA,iBACA,qBACA,0BACA,iBACA,uBACA,wBACA,eACA,kBACA,oBACA,aACA,gBACA,aACA,eACA,iBACA,eACA,mBACA,qBACA,eACA,mBACA,kCACA,+BACA,2BACA,6BACA,gBACA,aACA,aACA,qBACA,aACA,UACA,QACA,OACA,aACA,QACA,UACA,UACA,SACA,kBACA,OACA,uBACA,mBACA,cACA,mBACA,oBACA,kBACA,gBACA,uBACA,mBACA,8BACA,uBACA,kBACA,eACA,eACA,kBACA,kBACA,wBACA,yBACA,gBACA,mBACA,qBACA,cACA,cACA,gBACA,kBACA,gBACA,oBACA,sBACA,oBACA,mCACA,gCACA,4BACA,8BACA,mBACA,iBACA,cACA,cACA,sBACA,aACA,UACA,UACA,KACA,qBACA,iBACA,YACA,iBACA,kBACA,gBACA,cACA,qBACA,iBACA,4BACA,qBACA,gBACA,aACA,aACA,gBACA,yBACA,gBACA,sBACA,uBACA,aACA,cACA,iBACA,mBACA,YACA,eACA,YACA,cACA,gBACA,cACA,kBACA,oBACA,kBACA,iCACA,8BACA,0BACA,4BACA,iBACA,eACA,YACA,YACA,oBACA,YACA,UACA,UACA,QACA,QACA,wBACA,SACA,OACA,OACA,OACA,SACA,UACA,sBACA,iBACA,4BACA,UACA,oBACA,QACA,SACA,WACA,oBACA,wBACA,YACA,iBACA,cACA,kBACA,WACA,4BACA,kBACA,OACA,oBACA,WACA,WAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,gDACA,kCAEA,kDAIW0L,GAA6B,CACxCzF,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvB8I,qBAAqB,EACrBvF,YAAa,CAAC,MACdC,YAAa,CACX,KACA,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC7B,CAAED,MAAO,QAASC,SAAU,CAAC,KAAMC,eAAe,GAClD,CAAEF,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,CAAEH,MAAO,QAASC,SAAU,CAAC,QAC1CG,WAAY,CAAEvF,KAAM,KACpByF,WAAY,CAAE6C,SAAU,CAAC,MACzBxC,UAAW,CAET,IACA,IACA,KACA,MACA,IAEA,KAEA,IACA,IACA,IACA,IACA,KACA,KAEA,MACA,MACA,OACA,OAEA,MACA,KACA,KACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,KACA,KACA,KAEA,IACA,KACA,KACA,KACA,MACA,KACA,MACA,KAEA,KAEA,MACA,MAEA,KACA,MACA,MACA,OAEA,IACA,KACA,KACA,MAEA,MAEA,KAEA,MACA,KAEA,KACA,KACA,MACA,MACA,OACA,OACA,QACA,QAEA,OAGJa,cAAe,CACb2C,qBAAsB,CAAC,MACvB7E,eAAcA,KCtWL/C,GAAYX,EAAgB,CAEvCc,UAAW,CACT,YACA,8BACA,MACA,QACA,UACA,MACA,SACA,MACA,kBACA,cACA,aACA,MACA,WACA,WAGFE,MAAO,CAAC,QAAS,eAAgB,gBAAiB,mBAAoB,iBAAkB,YAExFC,QAAS,CAAC,UAAW,SAAU,WAAY,WAE3CqB,YAAa,CAAC,WAAY,SAAU,WAAY,QAAS,MAAO,OAAQ,UAExEoH,SAAU,CACR,aACA,eACA,mBACA,eACA,eACA,oBACA,WACA,qBACA,uBACA,iBACA,UACA,WACA,YACA,aACA,UACA,UACA,eACA,WACA,iBACA,WACA,UACA,YACA,gBACA,qBACA,4BACA,kBACA,uBACA,4BACA,WACA,eACA,SAGFC,QAAS,CACP,UACA,WACA,eACA,cACA,WACA,UACA,cACA,YACA,YACA,eACA,YACA,aACA,cACA,aACA,cACA,sBACA,gBACA,eACA,YACA,aACA,eACA,cACA,cACA,oBACA,aACA,cACA,cACA,YACA,kBACA,aACA,aACA,cACA,cACA,aACA,eACA,kBACA,kBACA,kBACA,kBACA,iBACA,mBACA,gBACA,kBACA,iBACA,cACA,kBACA,aACA,cACA,aACA,YACA,kBACA,cACA,wBACA,0BACA,OACA,kBACA,cACA,eACA,iBACA,aACA,UACA,UACA,WACA,WACA,aACA,YACA,mBACA,sBACA,eACA,eACA,iBACA,WACA,YACA,YACA,aACA,iBACA,aACA,cACA,aACA,cACA,UACA,gBACA,aACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,OACA,UACA,UACA,gBAGFnI,KAAM,CAAC,WAAY,YAAa,WAAY,MAAO,MAAO,OAAQ,QAElEoI,YAAa,CAAC,MAAO,oBAAqB,kBAAmB,eAE7DjI,KAAM,CACJ,gBACA,sBACA,oBACA,kCACA,yBACA,aACA,kBAGFC,KAAM,CACJ,MACA,OACA,OACA,OACA,QACA,OACA,UACA,OACA,MACA,MACA,UACA,OACA,QACA,SACA,MACA,QACA,KACA,MACA,MACA,KACA,QACA,UACA,SACA,QACA,MACA,OACA,OACA,MACA,SACA,SAGFiI,gBAAiB,CAAC,iBAElB3H,OAAQ,CACN,QACA,YACA,QACA,qBACA,cACA,mBACA,YACA,MACA,UACA,SACA,QACA,aACA,UACA,OACA,QACA,MACA,SACA,QACA,OACA,OACA,QACA,aACA,eACA,WACA,cACA,gBACA,eACA,eACA,iBACA,gBACA,SACA,UACA,YACA,UACA,QACA,UACA,aACA,SACA,SACA,YACA,UACA,YACA,OACA,SAGF4H,UAAW,CACT,oBACA,gBACA,WACA,YACA,aACA,UACA,aACA,WACA,aACA,YACA,YACA,cACA,aACA,eAGFtD,OAAQ,CACN,MACA,QACA,YACA,aACA,cACA,aACA,MACA,OACA,UACA,MACA,SACA,MACA,YACA,QACA,eACA,kBACA,kBACA,OACA,kBACA,aACA,cACA,aACA,MACA,WACA,WAGFuD,SAAU,CAAC,OAAQ,UAAW,UAAW,UAAW,YAAa,kBAAmB,uBAEpFX,SAAU,CACR,wBACA,0BACA,uBACA,kBACA,oBACA,uBACA,iBACA,cAGFD,QAAS,CACP,sBACA,mBACA,oBACA,iBACA,kBACA,eACA,kBACA,2BACA,yBACA,uBACA,sBACA,iBACA,cACA,6BACA,0BACA,gCACA,qBACA,kBACA,oBACA,mBACA,uBACA,eACA,YACA,OACA,WAEF5F,UAAW,CACT,UACA,UACA,OACA,YACA,UACA,oBACA,QACA,WACA,aC1VSjD,GAAWN,EAAgB,CAEtCoG,SAAU,CACR,SACA,SACA,MACA,iBACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,OACA,QACA,SACA,aACA,SACA,QACA,UACA,aACA,UACA,SACA,OACA,UACA,WACA,KACA,SACA,SACA,UACA,aACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,WACA,SACA,QACA,KACA,YACA,QACA,OACA,KACA,SACA,WACA,UACA,OACA,QACA,YACA,iBACA,MACA,OACA,QACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,MACA,KACA,OACA,OACA,QACA,QACA,WACA,WACA,YACA,UACA,cACA,UACA,UACA,UACA,aACA,YACA,SACA,UACA,UACA,UACA,WACA,OACA,SACA,QACA,MACA,OACA,OACA,YACA,KACA,MACA,WACA,OACA,SACA,QACA,UACA,SACA,WAGF4D,qBAAsB,CACpB,gBACA,iBACA,eACA,aACA,cACA,WACA,SACA,eACA,aACA,mBACA,eACA,eACA,UACA,aACA,aACA,mBAGFC,eAAgB,CAAC,WAAY,aAAc,WAAY,SAAU,cAEjEC,iBAAkB,CAChB,SACA,MACA,YACA,aACA,YACA,OACA,OACA,UACA,OAGFC,eAAgB,CACd,gBACA,cACA,YACA,WACA,uBACA,oBACA,iBAGFC,sBAAuB,CAAC,QAAS,OAAQ,OAAQ,QAEjDC,eAAgB,CAAC,WAAY,YAAa,SAAU,OAEpDC,qBAAsB,CACpB,MACA,OACA,WACA,QACA,WACA,MACA,UACA,WACA,WACA,YACA,UACA,WAEF7J,KAAM,CAEJ,eACA,aACA,WAEA,OACA,OACA,MACA,YAEA,eAUF8C,UAAW,CAAC,SAAU,UC7LlBC,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SAGA,cACA,SAEA,MAEA,0CACA,mFAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,gBAEA,yBAEA,cACA,qBACA,eACA,gBACA,YACA,gBACA,eACA,OACA,SAEA,mBAEA,QACA,iBACA,kBACA,2BACA,cACA,0BACA,kBACA,eACA,aACA,UACA,UACA,sBACA,sBACA,QACA,OACA,SACA,QACA,UACA,SACA,OACA,kBACA,mBACA,2BACA,yBACA,wBACA,kBACA,eACA,iBACA,eACA,mBACA,gBACA,cACA,aACA,UACA,iBACA,gBACA,iBACA,gBACA,aACA,eACA,aACA,yBACA,iBACA,cACA,YACA,YACA,OACA,UACA,UACA,QACA,QACA,OACA,UACA,4BACA,QACA,SACA,WACA,cACA,4BACA,8BACA,OACA,sBACA,aACA,kBACA,iBACA,aACA,YACA,oBACA,SACA,WAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,YAAa,UAE7E8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CAEpC,UAEA,eACA,iBAEA,2BAIWyM,GAA2B,CACtCxG,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CAAC,SACdI,WAAY,CAAC,SACbC,WAAY,CAAExF,MAAO,KACrB0F,WAAY,CAAE6C,SAAU,CAAC,MACzBxC,UAAW,CACT,IACA,IACA,IACA,KACA,MACA,IACA,IAEA,IACA,KACA,KACA,KACA,OAGJa,cAAe,CACb2C,qBAAsB,CAAC,MACvB7E,eAAcA,KC3KLpD,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,MACA,QACA,MACA,QACA,UACA,MACA,OACA,MACA,UACA,QACA,KACA,MACA,KACA,gBACA,UACA,OACA,SACA,UACA,KACA,QACA,UACA,OACA,SACA,QACA,QACA,UACA,YACA,UACA,UACA,aACA,SACA,UACA,UACA,SACA,UACA,cACA,UACA,cACA,aACA,OACA,SACA,QACA,OACA,UACA,eACA,eACA,oBACA,eACA,OACA,WACA,YACA,MACA,eACA,UACA,SACA,YACA,OACA,WACA,MACA,cACA,YACA,WACA,aACA,MACA,OACA,SACA,UACA,SACA,WACA,SACA,SACA,WACA,WACA,UACA,QACA,QACA,SACA,SACA,aACA,QACA,cACA,YACA,MACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,QACA,QACA,WACA,OACA,KACA,SACA,SACA,KACA,QACA,UACA,QACA,SACA,cACA,YACA,WACA,OACA,KACA,QACA,OACA,OACA,aACA,UACA,OACA,UACA,OACA,OACA,QACA,OACA,QACA,WACA,OACA,QACA,UACA,QACA,MACA,UACA,QACA,SACA,QACA,OACA,YACA,aACA,UACA,KACA,MACA,OACA,QACA,KACA,OACA,SACA,UACA,KACA,QACA,MACA,QACA,eACA,OACA,WACA,UACA,YACA,QACA,YACA,cACA,aACA,UACA,UACA,WACA,YACA,UACA,aACA,aACA,QACA,QACA,QACA,eACA,eACA,UACA,SACA,aACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,OACA,QACA,WACA,SACA,MACA,OACA,SACA,SACA,SACA,OACA,YACA,QACA,kBACA,eACA,OACA,OACA,SACA,OACA,OACA,SACA,QACA,aACA,SACA,WACA,SACA,SACA,YACA,QACA,SACA,gBACA,YACA,aACA,OACA,KACA,QACA,WACA,cACA,eACA,OACA,OACA,WACA,YACA,YACA,UACA,SACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,SACA,OAEA,UACA,YACA,WACA,WACA,UACA,OACA,WACA,aACA,aACA,SACA,UACA,cACA,SACA,UACA,gBACA,QACA,WACA,eACA,QACA,cACA,cACA,SACA,QACA,QACA,gBACA,SACA,SACA,KACA,WACA,SACA,YACA,OACA,SACA,OACA,QACA,WACA,YACA,gBChRSpG,GAAYX,EAAgB,CAIvCc,UAAW,CAET,wBACA,oBACA,MACA,UACA,SACA,UACA,WACA,UACA,eACA,cACA,OACA,QACA,QACA,QACA,WACA,mBACA,YACA,aACA,QACA,QACA,cACA,WACA,cACA,WACA,OACA,aACA,MACA,SACA,OACA,MACA,SACA,aACA,aACA,oBACA,WAEA,MACA,SACA,aACA,cACA,MACA,UACA,WACA,YAGF0F,OAAQ,CACN,YACA,aACA,MACA,OACA,YACA,QACA,eACA,OACA,cAGFxF,MAAO,CACL,QACA,iBACA,iBACA,eACA,kBACA,aACA,YACA,YACA,iBACA,eACA,eACA,cACA,iBACA,aACA,UACA,WACA,UACA,QACA,cAGFlM,IAAK,CACH,aACA,aACA,MACA,aACA,cACA,kBACA,mBACA,WACA,aACA,cAGFsM,SAAU,CACR,aACA,eACA,eACA,oBACA,oBACA,mBACA,WACA,cACA,sBACA,YACA,WACA,aACA,WACA,MACA,aACA,YACA,YACA,UACA,gBACA,qBACA,OACA,WACA,YACA,mBACA,gBACA,iBACA,mBACA,SACA,QACA,iBACA,WACA,MACA,UACA,SACA,iBACA,mBACA,mBACA,oBACA,UACA,eACA,oBACA,mBACA,QACA,YACA,cACA,cACA,eACA,iBACA,UACA,aACA,SACA,QAGFO,KAAM,CACJ,YACA,kBACA,oBACA,mBACA,aACA,iBACA,WAGFlB,KAAM,CACJ,MACA,OACA,QACA,YACA,aACA,QACA,OACA,QACA,cACA,OACA,QACA,QACA,SACA,SACA,MACA,SACA,YACA,UACA,aACA,UACA,SACA,QACA,cACA,OACA,OACA,UACA,OACA,cACA,mBACA,MACA,SACA,YACA,OACA,MACA,OACA,MACA,QACA,kBACA,mBACA,eACA,OACA,UACA,UACA,SAEA,MACA,MACA,QACA,YACA,cACA,QACA,QACA,SACA,gBACA,gBACA,WACA,SACA,OACA,MACA,QACA,UACA,SACA,eACA,0BACA,yBACA,kBACA,QACA,MACA,QACA,YACA,SACA,cACA,QACA,OACA,SACA,cACA,KACA,SACA,MACA,QACA,QACA,OACA,QACA,OACA,QACA,aACA,eACA,MACA,MACA,8BACA,eACA,QACA,WACA,MACA,OACA,eACA,UACA,YACA,KACA,OACA,aACA,mBACA,WACA,WACA,MACA,QACA,SACA,UACA,cACA,OACA,QACA,SACA,UACA,iBACA,qBACA,cACA,iBACA,SACA,UACA,UACA,QACA,OACA,QACA,OACA,QACA,gBACA,YACA,MACA,OACA,OACA,YACA,aACA,qBACA,OACA,SACA,MACA,OACA,WACA,UACA,QACA,qBACA,QACA,OACA,QACA,SACA,YACA,kBACA,MACA,OACA,YACA,UACA,SACA,iBACA,mBACA,YACA,OACA,UACA,aACA,SACA,QACA,WACA,QACA,QACA,OACA,UACA,eACA,QACA,gBACA,eACA,cACA,YACA,aACA,eACA,cACA,eACA,WACA,YAEF0F,KAAM,CAAC,QAEPqE,WAAY,CAAC,WAAY,UAGzBjH,UAAW,CACT,UACA,MACA,UAEA,aC5VEC,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,UACA,aACA,gBACA,QAGA,oCACA,SAGA,qCAGA,2BACA,yBAEA,0EACA,4CAGI4F,GAAiB5F,EAAc,CAEnC,yBAEA,cACA,cACA,0BACA,YACA,gBACA,eAEA,iBAEA,eACA,iBACA,aACA,kBACA,kBACA,gBACA,gBACA,YACA,eACA,eAEA,cACA,QACA,YACA,UAEA,WACA,UACA,gBACA,cACA,cACA,oBACA,oBACA,iBACA,iBACA,YACA,WACA,UACA,gBACA,mBACA,QACA,eACA,oBACA,iBACA,iBACA,kBACA,sBACA,cACA,qBACA,aACA,kBAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,6CAEA,4BACA,sCAGI+F,GAAkB/F,EAAc,CAAC,YAAa,YAAa,cAAe,2BAGnE2M,GAAwB,CACnC1G,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfoD,aAAa,EACbjD,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBuD,YAAa,CAAC,MACdC,YAAa,CACX,QACA,QACA,CAAEC,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,GACxD,CAAEF,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,MACbuC,cAAe,CAAC,CAAE1C,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAC/DS,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,KAAM,IAAK,KAAM,MAC7DC,YAOJ,SAAqBC,GACnB,OAAOA,EAAOnQ,KAAI,CAACoC,EAAOpB,KACxB,MAAMoP,EAAYD,EAAOnP,EAAI,IAAMmG,EAC7BmL,EAAYnC,EAAOnP,EAAI,IAAMmG,EAGnC,OAAI1D,EAAQoE,OAAOzF,IAAUkQ,EAAUlT,OAAS2H,EAAU6O,WAEjD,IAAKxT,EAAOhD,KAAM2H,EAAUgB,wBAIlB,UAAf3F,EAAMkB,MAAoBlB,EAAMhD,OAAS2H,EAAUS,kBAC5B,eAAnB4I,EAAU9M,MAA4C,eAAnBgP,EAAUhP,KAM9ClB,EAJI,IAAKA,EAAOhD,KAAM2H,EAAU4J,WAAYrN,KAAMlB,EAAM8E,IAInD,GAEhB,GA1BE4J,cAAe,CACblC,eAAcA,KCxIL/C,GAAYX,EAAgB,CAEvCgG,OAAQ,CACN,MACA,UACA,OACA,WACA,SACA,OACA,MACA,SACA,MACA,QACA,oBACA,SACA,OACA,aACA,SACA,iBACA,QACA,QACA,SACA,SACA,QACA,SACA,aACA,UACA,QACA,QACA,OACA,UACA,2BACA,4BACA,gBACA,mBACA,iBACA,SACA,YACA,gBACA,OACA,SACA,UACA,WACA,QACA,YAGFlF,UAAW,CAAC,MAAO,QAAS,eAAgB,MAAO,MAAO,MAAO,SAEjEM,SAAU,CAAC,OAAQ,OAAQ,WAAY,YAAa,YAAa,YAEjEoF,OAAQ,CACN,aACA,OACA,aACA,eACA,YACA,QACA,MACA,OACA,cACA,aACA,aAGF5E,KAAM,CACJ,OACA,QACA,OACA,QACA,OACA,QACA,QACA,OACA,UACA,MACA,OACA,UACA,MACA,QACA,KACA,MACA,MACA,QACA,OACA,MACA,KACA,MACA,QACA,UACA,MACA,OACA,OACA,MACA,OACA,SAGFD,KAAM,CACJ,OACA,aACA,oBACA,oBACA,eACA,cACA,cACA,aACA,cACA,eACA,WACA,YACA,YACA,aACA,aACA,mBACA,oBACA,YACA,aAEFwE,KAAM,CAAC,QAIP5C,UAAW,CACT,YACA,UACA,oBACA,QACA,mBACA,WACA,UACA,aCnISjD,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,QACA,SACA,MACA,QACA,MACA,QACA,MACA,MACA,MACA,QACA,SACA,UACA,KACA,MACA,SACA,gBACA,SACA,QACA,UACA,KACA,UACA,OACA,OACA,QACA,UACA,SACA,SACA,WACA,aACA,SACA,QACA,UACA,eACA,eACA,oBACA,WACA,UACA,aACA,WACA,SACA,OACA,SACA,WACA,KACA,OACA,OACA,OACA,MACA,SACA,SACA,UACA,YACA,SACA,UACA,OACA,SACA,QACA,YACA,MACA,UACA,OACA,OACA,YACA,OACA,QACA,SACA,SACA,KACA,SACA,YACA,KACA,QACA,UACA,YACA,QACA,SACA,UACA,YACA,OACA,KACA,SACA,OACA,MACA,OACA,OACA,OACA,QACA,QACA,eACA,UACA,KACA,MACA,UACA,UACA,OACA,QACA,KACA,SACA,KACA,OACA,OACA,KACA,QACA,SACA,QACA,OACA,YACA,OACA,SACA,YACA,UACA,QACA,QACA,QACA,YACA,aACA,SACA,UACA,UACA,SACA,UACA,WACA,YACA,QACA,WACA,MACA,OACA,YACA,SACA,MACA,QACA,OACA,YACA,OACA,OACA,KACA,cACA,UACA,YACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,OACA,QACA,SACA,OACA,aCvJEvD,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,0EACA,eACA,SAEA,MAEA,iDACA,oDAGI4F,GAAiB5F,EAAc,CAEnC,qEAEA,cAEA,yBAEA,cACA,eACA,gBACA,kBACA,YAEA,eAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAGhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,gDACA,oCAGW6M,GAAyB,CACpC5G,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,QACA,CAAEC,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAIrDC,WAAY,CAAC,QAAS,KAAM,MAE5BG,WAAY,CAAEC,YAAY,EAAM4C,SAAU,CAAC,KAAM3C,MAAO,CAAC,IAAK,IAAK,MACnEG,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MAAO,OAEjEa,cAAe,CACblC,eAAcA,KCnFL/C,GAAYX,EAAgB,CAEvCkJ,IAAK,CAAC,YAEN1C,OAAQ,CAAC,OAAQ,aAAc,eAAgB,YAAa,cAE5DgB,QAAS,CACP,WACA,oBACA,iBACA,UACA,cACA,mBACA,eACA,cACA,MACA,MACA,KACA,MACA,QACA,OACA,QACA,OACA,UACA,gBAGFtF,OAAQ,CACN,YACA,kBACA,QACA,QACA,UACA,YACA,kBACA,OACA,UACA,YACA,gBAGFd,SAAU,CAAC,eAAgB,eAAgB,YAAa,oBAAqB,kBAK7EN,UAAW,CACT,QACA,MACA,MACA,MACA,MAIA,aACA,cACA,WACA,UACA,UACA,SACA,eACA,YACA,aACA,OACA,aACA,iBACA,aACA,UACA,YACA,YACA,WACA,WACA,WACA,kBACA,mBAOFqF,KAAM,CAAC,QAEPqE,WAAY,CAAC,WAAY,UAEzBI,YAAa,CAAC,QAAS,MAAO,MAAO,MAAO,OAAQ,OAAQ,QAG5DrH,UAAW,CACT,YACA,OACA,oBACA,eACA,UACA,yBACA,oBACA,OACA,qBACA,gBACA,QACA,6BACA,wBACA,gBACA,kCACA,qBACA,QACA,SACA,iBACA,YACA,sBACA,OACA,UACA,UACA,MACA,OACA,eCpHSjD,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,MACA,WACA,QACA,MACA,MACA,QACA,KACA,aACA,aACA,KACA,SACA,gBACA,QACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,WACA,OACA,OACA,YACA,QACA,OACA,QACA,WACA,UACA,SACA,SACA,YACA,UACA,aACA,gBACA,SACA,QACA,OACA,UACA,kBACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,UACA,UACA,SACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,WACA,SACA,QACA,SACA,OACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,MACA,UACA,OACA,OACA,OACA,WACA,MACA,SACA,QACA,QACA,SACA,OACA,OACA,WACA,KACA,YACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,WACA,OACA,KACA,WACA,QACA,UACA,UACA,OACA,OACA,aACA,QACA,QACA,SACA,QACA,SACA,SACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,MACA,OACA,SACA,UACA,KACA,MACA,KACA,OACA,OACA,QACA,MACA,QACA,OACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,QACA,QACA,OACA,YACA,MACA,aACA,cACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,OACA,YACA,QACA,SACA,SACA,SACA,SACA,YACA,eACA,MACA,UACA,WACA,OACA,WACA,MACA,eACA,WACA,aACA,QACA,SACA,cACA,YACA,SACA,cACA,QACA,cACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,cACA,QACA,UACA,OACA,UACA,QACA,SACA,UACA,SACA,SACA,OACA,QACA,QACA,SACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,UC5NEvD,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAGpC,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBAGA,cACA,SACA,MAGA,0BACA,+DACA,iBAGI4F,GAAiB5F,EAAc,CAEnC,SACA,mBAEA,cAEA,aAEA,cACA,aACA,gBACA,gBACA,YACA,iBACA,uBACA,YACA,kCACA,eAEA,iBAEA,aACA,cACA,OACA,eAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CAAC,gDAAiD,2BAE3E+M,GAAsB,CACjC9G,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,CAAEC,MAAO,WAAYC,SAAU,CAAC,IAAK,OACrC,CAAED,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAErDC,WAAY,CAAC,QAAS,MACtBG,WAAY,CAAEC,YAAY,GAC1BI,UAAW,CAAC,OAEda,cAAe,CACblC,eAAcA,KC5FL/C,GAAYX,EAAgB,CAOvC+G,IAAK,CACH,MACA,OACA,YACA,YACA,kBACA,uBACA,oBACA,aACA,YACA,iBACA,YACA,iBACA,eACA,kBACA,aACA,YACA,YACA,iBACA,eACA,aACA,cACA,OACA,OACA,QACA,cACA,MACA,MACA,WACA,YACA,oBACA,eACA,wBACA,oBACA,oBACA,uBACA,cACA,kBACA,qBACA,cACA,aACA,iBACA,sBACA,iCACA,cACA,YACA,WACA,UACA,cACA,OACA,OACA,OACA,UACA,cACA,WACA,MACA,WACA,WACA,YACA,QACA,eACA,SACA,YACA,WACA,oBACA,kBACA,OACA,MACA,OACA,oBACA,QACA,WACA,YACA,aACA,QACA,YACA,kBACA,eACA,iBACA,iBACA,eACA,oBACA,mBACA,eACA,OACA,WACA,YACA,cACA,aACA,aACA,MACA,eACA,cACA,cACA,UACA,aACA,MACA,MACA,IACA,aACA,mBACA,kCACA,QACA,MACA,UACA,WACA,SACA,cACA,UACA,QACA,SACA,kBACA,gBACA,YACA,cACA,cACA,iBACA,qBACA,qBACA,wBACA,wBACA,WACA,kBACA,kBACA,oBACA,yBACA,+BACA,gBACA,sBACA,YACA,iBACA,6BACA,0BACA,0BACA,yBACA,iBACA,qBACA,WACA,wBACA,mBACA,cACA,YACA,WACA,YACA,cACA,cACA,OACA,yBACA,KACA,QACA,WACA,2BACA,mBACA,qBACA,YACA,cACA,iBACA,SACA,gBACA,sBACA,iBACA,oBACA,cACA,eACA,sBACA,cACA,aACA,aACA,YACA,aACA,WACA,MACA,oBACA,aACA,OACA,mBACA,0BACA,yBACA,kBACA,QACA,SACA,uBACA,yBACA,0BACA,oBACA,UACA,KACA,YACA,iBACA,MACA,QACA,OACA,QACA,OACA,QACA,aACA,kBACA,MACA,UACA,aACA,cACA,aACA,mBACA,WACA,YACA,aACA,eACA,MACA,SACA,MACA,QACA,mBACA,cACA,MACA,SACA,SACA,MACA,QACA,eACA,wBACA,UACA,MACA,SACA,aACA,YACA,aACA,MACA,YACA,QACA,SACA,oBACA,WACA,qBACA,kBACA,iBACA,iBACA,eACA,KACA,WACA,MACA,QACA,cACA,UACA,UACA,OACA,SACA,OACA,SACA,aACA,eACA,iBACA,qBACA,cACA,kBACA,iBACA,eACA,UACA,iBACA,aACA,SACA,SACA,UACA,UACA,MACA,QACA,aACA,OACA,QACA,SACA,WACA,OACA,SACA,SACA,UACA,OACA,oBACA,MACA,WACA,QACA,UACA,uBACA,qBACA,QACA,aACA,eACA,oBACA,oBACA,oBACA,OACA,cACA,SACA,aACA,cACA,SACA,UACA,cACA,YACA,cACA,YACA,cACA,cACA,gBACA,cACA,aACA,gBACA,eACA,cACA,cACA,cACA,cACA,mBACA,YACA,kBACA,gBACA,sBACA,eACA,kBACA,oBACA,mBACA,mBACA,kBACA,gBACA,cACA,aACA,YACA,cACA,aACA,YACA,kBACA,gBACA,gBACA,mBACA,qBACA,eACA,cACA,WACA,YACA,YACA,aACA,YACA,gBACA,mBACA,aACA,WACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,SACA,YACA,MACA,MACA,OACA,cACA,qBACA,gBACA,kBACA,UACA,YACA,YACA,eACA,mBACA,mBACA,UACA,UACA,sBACA,sBACA,cACA,SACA,gBACA,gBACA,aACA,kBACA,yBACA,eACA,cACA,UACA,YACA,iBACA,mBACA,YACA,OACA,aACA,WACA,MACA,WACA,SACA,QACA,aACA,aACA,uBACA,mBACA,wBACA,mBACA,mBACA,uBACA,oBACA,OACA,sBACA,oBACA,WACA,UACA,WACA,UACA,OACA,eACA,eACA,wBACA,wBACA,gBACA,YACA,WACA,OACA,eACA,MACA,MACA,YAGF+D,WAAY,CAAC,aAAc,QAAS,OAAQ,eAAgB,OAAQ,UAAW,UC7apExK,GAAWN,EAAgB,CAEtC+G,IAAK,CACH,SACA,MACA,QACA,QACA,MACA,QACA,UACA,MACA,MACA,QACA,KACA,MACA,KACA,gBACA,YACA,UACA,OACA,KACA,OACA,UACA,OACA,WACA,SACA,UACA,UACA,SACA,YACA,cACA,aACA,cACA,SACA,QACA,OACA,UACA,eACA,eACA,OACA,aACA,UACA,SACA,UACA,SACA,OACA,OACA,WACA,aACA,WACA,cACA,SACA,OACA,OACA,QACA,WACA,MACA,QACA,SACA,SACA,YACA,UACA,SACA,UACA,QACA,QACA,QACA,QACA,YACA,MACA,OACA,OACA,YACA,QACA,UACA,SACA,WACA,QACA,WACA,SACA,SACA,SACA,KACA,YACA,UACA,QACA,QACA,SACA,YACA,WACA,OACA,UACA,KACA,KACA,YACA,OACA,OACA,aACA,cACA,OACA,MACA,OACA,OACA,UACA,UACA,OACA,QACA,OACA,QACA,QACA,UACA,QACA,UACA,UACA,kBACA,eACA,WACA,UACA,OACA,MACA,MACA,OACA,OACA,KACA,OACA,MACA,OACA,QACA,SACA,KACA,SACA,OACA,KACA,MACA,OACA,SACA,KACA,QACA,aACA,QACA,SACA,OACA,WACA,YACA,aACA,UACA,OACA,OACA,UACA,MACA,UACA,YACA,YACA,UACA,aACA,aACA,QACA,SACA,QACA,OACA,YACA,UACA,SACA,aACA,QACA,UACA,WACA,YACA,SACA,QACA,OACA,QACA,WACA,SACA,MACA,OACA,UACA,SACA,SACA,UACA,WACA,OACA,SACA,eACA,UACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,SACA,SACA,SACA,QACA,SACA,cACA,OACA,OACA,OACA,OACA,YACA,KACA,WACA,cACA,OACA,OACA,UACA,YACA,cACA,gBACA,QACA,SACA,UACA,YACA,SACA,SACA,MACA,OACA,QACA,QACA,QACA,OACA,WACA,QACA,SACA,UACA,OACA,OACA,QACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QAIFgE,MAAO,CACL,SACA,MACA,UACA,WACA,UACA,UACA,OACA,UACA,OACA,SACA,cACA,UACA,UACA,gBACA,WACA,YACA,OACA,YACA,UACA,OACA,MACA,QACA,MACA,OACA,WACA,YACA,WACA,OACA,YACA,aACA,aACA,cACA,QACA,aACA,WACA,cCnREvH,GAAiB1F,EAAc,CAAC,4BAGhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBAGA,cACA,SAEA,MAEA,0CACA,+BAEA,kBACA,WACA,oBACA,qBACA,cACA,UACA,SACA,WAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,0BACA,6BACA,0BACA,4BACA,YACA,kCACA,iBACA,UAEA,iBAGA,eACA,0BACA,aACA,gBACA,cACA,cACA,yBACA,YACA,YAEA,UACA,UACA,kBACA,0BACA,MAEA,mBACA,oBACA,iBACA,kBAEA,4BACA,gBACA,cACA,WACA,gBAEA,cACA,oBACA,qBACA,mBACA,gCACA,cACA,eACA,gBACA,eACA,iBACA,aACA,qBACA,mBACA,iBACA,iBAKI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAII8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CAAC,oCAE1BkN,GAAwB,CACnCjH,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GAKvBuD,YAAa,CAAC,KAAM,MAGpBC,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC7B,CAAED,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAGrDC,WAAY,CAAC,SACbG,WAAY,CAAEC,YAAY,GAC1BI,UAAW,CACT,IACA,KACA,IACA,KAEA,IACA,IACA,MAIJa,cAAe,CACblC,eAAcA,KC9JL/C,GAAYX,EAAgB,CAEvCc,UAAW,CACT,wBACA,MACA,eACA,QACA,YACA,WACA,cACA,MACA,MACA,QACA,SACA,MACA,MACA,QAEFmK,SAAU,CACR,YACA,cACA,MACA,aACA,OACA,kBACA,kBACA,eACA,gCACA,gCAEFC,cAAe,CACb,SACA,WACA,aACA,iBACA,oBACA,kBACA,cACA,YACA,cACA,eACA,gBACA,SACA,aACA,aAEFhK,WAAY,CAAC,OAAQ,UAAW,QAAS,WAAY,cAAe,aACpEiK,cAAe,CACb,aACA,kBACA,eACA,UACA,mBACA,mBACA,gBACA,eACA,0BACA,uBACA,sBACA,mBACA,gBACA,eACA,sBACA,YACA,kBACA,WACA,SACA,WACA,gBACA,aACA,iBACA,qBACA,yBAEFC,OAAQ,CAAC,gBAAiB,iBAAkB,iBAC5CrB,SAAU,CAAC,aAAc,gBAAiB,aAAc,aAAc,WAAY,wBAClF3I,SAAU,CACR,cACA,oBACA,mBACA,sBACA,UACA,WACA,eACA,gBACA,WACA,WACA,qBACA,oBACA,0BACA,MACA,UACA,UACA,aACA,SACA,QACA,yBACA,eACA,cACA,oBACA,iBACA,gBACA,mBACA,OACA,OACA,SACA,aACA,aACA,eAEFiK,aAAc,CACZ,MACA,OACA,OACA,OACA,OACA,UACA,MACA,MACA,UACA,MACA,QACA,MACA,QACA,KACA,QACA,UACA,OACA,QACA,OACA,MACA,OACA,SACA,MACA,SACA,WACA,MACA,SAEFC,SAAU,CACR,WACA,WACA,eACA,eACA,mBACA,aACA,WACA,iBACA,qBACA,QACA,UACA,UACA,YACA,YACA,eACA,iBACA,oBACA,eACA,iBACA,0BACA,0BACA,YACA,oBACA,gBACA,iBACA,oBACA,YACA,cACA,qBACA,iBACA,mBACA,mBACA,YACA,YACA,cACA,iBACA,iBACA,aACA,UACA,YACA,gBAEFC,QAAS,CAAC,aAAc,QAAS,OAAQ,aAAc,wBACvDvJ,SAAU,CACR,cACA,iBACA,eACA,wBACA,eACA,oBACA,YACA,gBACA,mBACA,gBACA,iBACA,cACA,aACA,aACA,eACA,kBACA,WACA,aACA,YACA,cACA,cACA,OACA,UACA,aAEFE,OAAQ,CACN,QACA,OACA,YACA,SACA,YACA,aACA,SACA,OACA,MACA,QACA,QACA,QACA,WACA,YACA,UACA,YACA,UACA,QACA,QACA,UACA,QACA,MACA,aACA,gBACA,QACA,YACA,YACA,OACA,UACA,SAEFsJ,OAAQ,CACN,aACA,UACA,aACA,kBACA,aACA,cACA,kBACA,WACA,WACA,qBACA,eACA,qBACA,yBACA,aACA,aACA,gBACA,eACA,kBACA,iBACA,cACA,gBACA,qCACA,cACA,UACA,YACA,SACA,YACA,wBACA,QACA,kBACA,eACA,kBACA,cAEFC,YAAa,CACX,gBACA,aACA,SACA,YACA,cACA,kBACA,cACA,iBACA,eACA,gBACA,UACA,aAEFpC,QAAS,CAAC,kBAAmB,YAAa,oBAAqB,UAE/DmB,WAAY,CAAC,WAAY,UAGzBjH,UAAW,CACT,UACA,UACA,QACA,OACA,YACA,iBACA,OACA,OACA,UACA,QACA,WACA,SACA,eCpTSjD,GAAWN,EAAgB,CAEtCoG,SAAU,CACR,MACA,MACA,QACA,MACA,MACA,KACA,MACA,gBACA,SACA,QACA,UACA,QACA,SACA,OACA,KACA,UACA,QACA,aACA,QACA,YACA,WACA,UACA,SACA,SACA,UACA,aACA,WACA,gBACA,WACA,UACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,SACA,WACA,OACA,aACA,UACA,UACA,SACA,OACA,OACA,OACA,WACA,cACA,SACA,OACA,OACA,SACA,SACA,OACA,UACA,SACA,OACA,WACA,QACA,OACA,aACA,MACA,UACA,WACA,gBACA,OACA,OACA,WACA,OACA,QACA,QACA,SACA,WACA,WACA,cACA,kBACA,KACA,KACA,QACA,QACA,SACA,YACA,OACA,KACA,OACA,MACA,OACA,OACA,OACA,SACA,OACA,QACA,WACA,UACA,eACA,MACA,OACA,SACA,KACA,MACA,UACA,KACA,OACA,iBACA,YACA,aACA,UACA,SACA,KACA,QACA,QACA,OACA,UACA,QACA,OACA,YACA,UACA,QACA,OACA,YACA,SACA,YACA,OACA,WACA,cACA,aACA,cACA,UACA,WACA,SACA,SACA,SACA,QACA,WACA,WACA,aACA,OACA,OACA,SACA,gBACA,SACA,yBACA,iCACA,0BACA,eACA,MACA,UACA,WACA,OACA,aACA,cACA,QACA,cACA,WACA,OACA,KACA,MACA,OACA,cACA,UACA,WACA,cACA,UACA,QACA,SACA,UACA,SACA,aACA,MACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,OACA,eACA,aAEFsF,KAAM,CACJ,WACA,SACA,MACA,MACA,MACA,WACA,QACA,MACA,MACA,MACA,KACA,MACA,YACA,KACA,gBACA,MACA,QACA,UACA,MACA,aACA,OACA,KACA,UACA,WACA,OACA,UACA,OACA,YACA,mBACA,cACA,QACA,QACA,WACA,UACA,YACA,SACA,SACA,UACA,aACA,aACA,cACA,WACA,UACA,gBACA,QACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,SACA,OACA,MACA,aACA,MACA,UACA,UACA,UACA,aACA,WACA,SACA,OACA,WACA,aACA,cACA,aACA,WACA,SACA,SACA,OACA,WACA,SACA,YACA,OACA,UACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,MACA,UACA,UACA,QACA,OACA,OACA,MACA,SACA,KACA,OACA,QACA,QACA,SACA,OACA,WACA,YACA,KACA,UACA,QACA,YACA,YACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,WACA,OACA,KACA,YACA,OACA,MACA,WACA,OACA,UACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,SACA,SACA,QACA,QACA,WACA,UACA,QACA,OACA,KACA,OACA,MACA,OACA,SACA,UACA,eACA,KACA,OACA,OACA,SACA,KACA,QACA,QACA,SACA,WACA,MACA,UACA,SACA,WACA,YACA,UACA,WACA,UACA,QACA,aACA,YACA,SACA,OACA,OACA,aACA,WACA,WACA,SACA,QACA,WACA,OACA,SACA,SACA,SACA,UACA,SACA,UACA,eACA,MACA,OACA,WACA,OACA,QACA,MACA,QACA,UACA,WACA,WACA,aACA,YACA,MACA,cACA,QACA,YACA,OACA,YACA,gBACA,kBACA,KACA,WACA,cACA,YACA,cACA,OACA,OACA,QACA,SACA,UACA,SACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,OACA,WACA,QACA,OACA,OACA,QACA,OACA,UCxZElI,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,SACA,uBAGA,gBACA,SAEA,MAEA,eACA,oDACA,aAEA,wCACA,iBAGI4F,GAAiB5F,EAAc,CAEnC,SACA,mBAEA,gBAEA,yBAEA,cACA,MACA,0BACA,eAEA,iBAEA,iCACA,gBACA,YACA,gBACA,aACA,qBACA,oBACA,eACA,gBACA,mBACA,aACA,cACA,WACA,iBACA,gBACA,qBACA,SACA,qBACA,oBACA,4BACA,2BACA,4BACA,kBACA,cACA,cACA,mBACA,sBACA,UACA,wBACA,oBACA,oBACA,0BACA,eACA,WACA,aACA,yBACA,yBACA,WACA,+BACA,0BACA,gBACA,gCACA,6BACA,eACA,YACA,aACA,oBACA,OACA,WACA,kBACA,iBACA,mBACA,WACA,qBACA,gBACA,aACA,uBACA,uBACA,oBACA,mBACA,yBACA,iBACA,eACA,UACA,YACA,mBACA,iBACA,oBACA,WACA,yBACA,0BACA,QACA,YACA,kBACA,wBACA,QACA,WACA,eACA,QACA,aACA,eACA,oBACA,UACA,SACA,qBACA,UACA,kBACA,qBACA,YACA,qBACA,mBACA,YACA,4BACA,QACA,oBACA,UACA,yBACA,2BACA,oBACA,gBACA,UACA,uBACA,qBACA,oBACA,qBACA,qBACA,6BACA,qBACA,SACA,SACA,aACA,OACA,QACA,WACA,OACA,SACA,uBACA,kBACA,sBACA,OACA,6BACA,WACA,eACA,6BACA,uBACA,cACA,UACA,qBACA,UACA,eACA,gBACA,eACA,YACA,gBACA,aACA,gBACA,qBACA,kBACA,iBACA,gBACA,UACA,QACA,iBACA,WACA,8BACA,UACA,OACA,oBACA,OACA,iBACA,aACA,YACA,0BAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAEhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBAEA,0BAGI+F,GAAkB/F,EAAc,CACpC,gDACA,2BAIW6N,GAA8B,CACzC5H,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvB8I,qBAAqB,EACrBtF,YAAa,CAAC,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC3CE,WAAY,CAAC,QAAS,MACtBC,WAAY,CAAExF,MAAO,KAAMC,KAAM,OACjCyF,WAAY,CAAEE,MAAO,CAAC,KAAMC,OAAQ,CAAC,MACrCE,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAGnGa,cAAe,CACb2C,qBAAsB,CAAC,MACvB7E,eAAcA,KC9OLpD,GAAWN,EAAgB,CAGtC+G,IAAK,CACH,QACA,WACA,SACA,aACA,UACA,SACA,SACA,MACA,QACA,QACA,UACA,YACA,aACA,aACA,gBACA,uBACA,cACA,YACA,MACA,OACA,QACA,SACA,UACA,MACA,MACA,aACA,UACA,cACA,QACA,KACA,MACA,QACA,aACA,MACA,YACA,aACA,MACA,aACA,QACA,KACA,SACA,YACA,gBACA,OACA,iBACA,mBACA,YACA,6BACA,oBACA,2BACA,qBACA,eACA,MACA,iBACA,OACA,QACA,aACA,kCACA,SACA,iBACA,YACA,WACA,QACA,UACA,iBACA,oBACA,SACA,QACA,UACA,SACA,SACA,UACA,MACA,OACA,OACA,UACA,YACA,OACA,MACA,QACA,eACA,UACA,KACA,OACA,cACA,QACA,OACA,oBACA,SACA,UACA,UACA,WACA,OACA,UACA,QACA,SACA,OACA,YACA,kBACA,UACA,QACA,aACA,qBACA,qBACA,WACA,YACA,QACA,QACA,SACA,oBACA,QACA,UACA,YACA,MACA,WACA,UACA,YACA,SACA,WACA,UACA,cACA,2BACA,UACA,WACA,SACA,YACA,mBACA,UACA,UACA,aACA,cACA,aACA,eACA,YACA,gBACA,aACA,cACA,SACA,aACA,WACA,UACA,WACA,mBACA,aACA,UACA,OACA,QACA,OACA,SACA,cACA,QACA,OACA,MACA,YACA,UACA,kBACA,eACA,iBACA,0BACA,yBACA,eACA,oBACA,eACA,SACA,QACA,OACA,WACA,YACA,OACA,WACA,MACA,WACA,kBACA,aACA,aACA,aACA,MACA,UACA,UACA,UACA,WACA,aACA,WACA,UACA,UACA,UACA,kBACA,SACA,YACA,aACA,aACA,OACA,WACA,SACA,gBACA,aACA,eACA,YACA,UACA,UACA,cACA,OACA,WACA,cACA,oBACA,MACA,KACA,WACA,SACA,SACA,OACA,gBACA,OACA,OACA,YACA,aACA,UACA,WACA,OACA,OACA,WACA,OACA,SACA,SACA,WACA,WACA,YACA,MACA,SACA,UACA,OACA,SACA,SACA,UACA,WACA,QACA,SACA,SACA,UACA,YACA,YACA,UACA,SACA,OACA,UACA,WACA,YACA,WACA,gBACA,gBACA,YACA,aACA,aACA,YACA,wBACA,UACA,QACA,SACA,QACA,QACA,SACA,OACA,QACA,OACA,YACA,QACA,QACA,SACA,SACA,QACA,YACA,MACA,QACA,sBACA,yBACA,aACA,UACA,SACA,UACA,SACA,OACA,KACA,SACA,OACA,WACA,WACA,YACA,KACA,MACA,aACA,MACA,OACA,WACA,YACA,iBACA,WACA,gBACA,SACA,4BACA,QACA,UACA,SACA,QACA,WACA,SACA,OACA,SACA,UACA,4BACA,OACA,kBACA,SACA,OACA,SACA,uBACA,gBACA,YACA,OACA,UACA,OACA,QACA,OACA,mBACA,cACA,cACA,aACA,WACA,KACA,SACA,QACA,YACA,YACA,WACA,SACA,KACA,YACA,YACA,cACA,QACA,UACA,SACA,UACA,WACA,gBACA,OACA,aACA,YACA,SACA,SACA,QACA,QACA,QACA,cACA,SACA,gBACA,WACA,UACA,KACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,6BACA,mBACA,YACA,WACA,OACA,UACA,YACA,UACA,OACA,OACA,QACA,MACA,iBACA,OACA,OACA,UACA,QACA,MACA,WACA,QACA,OACA,aACA,UACA,SACA,aACA,WACA,OACA,UACA,OACA,YACA,QACA,SACA,OACA,QACA,UACA,OACA,QACA,QACA,SACA,OACA,iBACA,OACA,QACA,YACA,iBACA,WACA,OACA,OACA,WACA,WACA,OACA,eACA,MACA,MACA,aACA,qBACA,UACA,SACA,QACA,eACA,WACA,kBACA,aACA,2BACA,kBACA,kCACA,WACA,MACA,MACA,aACA,YACA,aACA,SACA,SACA,oBACA,0BACA,SACA,qBACA,yBACA,mBACA,QACA,WACA,cACA,YACA,WACA,QACA,qBACA,gBACA,WACA,MACA,OACA,QACA,WACA,SACA,QACA,OACA,MACA,QACA,QACA,YACA,WACA,UACA,QACA,OACA,KACA,OACA,OACA,mBACA,UACA,MACA,UACA,SACA,SACA,qBACA,mBACA,SACA,YACA,QACA,OACA,WACA,QACA,UACA,WACA,SACA,KACA,MACA,UACA,SACA,UACA,OACA,KACA,SACA,OACA,OACA,WACA,eACA,WACA,YACA,kBACA,SACA,UACA,aACA,KACA,QACA,oBACA,SACA,MACA,eACA,QACA,UACA,OACA,WACA,UACA,QACA,QACA,YACA,SACA,SACA,UACA,UACA,YACA,eACA,eACA,aACA,UACA,WACA,qBACA,QACA,gBACA,WACA,YACA,WACA,YACA,UACA,OACA,QACA,YACA,UACA,OACA,QACA,OACA,YACA,YACA,UACA,WACA,UACA,QACA,aACA,aACA,YACA,aACA,UACA,cACA,UACA,WACA,UACA,UACA,QACA,QACA,UACA,UACA,QACA,gBACA,QACA,QACA,OACA,OACA,QACA,QACA,OACA,WACA,YACA,UACA,SACA,YACA,aACA,YACA,MACA,YACA,aACA,UACA,SACA,UACA,WACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,gBACA,SACA,aACA,QACA,kBACA,UACA,UACA,YACA,cACA,cACA,UACA,WACA,gBACA,QACA,UACA,UACA,WACA,SACA,aACA,QACA,SACA,YACA,UACA,UACA,UACA,SACA,QACA,kBACA,kBACA,sBACA,QACA,QACA,WACA,SACA,UACA,MACA,YACA,aACA,aACA,OACA,WACA,OACA,OACA,UACA,KACA,OACA,OACA,YACA,SACA,SACA,UACA,iBACA,SACA,SACA,SACA,qBACA,WACA,SACA,YACA,gBACA,YACA,YACA,WACA,YACA,SACA,eACA,SACA,eACA,SACA,UACA,eACA,MACA,QACA,2BACA,MACA,QACA,UACA,aACA,QACA,OACA,WACA,SACA,SACA,UACA,SACA,OACA,OACA,kBACA,UACA,WACA,WACA,YACA,aACA,4BACA,OACA,SACA,SACA,UACA,sBACA,WACA,MACA,iBACA,oBACA,YACA,sBACA,eACA,WACA,eACA,iBACA,mBACA,WACA,aACA,QACA,SACA,OACA,UACA,gBACA,SACA,SACA,QACA,UACA,QACA,YACA,gBACA,OACA,QACA,SACA,mBACA,iBACA,cACA,QACA,SACA,QACA,iBACA,SACA,aACA,OACA,cACA,OACA,OACA,WACA,YACA,YACA,aACA,YACA,aACA,OACA,OACA,OACA,UACA,YACA,eACA,gBACA,WACA,WACA,UACA,WACA,KACA,YACA,cACA,WACA,YACA,cACA,6BACA,QACA,UACA,WACA,OACA,QACA,WACA,UACA,YACA,WACA,OACA,QACA,YACA,cACA,YACA,OACA,cACA,aACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,UACA,SACA,WACA,UACA,WACA,QACA,SACA,UACA,QACA,MACA,OACA,QACA,QACA,WACA,WACA,gBACA,QACA,SACA,QACA,WACA,YACA,QACA,SACA,YACA,UACA,eACA,YACA,WACA,UACA,UACA,OACA,OACA,WACA,SACA,OACA,QACA,WACA,OACA,OACA,QACA,QACA,aACA,SACA,OACA,UACA,SACA,gBACA,OACA,WACA,UACA,QACA,UACA,MACA,OACA,aACA,MACA,WACA,UC70BSpG,GAAYX,EAAgB,CAgBvC+G,IAAK,CACH,MACA,OACA,UACA,UACA,cACA,cACA,YACA,wBACA,mCACA,gCACA,iCACA,8BACA,oBACA,QACA,OACA,OACA,QACA,MACA,MACA,SACA,UACA,YACA,SACA,UACA,OACA,OACA,UACA,OACA,mBACA,cACA,UACA,WACA,eACA,YACA,UACA,SACA,YACA,gBACA,OACA,UACA,aACA,MACA,MACA,QACA,YACA,UACA,eACA,eACA,eACA,oBACA,eACA,UACA,WACA,OACA,WACA,WACA,cACA,WACA,aACA,MACA,UACA,aACA,YACA,YACA,SACA,UACA,UACA,aACA,MACA,cACA,MACA,qBACA,MACA,UACA,QACA,QACA,cACA,QACA,SACA,aACA,cACA,YACA,gBACA,iBACA,qBACA,qBACA,uBACA,qBACA,mBACA,sBACA,kBACA,4BACA,gBACA,oBACA,oBACA,kBACA,sBACA,kBACA,iBACA,2BACA,aACA,aACA,WACA,WACA,eACA,MACA,YACA,OACA,cACA,KACA,SACA,YACA,YACA,aACA,aACA,UACA,SACA,QACA,WACA,KACA,UACA,WACA,6BACA,2BACA,6BACA,yBACA,uBACA,yBACA,kBACA,sBACA,oBACA,sBACA,sBACA,gBACA,cACA,kBACA,gBACA,kBACA,qBACA,mBACA,qBACA,MACA,WACA,aACA,QACA,OACA,QACA,OACA,SACA,OACA,KACA,YACA,iBACA,SACA,MACA,QACA,OACA,OACA,QACA,QACA,MACA,MACA,SACA,cACA,MACA,SACA,MACA,QACA,YACA,iBACA,MACA,MACA,YACA,QACA,SACA,eACA,eACA,kBACA,kBACA,KACA,QACA,WACA,MACA,QACA,UACA,QACA,UACA,OACA,OACA,SACA,SACA,UACA,UACA,QACA,QACA,QACA,YACA,aACA,OACA,QACA,SACA,SACA,cACA,OACA,OACA,UACA,OACA,MACA,QACA,QACA,UACA,cACA,kBACA,QACA,OACA,SACA,aACA,cACA,cACA,UACA,SACA,YACA,kBACA,MACA,WACA,MACA,OACA,WACA,cACA,cACA,YACA,eACA,gBACA,cACA,YACA,UACA,UACA,UACA,YACA,aACA,eACA,OACA,QACA,WACA,QACA,QACA,iBACA,YACA,QACA,OACA,WACA,WACA,gBACA,OACA,SACA,WACA,UACA,WACA,aACA,UACA,OACA,UACA,aACA,OAGA,MACA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QACA,QACA,SACA,mBACA,OACA,WACA,YACA,OACA,OACA,OACA,gBACA,UACA,mBACA,SACA,YACA,OACA,OACA,UClTEvD,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SAGA,yBACA,SACA,iBAEA,MAEA,cACA,qFACA,4DACA,4CAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,gBAEA,qCAEA,uBACA,eACA,6BACA,gBACA,kBACA,SACA,mBAEA,mBAEA,iBACA,WACA,2BACA,iBACA,iBACA,sBACA,aACA,aACA,gBACA,kBACA,cACA,kBACA,kBACA,SACA,uBACA,cACA,OACA,SACA,mBACA,4BACA,+BACA,sBACA,cACA,iBACA,yBACA,QACA,SACA,kBACA,eACA,eACA,cACA,mBACA,kBACA,uBACA,cACA,cACA,qBACA,WACA,kBACA,kBACA,KACA,gBACA,gBACA,aACA,YACA,gBACA,iBACA,qBACA,YACA,YACA,YACA,UACA,UACA,QACA,QACA,QACA,UACA,OACA,kBACA,kBACA,YACA,wBACA,WACA,2BACA,cACA,kBACA,iBACA,UACA,oBACA,uBACA,oBACA,oBACA,cACA,eACA,UACA,qBACA,QACA,eACA,gBACA,gBACA,cACA,UACA,mBACA,qBACA,SACA,WACA,wBACA,YACA,oBACA,mBACA,YACA,eACA,qBACA,WACA,kBACA,OACA,qBACA,iBACA,eACA,uBACA,uBACA,uBACA,wBACA,oBACA,mBACA,mBACA,iBACA,cACA,eACA,cACA,qBACA,uBACA,cACA,aACA,qBACA,mBACA,eACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,uBACA,sBACA,gBACA,aACA,mBACA,cACA,oBACA,cACA,iBACA,gBACA,WACA,oBACA,kBACA,0BACA,iBACA,gBACA,cACA,oBACA,yBACA,gBACA,eACA,mBACA,aACA,gBACA,kBACA,gBACA,MACA,KAEA,UACA,QACA,OACA,SACA,SACA,UAGI6F,GAAwB7F,EAAc,CAAC,yBAA0B,SAAU,YAAa,UAExF8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CAAC,YAAa,YAAa,gBAAiB,2BAErE8N,GAAgC,CAC3C7H,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GAEvBwD,YAAa,CAAC,WAAY,WAAY,CAAEC,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAC9FC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKiI,sBAAsB,GAC3DJ,cAAe,CAAC,CAAEK,MAAO,qBAAuB,CAAE/C,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAC/FQ,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CAAC,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,KAAM,MAC/DC,YAOJ,SAAqBC,GACnB,OAAOA,EAAOnQ,KAAI,CAACoC,EAAOpB,KACxB,MAAMsR,EAAYnC,EAAOnP,EAAI,IAAMmG,EACnC,OAAI1D,EAAQiE,IAAItF,IAA6B,MAAnBkQ,EAAUhP,KAE3B,IAAKlB,EAAOhD,KAAM2H,EAAUgB,wBAE9B3F,CAAK,GAEhB,GAdE0O,cAAe,CACblC,eAAcA,KCjPL/C,GAAYX,EAAgB,CAkBvC+G,IAAK,CACH,MACA,OACA,QACA,aACA,iBACA,YACA,wBACA,oBACA,+BACA,4BACA,6BACA,eACA,0BACA,uBACA,wBACA,4BACA,yBACA,YACA,eACA,YACA,gBACA,kBACA,0BACA,iBACA,eACA,qBACA,iBACA,gBACA,aACA,cACA,kBACA,kBACA,mBACA,iBACA,WACA,YACA,aACA,UACA,aACA,UACA,aACA,YACA,YACA,UACA,aACA,YACA,UACA,mBACA,mBACA,kBACA,QACA,OACA,QACA,OACA,QACA,QACA,oCACA,+BACA,MACA,uBACA,uBACA,gBACA,aACA,SACA,aACA,sBACA,uBACA,uBACA,eACA,gBACA,SACA,QACA,YACA,eACA,gBACA,SACA,aACA,UACA,cACA,UACA,SACA,aACA,UACA,cACA,wBACA,uBACA,OACA,OACA,OACA,OACA,YACA,aACA,YACA,MACA,OACA,WACA,UACA,YACA,uBACA,WACA,SACA,YACA,2BACA,yBACA,WACA,mBACA,eACA,OACA,MACA,OACA,MACA,QACA,WACA,YACA,aACA,YACA,kBACA,0BACA,iBACA,mBACA,eACA,qBACA,iBACA,eACA,iBACA,kBACA,0BACA,kBACA,oBACA,sBACA,eACA,oBACA,sBACA,eACA,kBACA,oBACA,wBACA,2BACA,4BACA,mCACA,iCACA,kBACA,YACA,aACA,UACA,WACA,UACA,SACA,oBACA,oBACA,UACA,cACA,UACA,aACA,OACA,eACA,UACA,cACA,WACA,aACA,MACA,eACA,6BACA,uBACA,2CACA,UACA,8BACA,YACA,cACA,UACA,QACA,8BACA,YACA,MACA,oBACA,UACA,kBACA,wBACA,WACA,oBACA,oBACA,qBACA,SACA,WACA,WACA,cACA,OACA,WACA,YACA,oBACA,oBACA,aACA,MACA,iBACA,cACA,eACA,aACA,aACA,OACA,SACA,SACA,MACA,SACA,QACA,YACA,eACA,UACA,SACA,eACA,gBACA,WACA,YACA,aACA,UACA,aACA,UACA,gBACA,aACA,YACA,UACA,6BACA,aACA,gBACA,YACA,qBACA,UACA,mBACA,mBACA,kBACA,yBACA,yBACA,WACA,MACA,WACA,gBACA,mBACA,aACA,OACA,QACA,OACA,SACA,MACA,OACA,WACA,WACA,UACA,KACA,YACA,iBACA,MACA,gBACA,wBACA,QACA,OACA,QACA,oCACA,MACA,UACA,aACA,yBACA,qBACA,qBACA,SACA,MACA,MACA,UACA,kBACA,MACA,OACA,YACA,iBACA,WACA,SACA,YACA,QACA,SACA,aACA,MACA,OACA,aACA,mBACA,6BACA,gBACA,gBACA,cACA,cACA,eACA,WACA,aACA,YACA,YACA,eACA,kBACA,kBACA,KACA,qBACA,iBACA,oBACA,WACA,MACA,QACA,eACA,6BACA,gBACA,2BACA,wBACA,6BACA,UACA,SACA,UACA,OACA,kBACA,SACA,eACA,eACA,cACA,iBACA,gBACA,oBACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,YACA,YACA,SACA,UACA,oCACA,qCACA,4CACA,kCACA,4BACA,qBACA,cACA,UACA,QACA,QACA,QACA,aACA,OACA,QACA,kBACA,8BACA,OACA,OACA,OACA,OACA,0BACA,OACA,WACA,cACA,OACA,WACA,cACA,OACA,MACA,OACA,OACA,UACA,QACA,QACA,aACA,iBACA,OACA,SACA,UACA,YACA,YACA,eACA,WACA,cACA,WACA,YACA,aACA,cACA,aACA,cACA,eACA,YACA,gBACA,eACA,cACA,cACA,aACA,cACA,cACA,qBACA,0BACA,sBACA,sBACA,aACA,qBACA,qBACA,uBACA,kBACA,gBACA,YACA,mBACA,gBACA,cACA,eACA,WACA,iBACA,aACA,aACA,eACA,eACA,YACA,aACA,cACA,UACA,gBACA,mBACA,WACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,4CACA,8BACA,aACA,SACA,aACA,cACA,mBACA,SACA,wBACA,kBACA,SACA,YACA,MACA,UACA,uBACA,2BACA,+BACA,4CACA,uCACA,4BACA,sBACA,0BACA,gCACA,2BACA,gCACA,mCACA,mCACA,2CACA,wCACA,sCACA,uCACA,qCACA,4CACA,8BACA,2BACA,oCACA,2BACA,oCACA,gCACA,sCACA,yBACA,8CACA,gCACA,qCACA,iBACA,gCACA,mCACA,kCACA,sCACA,iCACA,sCACA,uCACA,2BACA,qBACA,4BACA,yCACA,0BACA,mCACA,oCACA,yBACA,gCACA,gBACA,6CACA,qCACA,cACA,mBACA,+BACA,iBACA,6BACA,8BACA,MACA,OACA,kBACA,eACA,kBACA,aACA,UACA,WACA,uBACA,eACA,gBACA,WACA,YACA,aACA,UACA,aACA,UACA,OACA,aACA,YACA,aACA,YACA,eACA,cACA,UACA,YACA,UACA,OACA,eACA,mBACA,mBACA,kBACA,aACA,SACA,YACA,OACA,WACA,QACA,QACA,2BACA,2BACA,WACA,wBACA,wBACA,iBACA,gBACA,iBACA,cACA,iBACA,gBACA,iBACA,gBACA,mBACA,kBACA,cACA,mBACA,uBACA,uBACA,sBACA,SACA,UACA,UACA,QACA,cACA,WACA,qBACA,UACA,WACA,WACA,gBACA,eACA,yBACA,6BACA,eACA,SACA,OACA,aACA,gBACA,MACA,aACA,YACA,eACA,YACA,OACA,OACA,aACA,UACA,QACA,UACA,aACA,UC7lBSzG,GAAWN,EAAgB,CAItC+G,IAAK,CACH,UACA,MACA,QACA,MACA,MACA,KACA,UACA,KACA,OACA,OACA,QACA,SACA,UACA,aACA,aACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,WACA,SACA,WACA,OACA,OACA,SACA,QACA,YACA,MACA,OACA,OACA,QACA,QACA,YACA,SACA,QACA,KACA,YACA,QACA,SACA,YACA,OACA,KACA,QACA,OACA,UACA,OACA,OACA,YACA,iBACA,QACA,UACA,MACA,OACA,KACA,KACA,KACA,QACA,eACA,UACA,SACA,SACA,QACA,QACA,MACA,OACA,SACA,SACA,SACA,MACA,OACA,QACA,QACA,cACA,OACA,KACA,UACA,OACA,WACA,QACA,SACA,SACA,QACA,SACA,OACA,OACA,WACA,QACA,UC5FEvD,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SACA,uBAGA,qDACA,qBACA,SAEA,MAGA,gEAEA,uDACA,8EACA,aACA,oDACA,cACA,iBACA,aACA,qBACA,6BACA,iCAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,0BACA,YACA,YACA,+BACA,sBACA,eACA,gBACA,4BACA,gBACA,6CACA,oBACA,mCACA,oBACA,iCACA,+BACA,uBACA,wBACA,kBACA,kBACA,+BAEA,+BAcA,gBACA,wBACA,mBACA,iBACA,uBACA,uBACA,oBACA,iBACA,oBACA,uBACA,0BACA,uBACA,iCACA,aACA,kBACA,0BACA,yBACA,aACA,0BACA,eACA,6BACA,iBACA,gBACA,uBACA,cACA,cACA,4BACA,eACA,YACA,aACA,aACA,aACA,kBACA,QACA,OACA,SACA,YACA,iBACA,yBACA,oBACA,kBACA,2BACA,wBACA,wBACA,qBACA,kBACA,qBACA,yBACA,wBACA,2BACA,wBACA,kCACA,cACA,mBACA,2BACA,0BACA,cACA,2BACA,gBACA,8BACA,kBACA,wBACA,eACA,eACA,6BACA,gBACA,aACA,cACA,cACA,mBACA,SACA,oBACA,0BACA,uBACA,oBACA,uBACA,0BACA,6BACA,0BACA,gBACA,qBACA,kBACA,6BACA,kBACA,oBACA,0BACA,iBACA,iBACA,kBACA,iBACA,gBACA,uBACA,gBACA,gBACA,qBACA,kBACA,gBACA,sBACA,sBACA,mBACA,gBACA,mBACA,uBACA,sBACA,yBACA,sBACA,YACA,iBACA,yBACA,wBACA,YACA,yBACA,cACA,gBACA,sBACA,aACA,aACA,cACA,WACA,YACA,YACA,YACA,iBACA,oBACA,eACA,UACA,MACA,kBACA,aACA,SACA,OACA,QACA,MACA,SACA,cACA,WACA,eACA,mBACA,iBACA,mCACA,sCACA,gCACA,0BACA,uBACA,uBACA,oBACA,iBACA,uBACA,cACA,oBACA,aACA,wBACA,wBACA,0BACA,wBACA,eACA,6BACA,kBACA,aACA,oBACA,kBACA,eACA,4BACA,6BACA,0BACA,yBACA,aACA,2BACA,eACA,iBACA,wBACA,cACA,gCACA,mCACA,cACA,eACA,cACA,YACA,aACA,oBACA,sBACA,aACA,iBACA,aACA,kBACA,6BACA,kBACA,gBACA,eACA,aACA,QACA,eACA,WACA,aACA,sBACA,kBAGI6F,GAAwB7F,EAAc,CAAC,cAAe,QAAS,SAAU,cAEzE8F,GAAgB9F,EAAc,CAClC,eACA,+CACA,2BAGI+F,GAAkB/F,EAAc,CACpC,yBACA,kDAGW+N,GAA4B,CACvC9H,iBAAkB,CAChBP,eAAc,GACdC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAAqB,GACrBC,cAAa,GACbC,gBAAe,GACfG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CAAC,KAAM,YACpBI,WAAY,CAAC,SACbuC,cAAe,CAEb,CAAEK,MAAO,gBAET,CAAEA,MAAO,+BAEXjD,YAAa,CAAC,MACdM,WAAY,CAAEvF,KAAM,KACpB6F,iBAAkB,CAAC,KAAM,MACzBC,UAAW,CAET,IAEA,KAEA,KAEA,IAEA,OAGJa,cAAe,CACb2C,qBAAsB,CAAC,IAAK,MAC5B7E,eAAcA,KCzUL/C,GAAYX,EAAgB,CAEvC8L,WAAY,CACV,OACA,QACA,WACA,SACA,SACA,eACA,SACA,eACA,SACA,MACA,MACA,MACA,OACA,QAGFC,OAAQ,CACN,QACA,WACA,SACA,kBACA,mBACA,mBACA,mBACA,iBACA,kBACA,kBACA,kBACA,oBACA,oBACA,iBACA,qBACA,mBACA,qBACA,QACA,QACA,cACA,eACA,MACA,SACA,SACA,YACA,UACA,aACA,aACA,iBACA,qBACA,eACA,gBACA,gBACA,iBACA,cACA,aACA,YACA,mBACA,YACA,YACA,kBACA,gBACA,sBACA,iBACA,cACA,sBACA,eACA,UACA,UACA,eACA,WACA,WACA,WACA,cACA,YACA,mBACA,aACA,oBACA,cACA,WACA,aACA,YACA,kBACA,iBACA,WACA,WACA,WACA,WACA,cACA,yBACA,gBAGFrE,WAAY,CAAC,SAAU,YAAa,OAAQ,UAAW,eAAgB,mBACvExG,WAAY,CACV,SACA,UACA,UACA,UACA,WACA,WACA,eACA,gBACA,gBACA,gBACA,iBACA,iBACA,eACA,gBACA,gBACA,gBACA,iBACA,iBACA,kBACA,mBACA,mBACA,mBACA,oBACA,oBACA,UACA,WACA,WACA,WACA,YACA,gBACA,iBACA,iBACA,iBACA,kBACA,gBACA,iBACA,iBACA,iBACA,kBACA,mBACA,oBACA,oBACA,oBACA,qBACA,YACA,YACA,kBACA,kBACA,kBACA,kBACA,qBACA,qBACA,SACA,eACA,eACA,kBACA,aACA,mBACA,mBACA,sBACA,WACA,iBACA,iBACA,oBACA,cACA,cACA,eACA,eACA,oBACA,oBACA,qBACA,qBACA,oBACA,oBACA,qBACA,qBACA,uBACA,uBACA,wBACA,wBACA,WACA,gBACA,oBACA,qBACA,sBACA,sBACA,sBACA,oBACA,qBACA,qBACA,qBACA,uBACA,uBACA,oBACA,wBACA,sBACA,2BACA,oBACA,cACA,OACA,eACA,qBACA,wBACA,iBACA,oBACA,kBACA,iBACA,gBACA,iBACA,mBACA,mBACA,0BACA,4BACA,4BACA,4BACA,gCACA,kCACA,kCACA,kCACA,gCACA,kCACA,kCACA,kCACA,mBACA,yBACA,yBACA,wBACA,2BACA,2BACA,0BACA,YACA,qBACA,sBACA,wBACA,sBACA,yBAEFC,KAAM,CACJ,WACA,aACA,aACA,iBACA,SACA,YACA,UACA,cACA,eACA,cACA,SACA,WACA,WACA,kBACA,gBACA,mBACA,mBACA,iBACA,WACA,gBACA,eACA,gBACA,kBACA,kBACA,uBACA,sBACA,0BACA,oBACA,SACA,oBACA,uBACA,qBACA,oBACA,mBACA,oBACA,sBACA,sBACA,YACA,YACA,SACA,aACA,aACA,WACA,YACA,WACA,gBACA,gBACA,MACA,QACA,YACA,WACA,WACA,aACA,mBACA,WACA,YACA,WACA,UACA,WACA,aACA,aACA,cACA,gBACA,iBACA,gBACA,eACA,gBACA,kBACA,kBACA,mBACA,YACA,iBACA,WACA,gBACA,sBACA,4BACA,wBACA,+BAGFe,OAAQ,CACN,aACA,cACA,mBACA,UACA,cACA,WACA,eACA,QACA,QACA,QACA,QACA,YACA,YACA,cACA,cACA,SACA,UACA,cACA,SACA,SACA,wBACA,YACA,MACA,SACA,gBACA,6BACA,iBACA,eACA,eACA,kBACA,WACA,aACA,OACA,WACA,YACA,WACA,QACA,YACA,QACA,iBACA,sBACA,mBACA,mBACA,oBACA,oBACA,qBACA,qBACA,sBAEA,WACA,0BACA,eACA,8BACA,0BACA,8BACA,2BACA,wBACA,iBACA,QACA,gBACA,qBACA,uBACA,qBACA,0BACA,4BACA,UACA,aACA,6BACA,2BACA,OACA,UACA,QACA,gBACA,+BACA,oBACA,mCACA,cACA,kBACA,iCACA,qCACA,eAEA,aACA,aACA,UACA,mBACA,mBACA,mBAEFI,YAAa,CAAC,KAAM,WACpB0J,MAAO,CACL,IACA,KACA,MACA,MACA,KACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,OACA,SACA,SACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,QACA,UACA,WACA,OACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,OACA,UACA,UACA,QACA,OACA,UACA,QACA,WACA,QACA,eACA,cACA,gBACA,WACA,YACA,MACA,SACA,cACA,oBACA,cACA,UACA,YACA,qBACA,oBACA,WACA,YACA,aAEF3I,MAAO,CACL,OACA,cACA,gBACA,gBACA,oBACA,kBACA,oBACA,cACA,mBACA,SACA,SACA,SACA,QACA,SACA,SACA,eACA,gBACA,gBACA,iBACA,WACA,UACA,aACA,aACA,WACA,qBACA,cACA,gBACA,sBACA,oBACA,YACA,iBACA,eACA,eACA,oBACA,YACA,YACA,kBACA,YACA,WACA,YACA,eACA,uBACA,sBACA,uBACA,0BACA,UACA,MACA,MACA,YACA,aACA,aACA,YACA,YACA,OACA,SACA,SACA,SACA,SACA,UACA,oBACA,aACA,WACA,kBACA,WACA,cACA,qBACA,iBACA,iBACA,gBACA,iBACA,iBACA,kBACA,WACA,WACA,eACA,8BACA,mBACA,kCACA,qBACA,oCACA,yBACA,wCACA,eACA,8BACA,mBACA,kCACA,kBACA,iCACA,sBACA,qCACA,qBACA,oCACA,yBACA,wCACA,wBACA,uCACA,4BACA,2CACA,OACA,SACA,SACA,eACA,eACA,oBACA,uBACA,mBACA,WACA,OACA,MACA,QACA,MACA,QACA,kBACA,kBACA,gBACA,iBACA,sBACA,iBACA,QACA,WACA,SACA,eACA,eACA,kBACA,kBACA,aACA,WACA,SACA,mBACA,iBACA,4BACA,iCACA,wCACA,uCACA,8CACA,kCACA,OACA,OACA,WACA,cACA,WACA,yBACA,sBACA,uBACA,2BACA,eACA,mBACA,qBACA,qBACA,yBACA,yBACA,SACA,SACA,iBACA,cACA,4BACA,kBACA,kBACA,kBACA,2BACA,wBACA,wBACA,kBACA,kBACA,2BACA,wBACA,aACA,UACA,kBACA,kBACA,SACA,kBACA,eACA,SACA,2BACA,wBACA,eACA,eACA,qBACA,gBACA,wBACA,uBACA,yBACA,wBACA,uBACA,0BACA,cACA,UACA,aACA,WACA,kBACA,iBACA,mBACA,kBACA,oBACA,cACA,2BACA,kBACA,iBACA,sBACA,8BACA,cACA,aACA,aACA,eACA,UACA,mBACA,gBACA,UACA,mBACA,WACA,kBACA,oBACA,cACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,iBACA,iBACA,cACA,kBACA,cACA,gBACA,eACA,eACA,mBACA,kBACA,oBACA,uBACA,qBACA,WACA,kBACA,eACA,KACA,QACA,WACA,cACA,YACA,sBACA,cACA,mBACA,kBACA,iBACA,gBACA,gBACA,iBACA,YACA,kBACA,cACA,gBACA,iBACA,UACA,UACA,kBACA,UACA,gBACA,cACA,eACA,wBACA,eACA,aACA,aACA,aACA,kBACA,kBACA,eACA,aACA,eACA,kBACA,kBACA,qBACA,sBACA,wBACA,gBACA,SACA,aACA,YACA,0BACA,8BACA,yCACA,8CACA,qCACA,sCACA,kCACA,UACA,UACA,iBACA,mBACA,gBACA,aACA,YACA,iBACA,eACA,qBACA,SACA,YACA,SACA,SACA,gBACA,aACA,WACA,gBACA,2BACA,kBACA,WACA,MACA,WACA,QACA,eACA,UACA,uBACA,wBACA,YACA,aACA,gBACA,cACA,cACA,wBACA,sBACA,aACA,SACA,SACA,WACA,SACA,aACA,aACA,eACA,aACA,cACA,cACA,gBACA,cACA,iBACA,UACA,oBACA,UACA,oBACA,OACA,YACA,WACA,WACA,WACA,OACA,WACA,eACA,aACA,YACA,WACA,cACA,SACA,QACA,eACA,kBACA,cACA,aACA,WACA,aACA,cACA,QACA,mBACA,MACA,YACA,qBACA,yBACA,0BACA,QACA,WACA,SACA,UACA,UACA,cACA,mBACA,uBACA,WACA,oBACA,0CACA,qBACA,iBACA,iBACA,iBACA,oBACA,sBACA,mBACA,sBACA,6BACA,yBACA,YACA,YACA,sBACA,iBACA,qBACA,wBACA,sBACA,oBACA,UACA,gBACA,UACA,WACA,uBACA,eACA,oBACA,mBACA,aACA,oBACA,cACA,kBACA,UACA,kBACA,kBACA,kBACA,eACA,eACA,eACA,gBACA,UACA,iBACA,WACA,aACA,qBACA,yBACA,SACA,MACA,cACA,YACA,WACA,UAGFvC,UAAW,CACT,QACA,MACA,MACA,MACA,MACA,MACA,YACA,aACA,SACA,UACA,WACA,YACA,WACA,UACA,SACA,SACA,cACA,OACA,eACA,aACA,iBACA,qBACA,sBACA,sBACA,cACA,aACA,cACA,cACA,iBACA,gBACA,iBACA,kBACA,SACA,SACA,SACA,WACA,UACA,WACA,UACA,OACA,YACA,eACA,iBACA,YACA,WACA,YACA,gBACA,mBACA,oBACA,wBACA,iBACA,yBACA,wBACA,kBACA,0BACA,mBACA,2BACA,yBACA,6BACA,+BACA,8BACA,YACA,gBACA,gBACA,eACA,YACA,WACA,iBACA,oBAEFlN,MAAO,CACL,OACA,QACA,UACA,SACA,eACA,MACA,QACA,aACA,OACA,OACA,OACA,KACA,iBACA,UACA,OACA,OACA,aACA,cACA,YACA,UAGF4S,OAAQ,CACN,OACA,MACA,cACA,aACA,OACA,aACA,aACA,YACA,eACA,WC1+BSlG,GAAWN,EAAgB,CACtC+G,IAAK,CACH,MACA,YACA,MACA,WACA,QACA,MACA,MACA,QACA,KACA,MACA,SACA,YACA,UACA,KACA,OACA,OACA,SACA,QACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,QACA,UACA,WACA,MACA,UACA,SACA,OACA,WACA,SACA,WACA,OACA,OACA,MACA,SACA,SACA,UACA,WACA,WACA,QACA,SACA,SACA,QACA,YACA,SACA,OACA,OACA,WACA,SACA,QACA,QACA,SACA,KACA,SACA,KACA,QACA,QACA,SACA,MACA,WACA,OACA,KACA,OACA,OACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,MACA,MACA,SACA,QACA,OACA,eACA,UACA,MACA,UACA,OACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,YACA,aACA,YACA,UACA,UACA,QACA,SACA,UACA,QACA,WACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,OACA,OACA,QACA,UACA,YACA,QACA,YACA,OACA,KACA,WACA,MACA,UACA,QACA,WACA,WACA,W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","sources":["webpack://sqlFormatter/webpack/universalModuleDefinition","webpack://sqlFormatter/../../node_modules/.pnpm/nearley@2.20.1/node_modules/nearley/lib/nearley.js","webpack://sqlFormatter/webpack/bootstrap","webpack://sqlFormatter/webpack/runtime/compat get default export","webpack://sqlFormatter/webpack/runtime/define property getters","webpack://sqlFormatter/webpack/runtime/hasOwnProperty shorthand","webpack://sqlFormatter/webpack/runtime/make namespace object","webpack://sqlFormatter/./src/lexer/token.ts","webpack://sqlFormatter/./src/expandPhrases.ts","webpack://sqlFormatter/./src/utils.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.keywords.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.functions.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.formatter.ts","webpack://sqlFormatter/./src/languages/db2/db2.functions.ts","webpack://sqlFormatter/./src/languages/db2/db2.keywords.ts","webpack://sqlFormatter/./src/languages/db2/db2.formatter.ts","webpack://sqlFormatter/./src/languages/hive/hive.functions.ts","webpack://sqlFormatter/./src/languages/hive/hive.keywords.ts","webpack://sqlFormatter/./src/languages/hive/hive.formatter.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.keywords.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.functions.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.formatter.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.keywords.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.functions.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.formatter.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.functions.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.keywords.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.formatter.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.keywords.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.functions.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.formatter.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.functions.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.keywords.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.formatter.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.functions.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.keywords.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.formatter.ts","webpack://sqlFormatter/./src/languages/spark/spark.keywords.ts","webpack://sqlFormatter/./src/languages/spark/spark.functions.ts","webpack://sqlFormatter/./src/languages/spark/spark.formatter.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.functions.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.keywords.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.formatter.ts","webpack://sqlFormatter/./src/languages/sql/sql.functions.ts","webpack://sqlFormatter/./src/languages/sql/sql.keywords.ts","webpack://sqlFormatter/./src/languages/sql/sql.formatter.ts","webpack://sqlFormatter/./src/languages/trino/trino.functions.ts","webpack://sqlFormatter/./src/languages/trino/trino.keywords.ts","webpack://sqlFormatter/./src/languages/trino/trino.formatter.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.functions.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.keywords.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.formatter.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.keywords.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.functions.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.formatter.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.functions.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.keywords.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.formatter.ts","webpack://sqlFormatter/./src/languages/clickhouse/clickhouse.functions.ts","webpack://sqlFormatter/./src/languages/clickhouse/clickhouse.keywords.ts","webpack://sqlFormatter/./src/languages/clickhouse/clickhouse.formatter.ts","webpack://sqlFormatter/./src/lexer/regexUtil.ts","webpack://sqlFormatter/./src/lexer/regexFactory.ts","webpack://sqlFormatter/./src/lexer/lineColFromIndex.ts","webpack://sqlFormatter/./src/lexer/TokenizerEngine.ts","webpack://sqlFormatter/./src/lexer/NestedComment.ts","webpack://sqlFormatter/./src/lexer/Tokenizer.ts","webpack://sqlFormatter/./src/dialect.ts","webpack://sqlFormatter/./src/formatter/config.ts","webpack://sqlFormatter/./src/formatter/Params.ts","webpack://sqlFormatter/./src/lexer/disambiguateTokens.ts","webpack://sqlFormatter/./src/parser/LexerAdapter.ts","webpack://sqlFormatter/./src/parser/ast.ts","webpack://sqlFormatter/./src/parser/grammar.ts","webpack://sqlFormatter/./src/parser/createParser.ts","webpack://sqlFormatter/./src/formatter/formatCommaPositions.ts","webpack://sqlFormatter/./src/formatter/Indentation.ts","webpack://sqlFormatter/./src/formatter/Layout.ts","webpack://sqlFormatter/./src/formatter/InlineLayout.ts","webpack://sqlFormatter/./src/formatter/ExpressionFormatter.ts","webpack://sqlFormatter/./src/formatter/tabularStyle.ts","webpack://sqlFormatter/./src/formatter/Formatter.ts","webpack://sqlFormatter/./src/formatter/formatAliasPositions.ts","webpack://sqlFormatter/./src/formatter/formatCreateTypePositions.ts","webpack://sqlFormatter/./src/validateConfig.ts","webpack://sqlFormatter/./src/sqlFormatter.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sqlFormatter\"] = factory();\n\telse\n\t\troot[\"sqlFormatter\"] = factory();\n})(this, () => {\nreturn ","(function(root, factory) {\n    if (typeof module === 'object' && module.exports) {\n        module.exports = factory();\n    } else {\n        root.nearley = factory();\n    }\n}(this, function() {\n\n    function Rule(name, symbols, postprocess) {\n        this.id = ++Rule.highestId;\n        this.name = name;\n        this.symbols = symbols;        // a list of literal | regex class | nonterminal\n        this.postprocess = postprocess;\n        return this;\n    }\n    Rule.highestId = 0;\n\n    Rule.prototype.toString = function(withCursorAt) {\n        var symbolSequence = (typeof withCursorAt === \"undefined\")\n                             ? this.symbols.map(getSymbolShortDisplay).join(' ')\n                             : (   this.symbols.slice(0, withCursorAt).map(getSymbolShortDisplay).join(' ')\n                                 + \" ● \"\n                                 + this.symbols.slice(withCursorAt).map(getSymbolShortDisplay).join(' ')     );\n        return this.name + \" → \" + symbolSequence;\n    }\n\n\n    // a State is a rule at a position from a given starting point in the input stream (reference)\n    function State(rule, dot, reference, wantedBy) {\n        this.rule = rule;\n        this.dot = dot;\n        this.reference = reference;\n        this.data = [];\n        this.wantedBy = wantedBy;\n        this.isComplete = this.dot === rule.symbols.length;\n    }\n\n    State.prototype.toString = function() {\n        return \"{\" + this.rule.toString(this.dot) + \"}, from: \" + (this.reference || 0);\n    };\n\n    State.prototype.nextState = function(child) {\n        var state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy);\n        state.left = this;\n        state.right = child;\n        if (state.isComplete) {\n            state.data = state.build();\n            // Having right set here will prevent the right state and its children\n            // form being garbage collected\n            state.right = undefined;\n        }\n        return state;\n    };\n\n    State.prototype.build = function() {\n        var children = [];\n        var node = this;\n        do {\n            children.push(node.right.data);\n            node = node.left;\n        } while (node.left);\n        children.reverse();\n        return children;\n    };\n\n    State.prototype.finish = function() {\n        if (this.rule.postprocess) {\n            this.data = this.rule.postprocess(this.data, this.reference, Parser.fail);\n        }\n    };\n\n\n    function Column(grammar, index) {\n        this.grammar = grammar;\n        this.index = index;\n        this.states = [];\n        this.wants = {}; // states indexed by the non-terminal they expect\n        this.scannable = []; // list of states that expect a token\n        this.completed = {}; // states that are nullable\n    }\n\n\n    Column.prototype.process = function(nextColumn) {\n        var states = this.states;\n        var wants = this.wants;\n        var completed = this.completed;\n\n        for (var w = 0; w < states.length; w++) { // nb. we push() during iteration\n            var state = states[w];\n\n            if (state.isComplete) {\n                state.finish();\n                if (state.data !== Parser.fail) {\n                    // complete\n                    var wantedBy = state.wantedBy;\n                    for (var i = wantedBy.length; i--; ) { // this line is hot\n                        var left = wantedBy[i];\n                        this.complete(left, state);\n                    }\n\n                    // special-case nullables\n                    if (state.reference === this.index) {\n                        // make sure future predictors of this rule get completed.\n                        var exp = state.rule.name;\n                        (this.completed[exp] = this.completed[exp] || []).push(state);\n                    }\n                }\n\n            } else {\n                // queue scannable states\n                var exp = state.rule.symbols[state.dot];\n                if (typeof exp !== 'string') {\n                    this.scannable.push(state);\n                    continue;\n                }\n\n                // predict\n                if (wants[exp]) {\n                    wants[exp].push(state);\n\n                    if (completed.hasOwnProperty(exp)) {\n                        var nulls = completed[exp];\n                        for (var i = 0; i < nulls.length; i++) {\n                            var right = nulls[i];\n                            this.complete(state, right);\n                        }\n                    }\n                } else {\n                    wants[exp] = [state];\n                    this.predict(exp);\n                }\n            }\n        }\n    }\n\n    Column.prototype.predict = function(exp) {\n        var rules = this.grammar.byName[exp] || [];\n\n        for (var i = 0; i < rules.length; i++) {\n            var r = rules[i];\n            var wantedBy = this.wants[exp];\n            var s = new State(r, 0, this.index, wantedBy);\n            this.states.push(s);\n        }\n    }\n\n    Column.prototype.complete = function(left, right) {\n        var copy = left.nextState(right);\n        this.states.push(copy);\n    }\n\n\n    function Grammar(rules, start) {\n        this.rules = rules;\n        this.start = start || this.rules[0].name;\n        var byName = this.byName = {};\n        this.rules.forEach(function(rule) {\n            if (!byName.hasOwnProperty(rule.name)) {\n                byName[rule.name] = [];\n            }\n            byName[rule.name].push(rule);\n        });\n    }\n\n    // So we can allow passing (rules, start) directly to Parser for backwards compatibility\n    Grammar.fromCompiled = function(rules, start) {\n        var lexer = rules.Lexer;\n        if (rules.ParserStart) {\n          start = rules.ParserStart;\n          rules = rules.ParserRules;\n        }\n        var rules = rules.map(function (r) { return (new Rule(r.name, r.symbols, r.postprocess)); });\n        var g = new Grammar(rules, start);\n        g.lexer = lexer; // nb. storing lexer on Grammar is iffy, but unavoidable\n        return g;\n    }\n\n\n    function StreamLexer() {\n      this.reset(\"\");\n    }\n\n    StreamLexer.prototype.reset = function(data, state) {\n        this.buffer = data;\n        this.index = 0;\n        this.line = state ? state.line : 1;\n        this.lastLineBreak = state ? -state.col : 0;\n    }\n\n    StreamLexer.prototype.next = function() {\n        if (this.index < this.buffer.length) {\n            var ch = this.buffer[this.index++];\n            if (ch === '\\n') {\n              this.line += 1;\n              this.lastLineBreak = this.index;\n            }\n            return {value: ch};\n        }\n    }\n\n    StreamLexer.prototype.save = function() {\n      return {\n        line: this.line,\n        col: this.index - this.lastLineBreak,\n      }\n    }\n\n    StreamLexer.prototype.formatError = function(token, message) {\n        // nb. this gets called after consuming the offending token,\n        // so the culprit is index-1\n        var buffer = this.buffer;\n        if (typeof buffer === 'string') {\n            var lines = buffer\n                .split(\"\\n\")\n                .slice(\n                    Math.max(0, this.line - 5), \n                    this.line\n                );\n\n            var nextLineBreak = buffer.indexOf('\\n', this.index);\n            if (nextLineBreak === -1) nextLineBreak = buffer.length;\n            var col = this.index - this.lastLineBreak;\n            var lastLineDigits = String(this.line).length;\n            message += \" at line \" + this.line + \" col \" + col + \":\\n\\n\";\n            message += lines\n                .map(function(line, i) {\n                    return pad(this.line - lines.length + i + 1, lastLineDigits) + \" \" + line;\n                }, this)\n                .join(\"\\n\");\n            message += \"\\n\" + pad(\"\", lastLineDigits + col) + \"^\\n\";\n            return message;\n        } else {\n            return message + \" at index \" + (this.index - 1);\n        }\n\n        function pad(n, length) {\n            var s = String(n);\n            return Array(length - s.length + 1).join(\" \") + s;\n        }\n    }\n\n    function Parser(rules, start, options) {\n        if (rules instanceof Grammar) {\n            var grammar = rules;\n            var options = start;\n        } else {\n            var grammar = Grammar.fromCompiled(rules, start);\n        }\n        this.grammar = grammar;\n\n        // Read options\n        this.options = {\n            keepHistory: false,\n            lexer: grammar.lexer || new StreamLexer,\n        };\n        for (var key in (options || {})) {\n            this.options[key] = options[key];\n        }\n\n        // Setup lexer\n        this.lexer = this.options.lexer;\n        this.lexerState = undefined;\n\n        // Setup a table\n        var column = new Column(grammar, 0);\n        var table = this.table = [column];\n\n        // I could be expecting anything.\n        column.wants[grammar.start] = [];\n        column.predict(grammar.start);\n        // TODO what if start rule is nullable?\n        column.process();\n        this.current = 0; // token index\n    }\n\n    // create a reserved token for indicating a parse fail\n    Parser.fail = {};\n\n    Parser.prototype.feed = function(chunk) {\n        var lexer = this.lexer;\n        lexer.reset(chunk, this.lexerState);\n\n        var token;\n        while (true) {\n            try {\n                token = lexer.next();\n                if (!token) {\n                    break;\n                }\n            } catch (e) {\n                // Create the next column so that the error reporter\n                // can display the correctly predicted states.\n                var nextColumn = new Column(this.grammar, this.current + 1);\n                this.table.push(nextColumn);\n                var err = new Error(this.reportLexerError(e));\n                err.offset = this.current;\n                err.token = e.token;\n                throw err;\n            }\n            // We add new states to table[current+1]\n            var column = this.table[this.current];\n\n            // GC unused states\n            if (!this.options.keepHistory) {\n                delete this.table[this.current - 1];\n            }\n\n            var n = this.current + 1;\n            var nextColumn = new Column(this.grammar, n);\n            this.table.push(nextColumn);\n\n            // Advance all tokens that expect the symbol\n            var literal = token.text !== undefined ? token.text : token.value;\n            var value = lexer.constructor === StreamLexer ? token.value : token;\n            var scannable = column.scannable;\n            for (var w = scannable.length; w--; ) {\n                var state = scannable[w];\n                var expect = state.rule.symbols[state.dot];\n                // Try to consume the token\n                // either regex or literal\n                if (expect.test ? expect.test(value) :\n                    expect.type ? expect.type === token.type\n                                : expect.literal === literal) {\n                    // Add it\n                    var next = state.nextState({data: value, token: token, isToken: true, reference: n - 1});\n                    nextColumn.states.push(next);\n                }\n            }\n\n            // Next, for each of the rules, we either\n            // (a) complete it, and try to see if the reference row expected that\n            //     rule\n            // (b) predict the next nonterminal it expects by adding that\n            //     nonterminal's start state\n            // To prevent duplication, we also keep track of rules we have already\n            // added\n\n            nextColumn.process();\n\n            // If needed, throw an error:\n            if (nextColumn.states.length === 0) {\n                // No states at all! This is not good.\n                var err = new Error(this.reportError(token));\n                err.offset = this.current;\n                err.token = token;\n                throw err;\n            }\n\n            // maybe save lexer state\n            if (this.options.keepHistory) {\n              column.lexerState = lexer.save()\n            }\n\n            this.current++;\n        }\n        if (column) {\n          this.lexerState = lexer.save()\n        }\n\n        // Incrementally keep track of results\n        this.results = this.finish();\n\n        // Allow chaining, for whatever it's worth\n        return this;\n    };\n\n    Parser.prototype.reportLexerError = function(lexerError) {\n        var tokenDisplay, lexerMessage;\n        // Planning to add a token property to moo's thrown error\n        // even on erroring tokens to be used in error display below\n        var token = lexerError.token;\n        if (token) {\n            tokenDisplay = \"input \" + JSON.stringify(token.text[0]) + \" (lexer error)\";\n            lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n        } else {\n            tokenDisplay = \"input (lexer error)\";\n            lexerMessage = lexerError.message;\n        }\n        return this.reportErrorCommon(lexerMessage, tokenDisplay);\n    };\n\n    Parser.prototype.reportError = function(token) {\n        var tokenDisplay = (token.type ? token.type + \" token: \" : \"\") + JSON.stringify(token.value !== undefined ? token.value : token);\n        var lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n        return this.reportErrorCommon(lexerMessage, tokenDisplay);\n    };\n\n    Parser.prototype.reportErrorCommon = function(lexerMessage, tokenDisplay) {\n        var lines = [];\n        lines.push(lexerMessage);\n        var lastColumnIndex = this.table.length - 2;\n        var lastColumn = this.table[lastColumnIndex];\n        var expectantStates = lastColumn.states\n            .filter(function(state) {\n                var nextSymbol = state.rule.symbols[state.dot];\n                return nextSymbol && typeof nextSymbol !== \"string\";\n            });\n\n        if (expectantStates.length === 0) {\n            lines.push('Unexpected ' + tokenDisplay + '. I did not expect any more input. Here is the state of my parse table:\\n');\n            this.displayStateStack(lastColumn.states, lines);\n        } else {\n            lines.push('Unexpected ' + tokenDisplay + '. Instead, I was expecting to see one of the following:\\n');\n            // Display a \"state stack\" for each expectant state\n            // - which shows you how this state came to be, step by step.\n            // If there is more than one derivation, we only display the first one.\n            var stateStacks = expectantStates\n                .map(function(state) {\n                    return this.buildFirstStateStack(state, []) || [state];\n                }, this);\n            // Display each state that is expecting a terminal symbol next.\n            stateStacks.forEach(function(stateStack) {\n                var state = stateStack[0];\n                var nextSymbol = state.rule.symbols[state.dot];\n                var symbolDisplay = this.getSymbolDisplay(nextSymbol);\n                lines.push('A ' + symbolDisplay + ' based on:');\n                this.displayStateStack(stateStack, lines);\n            }, this);\n        }\n        lines.push(\"\");\n        return lines.join(\"\\n\");\n    }\n    \n    Parser.prototype.displayStateStack = function(stateStack, lines) {\n        var lastDisplay;\n        var sameDisplayCount = 0;\n        for (var j = 0; j < stateStack.length; j++) {\n            var state = stateStack[j];\n            var display = state.rule.toString(state.dot);\n            if (display === lastDisplay) {\n                sameDisplayCount++;\n            } else {\n                if (sameDisplayCount > 0) {\n                    lines.push('    ^ ' + sameDisplayCount + ' more lines identical to this');\n                }\n                sameDisplayCount = 0;\n                lines.push('    ' + display);\n            }\n            lastDisplay = display;\n        }\n    };\n\n    Parser.prototype.getSymbolDisplay = function(symbol) {\n        return getSymbolLongDisplay(symbol);\n    };\n\n    /*\n    Builds a the first state stack. You can think of a state stack as the call stack\n    of the recursive-descent parser which the Nearley parse algorithm simulates.\n    A state stack is represented as an array of state objects. Within a\n    state stack, the first item of the array will be the starting\n    state, with each successive item in the array going further back into history.\n\n    This function needs to be given a starting state and an empty array representing\n    the visited states, and it returns an single state stack.\n\n    */\n    Parser.prototype.buildFirstStateStack = function(state, visited) {\n        if (visited.indexOf(state) !== -1) {\n            // Found cycle, return null\n            // to eliminate this path from the results, because\n            // we don't know how to display it meaningfully\n            return null;\n        }\n        if (state.wantedBy.length === 0) {\n            return [state];\n        }\n        var prevState = state.wantedBy[0];\n        var childVisited = [state].concat(visited);\n        var childResult = this.buildFirstStateStack(prevState, childVisited);\n        if (childResult === null) {\n            return null;\n        }\n        return [state].concat(childResult);\n    };\n\n    Parser.prototype.save = function() {\n        var column = this.table[this.current];\n        column.lexerState = this.lexerState;\n        return column;\n    };\n\n    Parser.prototype.restore = function(column) {\n        var index = column.index;\n        this.current = index;\n        this.table[index] = column;\n        this.table.splice(index + 1);\n        this.lexerState = column.lexerState;\n\n        // Incrementally keep track of results\n        this.results = this.finish();\n    };\n\n    // nb. deprecated: use save/restore instead!\n    Parser.prototype.rewind = function(index) {\n        if (!this.options.keepHistory) {\n            throw new Error('set option `keepHistory` to enable rewinding')\n        }\n        // nb. recall column (table) indicies fall between token indicies.\n        //        col 0   --   token 0   --   col 1\n        this.restore(this.table[index]);\n    };\n\n    Parser.prototype.finish = function() {\n        // Return the possible parsings\n        var considerations = [];\n        var start = this.grammar.start;\n        var column = this.table[this.table.length - 1]\n        column.states.forEach(function (t) {\n            if (t.rule.name === start\n                    && t.dot === t.rule.symbols.length\n                    && t.reference === 0\n                    && t.data !== Parser.fail) {\n                considerations.push(t);\n            }\n        });\n        return considerations.map(function(c) {return c.data; });\n    };\n\n    function getSymbolLongDisplay(symbol) {\n        var type = typeof symbol;\n        if (type === \"string\") {\n            return symbol;\n        } else if (type === \"object\") {\n            if (symbol.literal) {\n                return JSON.stringify(symbol.literal);\n            } else if (symbol instanceof RegExp) {\n                return 'character matching ' + symbol;\n            } else if (symbol.type) {\n                return symbol.type + ' token';\n            } else if (symbol.test) {\n                return 'token matching ' + String(symbol.test);\n            } else {\n                throw new Error('Unknown symbol type: ' + symbol);\n            }\n        }\n    }\n\n    function getSymbolShortDisplay(symbol) {\n        var type = typeof symbol;\n        if (type === \"string\") {\n            return symbol;\n        } else if (type === \"object\") {\n            if (symbol.literal) {\n                return JSON.stringify(symbol.literal);\n            } else if (symbol instanceof RegExp) {\n                return symbol.toString();\n            } else if (symbol.type) {\n                return '%' + symbol.type;\n            } else if (symbol.test) {\n                return '<' + String(symbol.test) + '>';\n            } else {\n                throw new Error('Unknown symbol type: ' + symbol);\n            }\n        }\n    }\n\n    return {\n        Parser: Parser,\n        Grammar: Grammar,\n        Rule: Rule,\n    };\n\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/** Token type enum for all possible Token categories */\nexport enum TokenType {\n  QUOTED_IDENTIFIER = 'QUOTED_IDENTIFIER',\n  IDENTIFIER = 'IDENTIFIER',\n  STRING = 'STRING',\n  VARIABLE = 'VARIABLE',\n  RESERVED_KEYWORD = 'RESERVED_KEYWORD',\n  RESERVED_FUNCTION_NAME = 'RESERVED_FUNCTION_NAME',\n  RESERVED_PHRASE = 'RESERVED_PHRASE',\n  RESERVED_SET_OPERATION = 'RESERVED_SET_OPERATION',\n  RESERVED_CLAUSE = 'RESERVED_CLAUSE',\n  RESERVED_SELECT = 'RESERVED_SELECT',\n  RESERVED_JOIN = 'RESERVED_JOIN',\n  ARRAY_IDENTIFIER = 'ARRAY_IDENTIFIER', // IDENTIFIER token in front of [\n  ARRAY_KEYWORD = 'ARRAY_KEYWORD', // RESERVED_KEYWORD token in front of [\n  CASE = 'CASE',\n  END = 'END',\n  WHEN = 'WHEN',\n  ELSE = 'ELSE',\n  THEN = 'THEN',\n  LIMIT = 'LIMIT',\n  BETWEEN = 'BETWEEN',\n  AND = 'AND',\n  ON = 'ON',\n  OR = 'OR',\n  XOR = 'XOR',\n  OPERATOR = 'OPERATOR',\n  COMMA = 'COMMA',\n  ASTERISK = 'ASTERISK', // *\n  DOT = 'DOT', // .\n  OPEN_PAREN = 'OPEN_PAREN',\n  CLOSE_PAREN = 'CLOSE_PAREN',\n  LINE_COMMENT = 'LINE_COMMENT',\n  BLOCK_COMMENT = 'BLOCK_COMMENT',\n  NUMBER = 'NUMBER',\n  NAMED_PARAMETER = 'NAMED_PARAMETER',\n  QUOTED_PARAMETER = 'QUOTED_PARAMETER',\n  NUMBERED_PARAMETER = 'NUMBERED_PARAMETER',\n  POSITIONAL_PARAMETER = 'POSITIONAL_PARAMETER',\n  CUSTOM_PARAMETER = 'CUSTOM_PARAMETER',\n  DELIMITER = 'DELIMITER',\n  EOF = 'EOF'\n}\n\n/** Struct to store the most basic cohesive unit of language grammar */\nexport interface Token {\n  type: TokenType;\n  raw: string; // The raw original text that was matched\n  text: string; // Cleaned up text e.g. keyword converted to uppercase and extra spaces removed\n  key?: string;\n  start: number;\n  precedingWhitespace?: string; // Whitespace before this token, if any\n}\n\n/** Creates EOF token positioned at given location */\nexport const createEofToken = (index: number) => ({\n  type: TokenType.EOF,\n  raw: '«EOF»',\n  text: '«EOF»',\n  start: index\n});\n\n/**\n * For use as a \"missing token\"\n * e.g. in lookAhead and lookBehind to avoid dealing with null values\n */\nexport const EOF_TOKEN = createEofToken(Infinity);\n\n/** Checks if two tokens are equivalent */\nexport const testToken =\n  (compareToken: { type: TokenType; text: string }) =>\n  (token: Token): boolean =>\n    token.type === compareToken.type && token.text === compareToken.text;\n\n/** Util object that allows for easy checking of Reserved Keywords */\nexport const isToken = {\n  ARRAY: testToken({ text: 'ARRAY', type: TokenType.RESERVED_KEYWORD }),\n  BY: testToken({ text: 'BY', type: TokenType.RESERVED_KEYWORD }),\n  SET: testToken({ text: 'SET', type: TokenType.RESERVED_CLAUSE }),\n  STRUCT: testToken({ text: 'STRUCT', type: TokenType.RESERVED_KEYWORD }),\n  WINDOW: testToken({ text: 'WINDOW', type: TokenType.RESERVED_CLAUSE })\n};\n\n/** Checks if token is any Reserved Keyword or Clause */\nexport const isReserved = (type: TokenType): boolean =>\n  type === TokenType.RESERVED_KEYWORD ||\n  type === TokenType.RESERVED_FUNCTION_NAME ||\n  type === TokenType.RESERVED_PHRASE ||\n  type === TokenType.RESERVED_CLAUSE ||\n  type === TokenType.RESERVED_SELECT ||\n  type === TokenType.RESERVED_SET_OPERATION ||\n  type === TokenType.RESERVED_JOIN ||\n  type === TokenType.ARRAY_KEYWORD ||\n  type === TokenType.CASE ||\n  type === TokenType.END ||\n  type === TokenType.WHEN ||\n  type === TokenType.ELSE ||\n  type === TokenType.THEN ||\n  type === TokenType.LIMIT ||\n  type === TokenType.BETWEEN ||\n  type === TokenType.ON ||\n  type === TokenType.AND ||\n  type === TokenType.OR ||\n  type === TokenType.XOR;\n\nexport const isLogicalOperator = (type: TokenType): boolean =>\n  type === TokenType.AND || type === TokenType.OR || type === TokenType.XOR || type === TokenType.ON;\n","/**\n * Performs expandSinglePhrase() on array\n */\nexport const expandPhrases = (phrases: string[]): string[] => phrases.flatMap(expandSinglePhrase);\n\n/**\n * Expands a syntax description like\n *\n *     \"CREATE [OR REPLACE] [TEMP|TEMPORARY] TABLE\"\n *\n * into an array of all possible combinations like:\n *\n *     [ \"CREATE TABLE\",\n *       \"CREATE TEMP TABLE\",\n *       \"CREATE TEMPORARY TABLE\",\n *       \"CREATE OR REPLACE TABLE\",\n *       \"CREATE OR REPLACE TEMP TABLE\",\n *       \"CREATE OR REPLACE TEMPORARY TABLE\" ]\n */\nexport const expandSinglePhrase = (phrase: string): string[] =>\n  buildCombinations(parsePhrase(phrase)).map(text => text.trim());\n\n// This data type holds variants of a single part in whole phrase.\n// Corresponding to syntax as follows:\n//\n//   \"TABLE\"            --> [\"TABLE\"]\n//   \"[TABLE]\"          --> [\"\", \"TABLE\"]\n//   \"[TEMP|TEMPORARY]\" --> [\"\", \"TEMP\", \"TEMPORARY\"]\n//   \"{TEMP|TEMPORARY}\" --> [\"TEMP\", \"TEMPORARY\"]\n//\ntype PhrasePart = string[];\n\nconst REQUIRED_PART = /[^[\\]{}]+/y;\nconst REQUIRED_BLOCK = /\\{.*?\\}/y;\nconst OPTIONAL_BLOCK = /\\[.*?\\]/y;\n\nconst parsePhrase = (text: string): PhrasePart[] => {\n  let index = 0;\n  const result: PhrasePart[] = [];\n  while (index < text.length) {\n    // Match everything else outside of \"[...]\" or \"{...}\" blocks\n    REQUIRED_PART.lastIndex = index;\n    const requiredMatch = REQUIRED_PART.exec(text);\n    if (requiredMatch) {\n      result.push([requiredMatch[0].trim()]);\n      index += requiredMatch[0].length;\n    }\n\n    // Match \"[...]\" block\n    OPTIONAL_BLOCK.lastIndex = index;\n    const optionalBlockMatch = OPTIONAL_BLOCK.exec(text);\n    if (optionalBlockMatch) {\n      const choices = optionalBlockMatch[0]\n        .slice(1, -1)\n        .split('|')\n        .map(s => s.trim());\n      result.push(['', ...choices]);\n      index += optionalBlockMatch[0].length;\n    }\n\n    // Match \"{...}\" block\n    REQUIRED_BLOCK.lastIndex = index;\n    const requiredBlockMatch = REQUIRED_BLOCK.exec(text);\n    if (requiredBlockMatch) {\n      const choices = requiredBlockMatch[0]\n        .slice(1, -1)\n        .split('|')\n        .map(s => s.trim());\n      result.push(choices);\n      index += requiredBlockMatch[0].length;\n    }\n\n    if (!requiredMatch && !optionalBlockMatch && !requiredBlockMatch) {\n      throw new Error(`Unbalanced parenthesis in: ${text}`);\n    }\n  }\n  return result;\n};\n\nconst buildCombinations = ([first, ...rest]: PhrasePart[]): string[] => {\n  if (first === undefined) {\n    return [''];\n  }\n  return buildCombinations(rest).flatMap(tail => first.map(head => head.trim() + ' ' + tail.trim()));\n};\n","export const dedupe = (arr: string[]) => [...new Set(arr)];\n\n// Last element from array\nexport const last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\n// Sorts strings by length, so that longer ones are first\n// Also sorts alphabetically after sorting by length.\nexport const sortByLengthDesc = (strings: string[]) =>\n  strings.sort((a, b) => b.length - a.length || a.localeCompare(b));\n\n/** Get length of longest string in list of strings */\nexport const maxLength = (strings: string[]) => strings.reduce((max, cur) => Math.max(max, cur.length), 0);\n\n// replaces long whitespace sequences with just one space\nexport const equalizeWhitespace = (s: string) => s.replace(/\\s+/gu, ' ');\n\n// Used for flattening keyword lists\nexport const flatKeywordList = (obj: Record<string, string[]>): string[] => dedupe(Object.values(obj).flat());\n\n// True when string contains multiple lines\nexport const isMultiline = (text: string): boolean => /\\n/.test(text);\n\n// Given a type and a field name, returns a type where this field is optional\n//\n// For example, these two type definitions are equivalent:\n//\n//   type Foo = Optional<{ foo: string, bar: number }, 'foo'>;\n//   type Foo = { foo?: string, bar: number };\n//\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords\n  keywords: [\n    'ALL',\n    'AND',\n    'ANY',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'ASSERT_ROWS_MODIFIED',\n    'AT',\n    'BETWEEN',\n    'BY',\n    'CASE',\n    'CAST',\n    'COLLATE',\n    'CONTAINS',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'DEFAULT',\n    'DEFINE',\n    'DESC',\n    'DISTINCT',\n    'ELSE',\n    'END',\n    'ENUM',\n    'ESCAPE',\n    'EXCEPT',\n    'EXCLUDE',\n    'EXISTS',\n    'EXTRACT',\n    'FALSE',\n    'FETCH',\n    'FOLLOWING',\n    'FOR',\n    'FROM',\n    'FULL',\n    'GROUP',\n    'GROUPING',\n    'GROUPS',\n    'HASH',\n    'HAVING',\n    'IF',\n    'IGNORE',\n    'IN',\n    'INNER',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'JOIN',\n    'LATERAL',\n    'LEFT',\n    'LIKE',\n    'LIMIT',\n    'LOOKUP',\n    'MERGE',\n    'NATURAL',\n    'NEW',\n    'NO',\n    'NOT',\n    'NULL',\n    'NULLS',\n    'OF',\n    'ON',\n    'OR',\n    'ORDER',\n    'OUTER',\n    'OVER',\n    'PARTITION',\n    'PRECEDING',\n    'PROTO',\n    'RANGE',\n    'RECURSIVE',\n    'RESPECT',\n    'RIGHT',\n    'ROLLUP',\n    'ROWS',\n    'SELECT',\n    'SET',\n    'SOME',\n    'STRUCT',\n    'TABLE',\n    'TABLESAMPLE',\n    'THEN',\n    'TO',\n    'TREAT',\n    'TRUE',\n    'UNBOUNDED',\n    'UNION',\n    'UNNEST',\n    'USING',\n    'WHEN',\n    'WHERE',\n    'WINDOW',\n    'WITH',\n    'WITHIN'\n  ],\n  datatypes: [\n    'ARRAY', // parametric, ARRAY<T>\n    'BOOL',\n    'BYTES', // parameterised, BYTES(Length)\n    'DATE',\n    'DATETIME',\n    'GEOGRAPHY',\n    'INTERVAL',\n    'INT64',\n    'INT',\n    'SMALLINT',\n    'INTEGER',\n    'BIGINT',\n    'TINYINT',\n    'BYTEINT',\n    'NUMERIC', // parameterised, NUMERIC(Precision[, Scale])\n    'DECIMAL', // parameterised, DECIMAL(Precision[, Scale])\n    'BIGNUMERIC', // parameterised, BIGNUMERIC(Precision[, Scale])\n    'BIGDECIMAL', // parameterised, BIGDECIMAL(Precision[, Scale])\n    'FLOAT64',\n    'STRING', // parameterised, STRING(Length)\n    'STRUCT', // parametric, STRUCT<T>\n    'TIME',\n    'TIMEZONE'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions#formatting_syntax\n  stringFormat: ['HEX', 'BASEX', 'BASE64M', 'ASCII', 'UTF-8', 'UTF8'],\n  misc: ['SAFE'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  ddl: [\n    'LIKE', // CREATE TABLE LIKE\n    'COPY', // CREATE TABLE COPY\n    'CLONE', // CREATE TABLE CLONE\n    'IN',\n    'OUT',\n    'INOUT',\n    'RETURNS',\n    'LANGUAGE',\n    'CASCADE',\n    'RESTRICT',\n    'DETERMINISTIC'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions\n  aead: [\n    'KEYS.NEW_KEYSET',\n    'KEYS.ADD_KEY_FROM_RAW_BYTES',\n    'AEAD.DECRYPT_BYTES',\n    'AEAD.DECRYPT_STRING',\n    'AEAD.ENCRYPT',\n    'KEYS.KEYSET_CHAIN',\n    'KEYS.KEYSET_FROM_JSON',\n    'KEYS.KEYSET_TO_JSON',\n    'KEYS.ROTATE_KEYSET',\n    'KEYS.KEYSET_LENGTH'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions\n  aggregateAnalytic: [\n    'ANY_VALUE',\n    'ARRAY_AGG',\n    'AVG',\n    'CORR',\n    'COUNT',\n    'COUNTIF',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'MAX',\n    'MIN',\n    'ST_CLUSTERDBSCAN',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STRING_AGG',\n    'SUM',\n    'VAR_POP',\n    'VAR_SAMP'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions\n  aggregate: [\n    'ANY_VALUE',\n    'ARRAY_AGG',\n    'ARRAY_CONCAT_AGG',\n    'AVG',\n    'BIT_AND',\n    'BIT_OR',\n    'BIT_XOR',\n    'COUNT',\n    'COUNTIF',\n    'LOGICAL_AND',\n    'LOGICAL_OR',\n    'MAX',\n    'MIN',\n    'STRING_AGG',\n    'SUM'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions\n  approximateAggregate: ['APPROX_COUNT_DISTINCT', 'APPROX_QUANTILES', 'APPROX_TOP_COUNT', 'APPROX_TOP_SUM'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions\n  array: [\n    // 'ARRAY',\n    'ARRAY_CONCAT',\n    'ARRAY_LENGTH',\n    'ARRAY_TO_STRING',\n    'GENERATE_ARRAY',\n    'GENERATE_DATE_ARRAY',\n    'GENERATE_TIMESTAMP_ARRAY',\n    'ARRAY_REVERSE',\n    'OFFSET',\n    'SAFE_OFFSET',\n    'ORDINAL',\n    'SAFE_ORDINAL'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions\n  bitwise: ['BIT_COUNT'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions\n  conversion: [\n    // 'CASE',\n    'PARSE_BIGNUMERIC',\n    'PARSE_NUMERIC',\n    'SAFE_CAST'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions\n  date: [\n    'CURRENT_DATE',\n    'EXTRACT',\n    'DATE',\n    'DATE_ADD',\n    'DATE_SUB',\n    'DATE_DIFF',\n    'DATE_TRUNC',\n    'DATE_FROM_UNIX_DATE',\n    'FORMAT_DATE',\n    'LAST_DAY',\n    'PARSE_DATE',\n    'UNIX_DATE'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions\n  datetime: [\n    'CURRENT_DATETIME',\n    'DATETIME',\n    'EXTRACT',\n    'DATETIME_ADD',\n    'DATETIME_SUB',\n    'DATETIME_DIFF',\n    'DATETIME_TRUNC',\n    'FORMAT_DATETIME',\n    'LAST_DAY',\n    'PARSE_DATETIME'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions\n  debugging: ['ERROR'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions\n  federatedQuery: ['EXTERNAL_QUERY'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions\n  geography: [\n    'S2_CELLIDFROMPOINT',\n    'S2_COVERINGCELLIDS',\n    'ST_ANGLE',\n    'ST_AREA',\n    'ST_ASBINARY',\n    'ST_ASGEOJSON',\n    'ST_ASTEXT',\n    'ST_AZIMUTH',\n    'ST_BOUNDARY',\n    'ST_BOUNDINGBOX',\n    'ST_BUFFER',\n    'ST_BUFFERWITHTOLERANCE',\n    'ST_CENTROID',\n    'ST_CENTROID_AGG',\n    'ST_CLOSESTPOINT',\n    'ST_CLUSTERDBSCAN',\n    'ST_CONTAINS',\n    'ST_CONVEXHULL',\n    'ST_COVEREDBY',\n    'ST_COVERS',\n    'ST_DIFFERENCE',\n    'ST_DIMENSION',\n    'ST_DISJOINT',\n    'ST_DISTANCE',\n    'ST_DUMP',\n    'ST_DWITHIN',\n    'ST_ENDPOINT',\n    'ST_EQUALS',\n    'ST_EXTENT',\n    'ST_EXTERIORRING',\n    'ST_GEOGFROM',\n    'ST_GEOGFROMGEOJSON',\n    'ST_GEOGFROMTEXT',\n    'ST_GEOGFROMWKB',\n    'ST_GEOGPOINT',\n    'ST_GEOGPOINTFROMGEOHASH',\n    'ST_GEOHASH',\n    'ST_GEOMETRYTYPE',\n    'ST_INTERIORRINGS',\n    'ST_INTERSECTION',\n    'ST_INTERSECTS',\n    'ST_INTERSECTSBOX',\n    'ST_ISCOLLECTION',\n    'ST_ISEMPTY',\n    'ST_LENGTH',\n    'ST_MAKELINE',\n    'ST_MAKEPOLYGON',\n    'ST_MAKEPOLYGONORIENTED',\n    'ST_MAXDISTANCE',\n    'ST_NPOINTS',\n    'ST_NUMGEOMETRIES',\n    'ST_NUMPOINTS',\n    'ST_PERIMETER',\n    'ST_POINTN',\n    'ST_SIMPLIFY',\n    'ST_SNAPTOGRID',\n    'ST_STARTPOINT',\n    'ST_TOUCHES',\n    'ST_UNION',\n    'ST_UNION_AGG',\n    'ST_WITHIN',\n    'ST_X',\n    'ST_Y'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions\n  hash: ['FARM_FINGERPRINT', 'MD5', 'SHA1', 'SHA256', 'SHA512'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions\n  hll: ['HLL_COUNT.INIT', 'HLL_COUNT.MERGE', 'HLL_COUNT.MERGE_PARTIAL', 'HLL_COUNT.EXTRACT'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions\n  interval: ['MAKE_INTERVAL', 'EXTRACT', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions\n  json: [\n    'JSON_EXTRACT',\n    'JSON_QUERY',\n    'JSON_EXTRACT_SCALAR',\n    'JSON_VALUE',\n    'JSON_EXTRACT_ARRAY',\n    'JSON_QUERY_ARRAY',\n    'JSON_EXTRACT_STRING_ARRAY',\n    'JSON_VALUE_ARRAY',\n    'TO_JSON_STRING'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions\n  math: [\n    'ABS',\n    'SIGN',\n    'IS_INF',\n    'IS_NAN',\n    'IEEE_DIVIDE',\n    'RAND',\n    'SQRT',\n    'POW',\n    'POWER',\n    'EXP',\n    'LN',\n    'LOG',\n    'LOG10',\n    'GREATEST',\n    'LEAST',\n    'DIV',\n    'SAFE_DIVIDE',\n    'SAFE_MULTIPLY',\n    'SAFE_NEGATE',\n    'SAFE_ADD',\n    'SAFE_SUBTRACT',\n    'MOD',\n    'ROUND',\n    'TRUNC',\n    'CEIL',\n    'CEILING',\n    'FLOOR',\n    'COS',\n    'COSH',\n    'ACOS',\n    'ACOSH',\n    'SIN',\n    'SINH',\n    'ASIN',\n    'ASINH',\n    'TAN',\n    'TANH',\n    'ATAN',\n    'ATANH',\n    'ATAN2',\n    'RANGE_BUCKET'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions\n  navigation: ['FIRST_VALUE', 'LAST_VALUE', 'NTH_VALUE', 'LEAD', 'LAG', 'PERCENTILE_CONT', 'PERCENTILE_DISC'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions\n  net: [\n    'NET.IP_FROM_STRING',\n    'NET.SAFE_IP_FROM_STRING',\n    'NET.IP_TO_STRING',\n    'NET.IP_NET_MASK',\n    'NET.IP_TRUNC',\n    'NET.IPV4_FROM_INT64',\n    'NET.IPV4_TO_INT64',\n    'NET.HOST',\n    'NET.PUBLIC_SUFFIX',\n    'NET.REG_DOMAIN'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions\n  numbering: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'NTILE', 'ROW_NUMBER'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions\n  security: ['SESSION_USER'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions\n  statisticalAggregate: [\n    'CORR',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STDDEV',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions\n  string: [\n    'ASCII',\n    'BYTE_LENGTH',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'CHR',\n    'CODE_POINTS_TO_BYTES',\n    'CODE_POINTS_TO_STRING',\n    'CONCAT',\n    'CONTAINS_SUBSTR',\n    'ENDS_WITH',\n    'FORMAT',\n    'FROM_BASE32',\n    'FROM_BASE64',\n    'FROM_HEX',\n    'INITCAP',\n    'INSTR',\n    'LEFT',\n    'LENGTH',\n    'LPAD',\n    'LOWER',\n    'LTRIM',\n    'NORMALIZE',\n    'NORMALIZE_AND_CASEFOLD',\n    'OCTET_LENGTH',\n    'REGEXP_CONTAINS',\n    'REGEXP_EXTRACT',\n    'REGEXP_EXTRACT_ALL',\n    'REGEXP_INSTR',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'REPLACE',\n    'REPEAT',\n    'REVERSE',\n    'RIGHT',\n    'RPAD',\n    'RTRIM',\n    'SAFE_CONVERT_BYTES_TO_STRING',\n    'SOUNDEX',\n    'SPLIT',\n    'STARTS_WITH',\n    'STRPOS',\n    'SUBSTR',\n    'SUBSTRING',\n    'TO_BASE32',\n    'TO_BASE64',\n    'TO_CODE_POINTS',\n    'TO_HEX',\n    'TRANSLATE',\n    'TRIM',\n    'UNICODE',\n    'UPPER'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions\n  time: [\n    'CURRENT_TIME',\n    'TIME',\n    'EXTRACT',\n    'TIME_ADD',\n    'TIME_SUB',\n    'TIME_DIFF',\n    'TIME_TRUNC',\n    'FORMAT_TIME',\n    'PARSE_TIME'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions\n  timestamp: [\n    'CURRENT_TIMESTAMP',\n    'EXTRACT',\n    'STRING',\n    'TIMESTAMP',\n    'TIMESTAMP_ADD',\n    'TIMESTAMP_SUB',\n    'TIMESTAMP_DIFF',\n    'TIMESTAMP_TRUNC',\n    'FORMAT_TIMESTAMP',\n    'PARSE_TIMESTAMP',\n    'TIMESTAMP_SECONDS',\n    'TIMESTAMP_MILLIS',\n    'TIMESTAMP_MICROS',\n    'UNIX_SECONDS',\n    'UNIX_MILLIS',\n    'UNIX_MICROS'\n  ],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions\n  uuid: ['GENERATE_UUID'],\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions\n  conditional: ['COALESCE', 'IF', 'IFNULL', 'NULLIF'],\n  // https://cloud.google.com/bigquery/docs/reference/legacy-sql\n  legacyAggregate: [\n    'AVG',\n    'BIT_AND',\n    'BIT_OR',\n    'BIT_XOR',\n    'CORR',\n    'COUNT',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'EXACT_COUNT_DISTINCT',\n    'FIRST',\n    'GROUP_CONCAT',\n    'GROUP_CONCAT_UNQUOTED',\n    'LAST',\n    'MAX',\n    'MIN',\n    'NEST',\n    'NTH',\n    'QUANTILES',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'SUM',\n    'TOP',\n    'UNIQUE',\n    'VARIANCE',\n    'VAR_POP',\n    'VAR_SAMP'\n  ],\n  legacyBitwise: ['BIT_COUNT'],\n  legacyCasting: ['BOOLEAN', 'BYTES', 'CAST', 'FLOAT', 'HEX_STRING', 'INTEGER', 'STRING'],\n  legacyComparison: [\n    // expr 'IN',\n    'COALESCE',\n    'GREATEST',\n    'IFNULL',\n    'IS_INF',\n    'IS_NAN',\n    'IS_EXPLICITLY_DEFINED',\n    'LEAST',\n    'NVL'\n  ],\n  legacyDatetime: [\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'DATE',\n    'DATE_ADD',\n    'DATEDIFF',\n    'DAY',\n    'DAYOFWEEK',\n    'DAYOFYEAR',\n    'FORMAT_UTC_USEC',\n    'HOUR',\n    'MINUTE',\n    'MONTH',\n    'MSEC_TO_TIMESTAMP',\n    'NOW',\n    'PARSE_UTC_USEC',\n    'QUARTER',\n    'SEC_TO_TIMESTAMP',\n    'SECOND',\n    'STRFTIME_UTC_USEC',\n    'TIME',\n    'TIMESTAMP',\n    'TIMESTAMP_TO_MSEC',\n    'TIMESTAMP_TO_SEC',\n    'TIMESTAMP_TO_USEC',\n    'USEC_TO_TIMESTAMP',\n    'UTC_USEC_TO_DAY',\n    'UTC_USEC_TO_HOUR',\n    'UTC_USEC_TO_MONTH',\n    'UTC_USEC_TO_WEEK',\n    'UTC_USEC_TO_YEAR',\n    'WEEK',\n    'YEAR'\n  ],\n  legacyIp: ['FORMAT_IP', 'PARSE_IP', 'FORMAT_PACKED_IP', 'PARSE_PACKED_IP'],\n  legacyJson: ['JSON_EXTRACT', 'JSON_EXTRACT_SCALAR'],\n  legacyMath: [\n    'ABS',\n    'ACOS',\n    'ACOSH',\n    'ASIN',\n    'ASINH',\n    'ATAN',\n    'ATANH',\n    'ATAN2',\n    'CEIL',\n    'COS',\n    'COSH',\n    'DEGREES',\n    'EXP',\n    'FLOOR',\n    'LN',\n    'LOG',\n    'LOG2',\n    'LOG10',\n    'PI',\n    'POW',\n    'RADIANS',\n    'RAND',\n    'ROUND',\n    'SIN',\n    'SINH',\n    'SQRT',\n    'TAN',\n    'TANH'\n  ],\n  legacyRegex: ['REGEXP_MATCH', 'REGEXP_EXTRACT', 'REGEXP_REPLACE'],\n  legacyString: [\n    'CONCAT',\n    // expr CONTAINS 'str'\n    'INSTR',\n    'LEFT',\n    'LENGTH',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'REPLACE',\n    'RIGHT',\n    'RPAD',\n    'RTRIM',\n    'SPLIT',\n    'SUBSTR',\n    'UPPER'\n  ],\n  legacyTableWildcard: ['TABLE_DATE_RANGE', 'TABLE_DATE_RANGE_STRICT', 'TABLE_QUERY'],\n  legacyUrl: ['HOST', 'DOMAIN', 'TLD'],\n  legacyWindow: [\n    'AVG',\n    'COUNT',\n    'MAX',\n    'MIN',\n    'STDDEV',\n    'SUM',\n    'CUME_DIST',\n    'DENSE_RANK',\n    'FIRST_VALUE',\n    'LAG',\n    'LAST_VALUE',\n    'LEAD',\n    'NTH_VALUE',\n    'NTILE',\n    'PERCENT_RANK',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'RANK',\n    'RATIO_TO_REPORT',\n    'ROW_NUMBER'\n  ],\n  legacyMisc: [\n    'CURRENT_USER',\n    'EVERY',\n    'FROM_BASE64',\n    'HASH',\n    'FARM_FINGERPRINT',\n    'IF',\n    'POSITION',\n    'SHA1',\n    'SOME',\n    'TO_BASE64'\n  ],\n  other: ['BQ.JOBS.CANCEL', 'BQ.REFRESH_MATERIALIZED_VIEW'],\n  ddl: ['OPTIONS'],\n  pivot: ['PIVOT', 'UNPIVOT'],\n  // Data types with parameters like VARCHAR(100)\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#parameterized_data_types\n  dataTypes: ['BYTES', 'NUMERIC', 'DECIMAL', 'BIGNUMERIC', 'BIGDECIMAL', 'STRING']\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { EOF_TOKEN, isToken, TokenType, Token } from '../../lexer/token.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { keywords } from './bigquery.keywords.js';\nimport { functions } from './bigquery.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT] [AS STRUCT | AS VALUE]']);\n\nconst reservedClauses = expandPhrases([\n  // Queries: https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'QUALIFY',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'OMIT RECORD IF', // legacy\n  // Data modification: https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax\n  // - insert:\n  'INSERT [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [BY SOURCE | BY TARGET] [THEN]',\n  'UPDATE SET',\n  // Data definition, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  'CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',\n\n  'CLUSTER BY',\n  'FOR SYSTEM_TIME AS OF', // CREATE SNAPSHOT TABLE\n  'WITH CONNECTION',\n  'WITH PARTITION COLUMNS',\n  'REMOTE WITH CONNECTION'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP [SNAPSHOT | EXTERNAL] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'ADD COLUMN [IF NOT EXISTS]',\n  'DROP COLUMN [IF EXISTS]',\n  'RENAME TO',\n  'ALTER COLUMN [IF EXISTS]',\n  'SET DEFAULT COLLATE', // for alter column\n  'SET OPTIONS', // for alter column\n  'DROP NOT NULL', // for alter column\n  'SET DATA TYPE', // for alter column\n  // - alter schema\n  'ALTER SCHEMA [IF EXISTS]',\n  // - alter view\n  'ALTER [MATERIALIZED] VIEW [IF EXISTS]',\n  // - alter bi_capacity\n  'ALTER BI_CAPACITY',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // - create schema\n  'CREATE SCHEMA [IF NOT EXISTS]',\n  'DEFAULT COLLATE',\n\n  // stored procedures\n  'CREATE [OR REPLACE] [TEMP|TEMPORARY|TABLE] FUNCTION [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]',\n  // row access policy\n  'CREATE [OR REPLACE] ROW ACCESS POLICY [IF NOT EXISTS]',\n  'GRANT TO',\n  'FILTER USING',\n  // capacity\n  'CREATE CAPACITY',\n  'AS JSON',\n  // reservation\n  'CREATE RESERVATION',\n  // assignment\n  'CREATE ASSIGNMENT',\n  // search index\n  'CREATE SEARCH INDEX [IF NOT EXISTS]',\n  // drop\n  'DROP SCHEMA [IF EXISTS]',\n  'DROP [MATERIALIZED] VIEW [IF EXISTS]',\n  'DROP [TABLE] FUNCTION [IF EXISTS]',\n  'DROP PROCEDURE [IF EXISTS]',\n  'DROP ROW ACCESS POLICY',\n  'DROP ALL ROW ACCESS POLICIES',\n  'DROP CAPACITY [IF EXISTS]',\n  'DROP RESERVATION [IF EXISTS]',\n  'DROP ASSIGNMENT [IF EXISTS]',\n  'DROP SEARCH INDEX [IF EXISTS]',\n  'DROP [IF EXISTS]',\n  // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language\n  'GRANT',\n  'REVOKE',\n  // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting\n  'DECLARE',\n  'EXECUTE IMMEDIATE',\n  'LOOP',\n  'END LOOP',\n  'REPEAT',\n  'END REPEAT',\n  'WHILE',\n  'END WHILE',\n  'BREAK',\n  'LEAVE',\n  'CONTINUE',\n  'ITERATE',\n  'FOR',\n  'END FOR',\n  'BEGIN',\n  'BEGIN TRANSACTION',\n  'COMMIT TRANSACTION',\n  'ROLLBACK TRANSACTION',\n  'RAISE',\n  'RETURN',\n  'CALL',\n  // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements\n  'ASSERT',\n  // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements\n  'EXPORT DATA'\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION {ALL | DISTINCT}',\n  'EXCEPT DISTINCT',\n  'INTERSECT DISTINCT'\n]);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT | FULL} [OUTER] JOIN', '{INNER | CROSS} JOIN']);\n\nconst reservedPhrases = expandPhrases([\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#tablesample_operator\n  'TABLESAMPLE SYSTEM',\n  // From DDL: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  'ANY TYPE',\n  'ALL COLUMNS',\n  'NOT DETERMINISTIC',\n  // inside window definitions\n  '{ROWS | RANGE} BETWEEN'\n]);\n\n// https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference\nexport const bigquery: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: [\n      // The triple-quoted strings are listed first, so they get matched first.\n      // Otherwise the first two quotes of \"\"\" will get matched as an empty \"\" string.\n      { quote: '\"\"\"..\"\"\"', prefixes: ['R', 'B', 'RB', 'BR'] },\n      { quote: \"'''..'''\", prefixes: ['R', 'B', 'RB', 'BR'] },\n      '\"\"-bs',\n      \"''-bs\",\n      { quote: '\"\"-raw', prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n      { quote: \"''-raw\", prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true }\n    ],\n    identTypes: ['``'],\n    identChars: { dashes: true },\n    paramTypes: { positional: true, named: ['@'], quoted: ['@'] },\n    lineCommentTypes: ['--', '#'],\n    operators: ['&', '|', '^', '~', '>>', '<<', '||'],\n    postProcess\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]): Token[] {\n  return detectArraySubscripts(combineParameterizedTypes(tokens));\n}\n\n// Converts OFFSET token inside array from RESERVED_CLAUSE to RESERVED_FUNCTION_NAME\n// See: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#array_subscript_operator\nfunction detectArraySubscripts(tokens: Token[]) {\n  let prevToken = EOF_TOKEN;\n  return tokens.map(token => {\n    if (token.text === 'OFFSET' && prevToken.text === '[') {\n      prevToken = token;\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    } else {\n      prevToken = token;\n      return token;\n    }\n  });\n}\n\n// Combines multiple tokens forming a parameterized type like STRUCT<ARRAY<INT64>> into a single token\nfunction combineParameterizedTypes(tokens: Token[]) {\n  const processed: Token[] = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n\n    if ((isToken.ARRAY(token) || isToken.STRUCT(token)) && tokens[i + 1]?.text === '<') {\n      const endIndex = findClosingAngleBracketIndex(tokens, i + 1);\n      const typeDefTokens = tokens.slice(i, endIndex + 1);\n      processed.push({\n        type: TokenType.IDENTIFIER,\n        raw: typeDefTokens.map(formatTypeDefToken('raw')).join(''),\n        text: typeDefTokens.map(formatTypeDefToken('text')).join(''),\n        start: token.start\n      });\n      i = endIndex;\n    } else {\n      processed.push(token);\n    }\n  }\n  return processed;\n}\n\nconst formatTypeDefToken =\n  (key: Extract<keyof Token, 'raw' | 'text'>) =>\n  (token: Token): string => {\n    if (token.type === TokenType.IDENTIFIER || token.type === TokenType.COMMA) {\n      return token[key] + ' ';\n    } else {\n      return token[key];\n    }\n  };\n\nfunction findClosingAngleBracketIndex(tokens: Token[], startIndex: number): number {\n  let level = 0;\n  for (let i = startIndex; i < tokens.length; i++) {\n    const token = tokens[i];\n    if (token.text === '<') {\n      level++;\n    } else if (token.text === '>') {\n      level--;\n    } else if (token.text === '>>') {\n      level -= 2;\n    }\n    if (level === 0) {\n      return i;\n    }\n  }\n  return tokens.length - 1;\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-aggregate\n  aggregate: [\n    'ARRAY_AGG',\n    'AVG',\n    'CORR',\n    'CORRELATION',\n    'COUNT',\n    'COUNT_BIG',\n    'COVAR_POP',\n    'COVARIANCE',\n    'COVAR',\n    'COVAR_SAMP',\n    'COVARIANCE_SAMP',\n    'CUME_DIST',\n    'GROUPING',\n    'LISTAGG',\n    'MAX',\n    'MEDIAN',\n    'MIN',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PERCENT_RANK',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_COUNT',\n    'REGR_INTERCEPT',\n    'REGR_ICPT',\n    'REGR_R2',\n    'REGR_SLOPE',\n    'REGR_SXX',\n    'REGR_SXY',\n    'REGR_SYY',\n    'STDDEV_POP',\n    'STDDEV',\n    'STDDEV_SAMP',\n    'SUM',\n    'VAR_POP',\n    'VARIANCE',\n    'VAR',\n    'VAR_SAMP',\n    'VARIANCE_SAMP',\n    'XMLAGG'\n  ],\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-scalar\n  scalar: [\n    'ABS',\n    'ABSVAL',\n    'ACOS',\n    'ADD_DAYS',\n    'ADD_MONTHS',\n    'ARRAY_DELETE',\n    'ARRAY_FIRST',\n    'ARRAY_LAST',\n    'ARRAY_NEXT',\n    'ARRAY_PRIOR',\n    'ARRAY_TRIM',\n    'ASCII',\n    'ASCII_CHR',\n    'ASCII_STR',\n    'ASCIISTR',\n    'ASIN',\n    'ATAN',\n    'ATANH',\n    'ATAN2',\n    'BIGINT',\n    'BINARY',\n    'BITAND',\n    'BITANDNOT',\n    'BITOR',\n    'BITXOR',\n    'BITNOT',\n    'BLOB',\n    'BTRIM',\n    'CARDINALITY',\n    'CCSID_ENCODING',\n    'CEILING',\n    'CEIL',\n    'CHAR',\n    'CHAR9',\n    'CHARACTER_LENGTH',\n    'CHAR_LENGTH',\n    'CHR',\n    'CLOB',\n    'COALESCE',\n    'COLLATION_KEY',\n    'COMPARE_DECFLOAT',\n    'CONCAT',\n    'CONTAINS',\n    'COS',\n    'COSH',\n    'DATE',\n    'DAY',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFWEEK_ISO',\n    'DAYOFYEAR',\n    'DAYS',\n    'DAYS_BETWEEN',\n    'DBCLOB',\n    'DECFLOAT',\n    'DECFLOAT_FORMAT',\n    'DECFLOAT_SORTKEY',\n    'DECIMAL',\n    'DEC',\n    'DECODE',\n    'DECRYPT_BINARY',\n    'DECRYPT_BIT',\n    'DECRYPT_CHAR',\n    'DECRYPT_DB',\n    'DECRYPT_DATAKEY_BIGINT',\n    'DECRYPT_DATAKEY_BIT',\n    'DECRYPT_DATAKEY_CLOB',\n    'DECRYPT_DATAKEY_DBCLOB',\n    'DECRYPT_DATAKEY_DECIMAL',\n    'DECRYPT_DATAKEY_INTEGER',\n    'DECRYPT_DATAKEY_VARCHAR',\n    'DECRYPT_DATAKEY_VARGRAPHIC',\n    'DEGREES',\n    'DIFFERENCE',\n    'DIGITS',\n    'DOUBLE_PRECISION',\n    'DOUBLE',\n    'DSN_XMLVALIDATE',\n    'EBCDIC_CHR',\n    'EBCDIC_STR',\n    'ENCRYPT_DATAKEY',\n    'ENCRYPT_TDES',\n    'EXP',\n    'EXTRACT',\n    'FLOAT',\n    'FLOOR',\n    'GENERATE_UNIQUE',\n    'GENERATE_UNIQUE_BINARY',\n    'GETHINT',\n    'GETVARIABLE',\n    'GRAPHIC',\n    'GREATEST',\n    'HASH',\n    'HASH_CRC32',\n    'HASH_MD5',\n    'HASH_SHA1',\n    'HASH_SHA256',\n    'HEX',\n    'HOUR',\n    'IDENTITY_VAL_LOCAL',\n    'IFNULL',\n    'INSERT',\n    'INSTR',\n    'INTEGER',\n    'INT',\n    'JULIAN_DAY',\n    'LAST_DAY',\n    'LCASE',\n    'LEAST',\n    'LEFT',\n    'LENGTH',\n    'LN',\n    'LOCATE',\n    'LOCATE_IN_STRING',\n    'LOG10',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'MAX',\n    'MAX_CARDINALITY',\n    'MICROSECOND',\n    'MIDNIGHT_SECONDS',\n    'MIN',\n    'MINUTE',\n    'MOD',\n    'MONTH',\n    'MONTHS_BETWEEN',\n    'MQREAD',\n    'MQREADCLOB',\n    'MQRECEIVE',\n    'MQRECEIVECLOB',\n    'MQSEND',\n    'MULTIPLY_ALT',\n    'NEXT_DAY',\n    'NEXT_MONTH',\n    'NORMALIZE_DECFLOAT',\n    'NORMALIZE_STRING',\n    'NULLIF',\n    'NVL',\n    'OVERLAY',\n    'PACK',\n    'POSITION',\n    'POSSTR',\n    'POWER',\n    'POW',\n    'QUANTIZE',\n    'QUARTER',\n    'RADIANS',\n    'RAISE_ERROR',\n    'RANDOM',\n    'RAND',\n    'REAL',\n    'REGEXP_COUNT',\n    'REGEXP_INSTR',\n    'REGEXP_LIKE',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'REPEAT',\n    'REPLACE',\n    'RID',\n    'RIGHT',\n    'ROUND',\n    'ROUND_TIMESTAMP',\n    'ROWID',\n    'RPAD',\n    'RTRIM',\n    'SCORE',\n    'SECOND',\n    'SIGN',\n    'SIN',\n    'SINH',\n    'SMALLINT',\n    'SOUNDEX',\n    'SOAPHTTPC',\n    'SOAPHTTPV',\n    'SOAPHTTPNC',\n    'SOAPHTTPNV',\n    'SPACE',\n    'SQRT',\n    'STRIP',\n    'STRLEFT',\n    'STRPOS',\n    'STRRIGHT',\n    'SUBSTR',\n    'SUBSTRING',\n    'TAN',\n    'TANH',\n    'TIME',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TIMESTAMP_FORMAT',\n    'TIMESTAMP_ISO',\n    'TIMESTAMP_TZ',\n    'TO_CHAR',\n    'TO_CLOB',\n    'TO_DATE',\n    'TO_NUMBER',\n    'TOTALORDER',\n    'TO_TIMESTAMP',\n    'TRANSLATE',\n    'TRIM',\n    'TRIM_ARRAY',\n    'TRUNCATE',\n    'TRUNC',\n    'TRUNC_TIMESTAMP',\n    'UCASE',\n    'UNICODE',\n    'UNICODE_STR',\n    'UNISTR',\n    'UPPER',\n    'VALUE',\n    'VARBINARY',\n    'VARCHAR',\n    'VARCHAR9',\n    'VARCHAR_BIT_FORMAT',\n    'VARCHAR_FORMAT',\n    'VARGRAPHIC',\n    'VERIFY_GROUP_FOR_USER',\n    'VERIFY_ROLE_FOR_USER',\n    'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER',\n    'WEEK',\n    'WEEK_ISO',\n    'WRAP',\n    'XMLATTRIBUTES',\n    'XMLCOMMENT',\n    'XMLCONCAT',\n    'XMLDOCUMENT',\n    'XMLELEMENT',\n    'XMLFOREST',\n    'XMLMODIFY',\n    'XMLNAMESPACES',\n    'XMLPARSE',\n    'XMLPI',\n    'XMLQUERY',\n    'XMLSERIALIZE',\n    'XMLTEXT',\n    'XMLXSROBJECTID',\n    'XSLTRANSFORM',\n    'YEAR'\n  ],\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-table\n  table: [\n    'ADMIN_TASK_LIST',\n    'ADMIN_TASK_OUTPUT',\n    'ADMIN_TASK_STATUS',\n    'BLOCKING_THREADS',\n    'MQREADALL',\n    'MQREADALLCLOB',\n    'MQRECEIVEALL',\n    'MQRECEIVEALLCLOB',\n    'XMLTABLE'\n  ],\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row\n  row: ['UNPACK'],\n  // https://www.ibm.com/docs/en/db2-for-zos/12?topic=expressions-olap-specification\n  olap: [\n    'CUME_DIST',\n    'PERCENT_RANK',\n    'RANK',\n    'DENSE_RANK',\n    'NTILE',\n    'LAG',\n    'LEAD',\n    'ROW_NUMBER',\n    'FIRST_VALUE',\n    'LAST_VALUE',\n    'NTH_VALUE',\n    'RATIO_TO_REPORT'\n  ],\n  // Type casting\n  cast: ['CAST']\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=words-reserved#db2z_reservedwords__newresword\n  standard: [\n    'ALL',\n    'ALLOCATE',\n    'ALLOW',\n    'ALTERAND',\n    'ANY',\n    'AS',\n    'ARRAY',\n    'ARRAY_EXISTS',\n    'ASENSITIVE',\n    'ASSOCIATE',\n    'ASUTIME',\n    'AT',\n    'AUDIT',\n    'AUX',\n    'AUXILIARY',\n    'BEFORE',\n    'BEGIN',\n    'BETWEEN',\n    'BUFFERPOOL',\n    'BY',\n    'CAPTURE',\n    'CASCADED',\n    'CAST',\n    'CCSID',\n    'CHARACTER',\n    'CHECK',\n    'CLONE',\n    'CLUSTER',\n    'COLLECTION',\n    'COLLID',\n    'COLUMN',\n    'CONDITION',\n    'CONNECTION',\n    'CONSTRAINT',\n    'CONTENT',\n    'CONTINUE',\n    'CREATE',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_LC_CTYPE',\n    'CURRENT_PATH',\n    'CURRENT_SCHEMA',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRVAL',\n    'CURSOR',\n    'DATA',\n    'DATABASE',\n    'DBINFO',\n    'DECLARE',\n    'DEFAULT',\n    'DESCRIPTOR',\n    'DETERMINISTIC',\n    'DISABLE',\n    'DISALLOW',\n    'DISTINCT',\n    'DO',\n    'DOCUMENT',\n    'DSSIZE',\n    'DYNAMIC',\n    'EDITPROC',\n    'ELSE',\n    'ELSEIF',\n    'ENCODING',\n    'ENCRYPTION',\n    'ENDING',\n    'END-EXEC',\n    'ERASE',\n    'ESCAPE',\n    'EXCEPTION',\n    'EXISTS',\n    'EXIT',\n    'EXTERNAL',\n    'FENCED',\n    'FIELDPROC',\n    'FINAL',\n    'FIRST',\n    'FOR',\n    'FREE',\n    'FULL',\n    'FUNCTION',\n    'GENERATED',\n    'GET',\n    'GLOBAL',\n    'GOTO',\n    'GROUP',\n    'HANDLER',\n    'HOLD',\n    'HOURS',\n    'IF',\n    'IMMEDIATE',\n    'IN',\n    'INCLUSIVE',\n    'INDEX',\n    'INHERIT',\n    'INNER',\n    'INOUT',\n    'INSENSITIVE',\n    'INTO',\n    'IS',\n    'ISOBID',\n    'ITERATE',\n    'JAR',\n    'KEEP',\n    'KEY',\n    'LANGUAGE',\n    'LAST',\n    'LC_CTYPE',\n    'LEAVE',\n    'LIKE',\n    'LOCAL',\n    'LOCALE',\n    'LOCATOR',\n    'LOCATORS',\n    'LOCK',\n    'LOCKMAX',\n    'LOCKSIZE',\n    'LONG',\n    'LOOP',\n    'MAINTAINED',\n    'MATERIALIZED',\n    'MICROSECONDS',\n    'MINUTEMINUTES',\n    'MODIFIES',\n    'MONTHS',\n    'NEXT',\n    'NEXTVAL',\n    'NO',\n    'NONE',\n    'NOT',\n    'NULL',\n    'NULLS',\n    'NUMPARTS',\n    'OBID',\n    'OF',\n    'OLD',\n    'ON',\n    'OPTIMIZATION',\n    'OPTIMIZE',\n    'ORDER',\n    'ORGANIZATION',\n    'OUT',\n    'OUTER',\n    'PACKAGE',\n    'PARAMETER',\n    'PART',\n    'PADDED',\n    'PARTITION',\n    'PARTITIONED',\n    'PARTITIONING',\n    'PATH',\n    'PIECESIZE',\n    'PERIOD',\n    'PLAN',\n    'PRECISION',\n    'PREVVAL',\n    'PRIOR',\n    'PRIQTY',\n    'PRIVILEGES',\n    'PROCEDURE',\n    'PROGRAM',\n    'PSID',\n    'PUBLIC',\n    'QUERY',\n    'QUERYNO',\n    'READS',\n    'REFERENCES',\n    'RESIGNAL',\n    'RESTRICT',\n    'RESULT',\n    'RESULT_SET_LOCATOR',\n    'RETURN',\n    'RETURNS',\n    'ROLE',\n    'ROLLUP',\n    'ROUND_CEILING',\n    'ROUND_DOWN',\n    'ROUND_FLOOR',\n    'ROUND_HALF_DOWN',\n    'ROUND_HALF_EVEN',\n    'ROUND_HALF_UP',\n    'ROUND_UP',\n    'ROW',\n    'ROWSET',\n    'SCHEMA',\n    'SCRATCHPAD',\n    'SECONDS',\n    'SECQTY',\n    'SECURITY',\n    'SEQUENCE',\n    'SENSITIVE',\n    'SESSION_USER',\n    'SIMPLE',\n    'SOME',\n    'SOURCE',\n    'SPECIFIC',\n    'STANDARD',\n    'STATIC',\n    'STATEMENT',\n    'STAY',\n    'STOGROUP',\n    'STORES',\n    'STYLE',\n    'SUMMARY',\n    'SYNONYM',\n    'SYSDATE',\n    'SYSTEM',\n    'SYSTIMESTAMP',\n    'TABLE',\n    'TABLESPACE',\n    'THEN',\n    'TO',\n    'TRIGGER',\n    'TYPE',\n    'UNDO',\n    'UNIQUE',\n    'UNTIL',\n    'USER',\n    'USING',\n    'VALIDPROC',\n    'VARIABLE',\n    'VARIANT',\n    'VCAT',\n    'VERSIONING',\n    'VIEW',\n    'VOLATILE',\n    'VOLUMES',\n    'WHILE',\n    'WLM',\n    'XMLEXISTS',\n    'XMLCAST',\n    'YEARS',\n    'ZONE'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2.functions.js';\nimport { keywords } from './db2.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY [INPUT SEQUENCE]',\n  'FETCH FIRST',\n  // Data modification\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  'INSERT',\n  // Data definition\n  'CREATE [OR REPLACE] VIEW',\n  'CREATE [GLOBAL TEMPORARY] TABLE'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  'WITH {RR | RS | CS | UR}',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [HIERARCHY]',\n  // alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [COLUMN]',\n  'ALTER [COLUMN]',\n  'SET DATA TYPE', // for alter column\n  'SET NOT NULL', // for alter column\n  'DROP {IDENTITY | EXPRESSION | DEFAULT | NOT NULL}', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // other\n  'SET [CURRENT] SCHEMA',\n  'AFTER',\n  'GO',\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-list-supported\n  'ALLOCATE CURSOR',\n  'ALTER DATABASE',\n  'ALTER FUNCTION',\n  'ALTER INDEX',\n  'ALTER MASK',\n  'ALTER PERMISSION',\n  'ALTER PROCEDURE',\n  'ALTER SEQUENCE',\n  'ALTER STOGROUP',\n  'ALTER TABLESPACE',\n  'ALTER TRIGGER',\n  'ALTER TRUSTED CONTEXT',\n  'ALTER VIEW',\n  'ASSOCIATE LOCATORS',\n  'BEGIN DECLARE SECTION',\n  'CALL',\n  'CLOSE',\n  'COMMENT',\n  'COMMIT',\n  'CONNECT',\n  'CREATE ALIAS',\n  'CREATE AUXILIARY TABLE',\n  'CREATE DATABASE',\n  'CREATE FUNCTION',\n  'CREATE GLOBAL TEMPORARY TABLE',\n  'CREATE INDEX',\n  'CREATE LOB TABLESPACE',\n  'CREATE MASK',\n  'CREATE PERMISSION',\n  'CREATE PROCEDURE',\n  'CREATE ROLE',\n  'CREATE SEQUENCE',\n  'CREATE STOGROUP',\n  'CREATE SYNONYM',\n  'CREATE TABLESPACE',\n  'CREATE TRIGGER',\n  'CREATE TRUSTED CONTEXT',\n  'CREATE TYPE',\n  'CREATE VARIABLE',\n  'DECLARE CURSOR',\n  'DECLARE GLOBAL TEMPORARY TABLE',\n  'DECLARE STATEMENT',\n  'DECLARE TABLE',\n  'DECLARE VARIABLE',\n  'DESCRIBE CURSOR',\n  'DESCRIBE INPUT',\n  'DESCRIBE OUTPUT',\n  'DESCRIBE PROCEDURE',\n  'DESCRIBE TABLE',\n  'DROP',\n  'END DECLARE SECTION',\n  'EXCHANGE',\n  'EXECUTE',\n  'EXECUTE IMMEDIATE',\n  'EXPLAIN',\n  'FETCH',\n  'FREE LOCATOR',\n  'GET DIAGNOSTICS',\n  'GRANT',\n  'HOLD LOCATOR',\n  'INCLUDE',\n  'LABEL',\n  'LOCK TABLE',\n  'OPEN',\n  'PREPARE',\n  'REFRESH',\n  'RELEASE',\n  'RELEASE SAVEPOINT',\n  'RENAME',\n  'REVOKE',\n  'ROLLBACK',\n  'SAVEPOINT',\n  'SELECT INTO',\n  'SET CONNECTION',\n  'SET CURRENT ACCELERATOR',\n  'SET CURRENT APPLICATION COMPATIBILITY',\n  'SET CURRENT APPLICATION ENCODING SCHEME',\n  'SET CURRENT DEBUG MODE',\n  'SET CURRENT DECFLOAT ROUNDING MODE',\n  'SET CURRENT DEGREE',\n  'SET CURRENT EXPLAIN MODE',\n  'SET CURRENT GET_ACCEL_ARCHIVE',\n  'SET CURRENT LOCALE LC_CTYPE',\n  'SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION',\n  'SET CURRENT OPTIMIZATION HINT',\n  'SET CURRENT PACKAGE PATH',\n  'SET CURRENT PACKAGESET',\n  'SET CURRENT PRECISION',\n  'SET CURRENT QUERY ACCELERATION',\n  'SET CURRENT QUERY ACCELERATION WAITFORDATA',\n  'SET CURRENT REFRESH AGE',\n  'SET CURRENT ROUTINE VERSION',\n  'SET CURRENT RULES',\n  'SET CURRENT SQLID',\n  'SET CURRENT TEMPORAL BUSINESS_TIME',\n  'SET CURRENT TEMPORAL SYSTEM_TIME',\n  'SET ENCRYPTION PASSWORD',\n  'SET PATH',\n  'SET SESSION TIME ZONE',\n  'SIGNAL',\n  'VALUES INTO',\n  'WHENEVER'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT | FULL} [OUTER] JOIN', '{INNER | CROSS} JOIN']);\n\nconst reservedPhrases = expandPhrases(['ON DELETE', 'ON UPDATE', 'SET NULL', '{ROWS | RANGE} BETWEEN']);\n\n// https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzintro.htm\nexport const db2: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['G', 'N', 'U&'] },\n      { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true }\n    ],\n    identTypes: [`\"\"-qq`],\n    paramTypes: { positional: true, named: [':'] },\n    paramChars: { first: '@#$', rest: '@#$' },\n    operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||']\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF\n  math: [\n    'ABS',\n    'ACOS',\n    'ASIN',\n    'ATAN',\n    'BIN',\n    'BROUND',\n    'CBRT',\n    'CEIL',\n    'CEILING',\n    'CONV',\n    'COS',\n    'DEGREES',\n    // 'E',\n    'EXP',\n    'FACTORIAL',\n    'FLOOR',\n    'GREATEST',\n    'HEX',\n    'LEAST',\n    'LN',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'NEGATIVE',\n    'PI',\n    'PMOD',\n    'POSITIVE',\n    'POW',\n    'POWER',\n    'RADIANS',\n    'RAND',\n    'ROUND',\n    'SHIFTLEFT',\n    'SHIFTRIGHT',\n    'SHIFTRIGHTUNSIGNED',\n    'SIGN',\n    'SIN',\n    'SQRT',\n    'TAN',\n    'UNHEX',\n    'WIDTH_BUCKET'\n  ],\n  array: ['ARRAY_CONTAINS', 'MAP_KEYS', 'MAP_VALUES', 'SIZE', 'SORT_ARRAY', 'ARRAY'],\n  conversion: ['BINARY', 'CAST'],\n  date: [\n    'ADD_MONTHS',\n    // 'DATE',\n    'DATE_ADD',\n    'DATE_FORMAT',\n    'DATE_SUB',\n    'DATEDIFF',\n    'DAY',\n    'DAYNAME',\n    'DAYOFMONTH',\n    'DAYOFYEAR',\n    'EXTRACT',\n    'FROM_UNIXTIME',\n    'FROM_UTC_TIMESTAMP',\n    'HOUR',\n    'LAST_DAY',\n    'MINUTE',\n    'MONTH',\n    'MONTHS_BETWEEN',\n    'NEXT_DAY',\n    'QUARTER',\n    'SECOND',\n    'TIMESTAMP',\n    'TO_DATE',\n    'TO_UTC_TIMESTAMP',\n    'TRUNC',\n    'UNIX_TIMESTAMP',\n    'WEEKOFYEAR',\n    'YEAR'\n  ],\n  conditional: ['ASSERT_TRUE', 'COALESCE', 'IF', 'ISNOTNULL', 'ISNULL', 'NULLIF', 'NVL'],\n  string: [\n    'ASCII',\n    'BASE64',\n    'CHARACTER_LENGTH',\n    'CHR',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONTEXT_NGRAMS',\n    'DECODE',\n    'ELT',\n    'ENCODE',\n    'FIELD',\n    'FIND_IN_SET',\n    'FORMAT_NUMBER',\n    'GET_JSON_OBJECT',\n    'IN_FILE',\n    'INITCAP',\n    'INSTR',\n    'LCASE',\n    'LENGTH',\n    'LEVENSHTEIN',\n    'LOCATE',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'NGRAMS',\n    'OCTET_LENGTH',\n    'PARSE_URL',\n    'PRINTF',\n    'QUOTE',\n    'REGEXP_EXTRACT',\n    'REPLACE',\n    'REGEXP_REPLACE',\n    'REPEAT',\n    'REVERSE',\n    'RPAD',\n    'RTRIM',\n    'SENTENCES',\n    'SOUNDEX',\n    'SPACE',\n    'SPLIT',\n    'STR_TO_MAP',\n    'SUBSTR',\n    'SUBSTRING',\n    'TRANSLATE',\n    'TRIM',\n    'UCASE',\n    'UNBASE64',\n    'UPPER'\n  ],\n  masking: ['MASK', 'MASK_FIRST_N', 'MASK_HASH', 'MASK_LAST_N', 'MASK_SHOW_FIRST_N', 'MASK_SHOW_LAST_N'],\n  misc: [\n    'AES_DECRYPT',\n    'AES_ENCRYPT',\n    'CRC32',\n    'CURRENT_DATABASE',\n    'CURRENT_USER',\n    'HASH',\n    'JAVA_METHOD',\n    'LOGGED_IN_USER',\n    'MD5',\n    'REFLECT',\n    'SHA',\n    'SHA1',\n    'SHA2',\n    'SURROGATE_KEY',\n    'VERSION'\n  ],\n  aggregate: [\n    'AVG',\n    'COLLECT_LIST',\n    'COLLECT_SET',\n    'CORR',\n    'COUNT',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'HISTOGRAM_NUMERIC',\n    'MAX',\n    'MIN',\n    'NTILE',\n    'PERCENTILE',\n    'PERCENTILE_APPROX',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_COUNT',\n    'REGR_INTERCEPT',\n    'REGR_R2',\n    'REGR_SLOPE',\n    'REGR_SXX',\n    'REGR_SXY',\n    'REGR_SYY',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'SUM',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE'\n  ],\n  table: ['EXPLODE', 'INLINE', 'JSON_TUPLE', 'PARSE_URL_TUPLE', 'POSEXPLODE', 'STACK'],\n  // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics\n  window: [\n    'LEAD',\n    'LAG',\n    'FIRST_VALUE',\n    'LAST_VALUE',\n    'RANK',\n    'ROW_NUMBER',\n    'DENSE_RANK',\n    'CUME_DIST',\n    'PERCENT_RANK',\n    'NTILE'\n  ],\n  // Parameterized data types\n  // https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=82706456\n  // Though in reality Hive only supports parameters for DECIMAL(),\n  // it doesn't hurt to allow others in here as well.\n  dataTypes: ['DECIMAL', 'NUMERIC', 'VARCHAR', 'CHAR']\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl\n  // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names\n  nonReserved: [\n    'ADD',\n    'ADMIN',\n    'AFTER',\n    'ANALYZE',\n    'ARCHIVE',\n    'ASC',\n    'BEFORE',\n    'BUCKET',\n    'BUCKETS',\n    'CASCADE',\n    'CHANGE',\n    'CLUSTER',\n    'CLUSTERED',\n    'CLUSTERSTATUS',\n    'COLLECTION',\n    'COLUMNS',\n    'COMMENT',\n    'COMPACT',\n    'COMPACTIONS',\n    'COMPUTE',\n    'CONCATENATE',\n    'CONTINUE',\n    'DATA',\n    'DATABASES',\n    'DATETIME',\n    'DAY',\n    'DBPROPERTIES',\n    'DEFERRED',\n    'DEFINED',\n    'DELIMITED',\n    'DEPENDENCY',\n    'DESC',\n    'DIRECTORIES',\n    'DIRECTORY',\n    'DISABLE',\n    'DISTRIBUTE',\n    'ELEM_TYPE',\n    'ENABLE',\n    'ESCAPED',\n    'EXCLUSIVE',\n    'EXPLAIN',\n    'EXPORT',\n    'FIELDS',\n    'FILE',\n    'FILEFORMAT',\n    'FIRST',\n    'FORMAT',\n    'FORMATTED',\n    'FUNCTIONS',\n    'HOLD_DDLTIME',\n    'HOUR',\n    'IDXPROPERTIES',\n    'IGNORE',\n    'INDEX',\n    'INDEXES',\n    'INPATH',\n    'INPUTDRIVER',\n    'INPUTFORMAT',\n    'ITEMS',\n    'JAR',\n    'KEYS',\n    'KEY_TYPE',\n    'LIMIT',\n    'LINES',\n    'LOAD',\n    'LOCATION',\n    'LOCK',\n    'LOCKS',\n    'LOGICAL',\n    'LONG',\n    'MAPJOIN',\n    'MATERIALIZED',\n    'METADATA',\n    'MINUS',\n    'MINUTE',\n    'MONTH',\n    'MSCK',\n    'NOSCAN',\n    'NO_DROP',\n    'OFFLINE',\n    'OPTION',\n    'OUTPUTDRIVER',\n    'OUTPUTFORMAT',\n    'OVERWRITE',\n    'OWNER',\n    'PARTITIONED',\n    'PARTITIONS',\n    'PLUS',\n    'PRETTY',\n    'PRINCIPALS',\n    'PROTECTION',\n    'PURGE',\n    'READ',\n    'READONLY',\n    'REBUILD',\n    'RECORDREADER',\n    'RECORDWRITER',\n    'RELOAD',\n    'RENAME',\n    'REPAIR',\n    'REPLICATION',\n    'RESTRICT',\n    'REWRITE',\n    'ROLE',\n    'ROLES',\n    'SCHEMA',\n    'SCHEMAS',\n    'SECOND',\n    'SEMI',\n    'SERDE',\n    'SERDEPROPERTIES',\n    'SERVER',\n    'SETS',\n    'SHARED',\n    'SHOW',\n    'SHOW.',\n    'SHOW_DATABASE',\n    'SKEWED',\n    'SORT',\n    'SORTED',\n    'SSL',\n    'STATISTICS',\n    'STORED',\n    'STREAMTABLE',\n    'STRING',\n    'STRUCT',\n    'TABLES',\n    'TBLPROPERTIES',\n    'TEMPORARY',\n    'TERMINATED',\n    'TINYINT',\n    'TOUCH',\n    'TRANSACTIONS',\n    'UNARCHIVE',\n    'UNDO',\n    'UNIONTYPE',\n    'UNLOCK',\n    'UNSET',\n    'UNSIGNED',\n    'URI',\n    'USE',\n    'UTC',\n    'UTCTIMESTAMP',\n    'VALUE_TYPE',\n    'VIEW',\n    'WHILE',\n    'YEAR',\n    'AUTOCOMMIT',\n    'ISOLATION',\n    'LEVEL',\n    'OFFSET',\n    'SNAPSHOT',\n    'TRANSACTION',\n    'WORK',\n    'WRITE',\n    'ABORT',\n    'KEY',\n    'LAST',\n    'NORELY',\n    'NOVALIDATE',\n    'NULLS',\n    'RELY',\n    'VALIDATE',\n    'DETAIL',\n    'DOW',\n    'EXPRESSION',\n    'OPERATOR',\n    'QUARTER',\n    'SUMMARY',\n    'VECTORIZATION',\n    'WEEK',\n    'YEARS',\n    'MONTHS',\n    'WEEKS',\n    'DAYS',\n    'HOURS',\n    'MINUTES',\n    'SECONDS',\n    'TIMESTAMPTZ',\n    'ZONE'\n  ],\n  reserved: [\n    'ALL',\n    'ALTER',\n    'AND',\n    'ARRAY',\n    'AS',\n    'AUTHORIZATION',\n    'BETWEEN',\n    'BIGINT',\n    'BINARY',\n    'BOOLEAN',\n    'BOTH',\n    'BY',\n    'CASE',\n    'CAST',\n    'CHAR',\n    'COLUMN',\n    'CONF',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIMESTAMP',\n    'CURSOR',\n    'DATABASE',\n    'DECIMAL',\n    'DELETE',\n    'DESCRIBE',\n    'DISTINCT',\n    'DOUBLE',\n    'DROP',\n    'ELSE',\n    'END',\n    'EXCHANGE',\n    'EXISTS',\n    'EXTENDED',\n    'EXTERNAL',\n    'FALSE',\n    'FETCH',\n    'FLOAT',\n    'FOLLOWING',\n    'FOR',\n    'FROM',\n    'FULL',\n    'FUNCTION',\n    'GRANT',\n    'GROUP',\n    'GROUPING',\n    'HAVING',\n    'IF',\n    'IMPORT',\n    'IN',\n    'INNER',\n    'INSERT',\n    'INT',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'JOIN',\n    'LATERAL',\n    'LEFT',\n    'LESS',\n    'LIKE',\n    'LOCAL',\n    'MACRO',\n    'MAP',\n    'MORE',\n    'NONE',\n    'NOT',\n    'NULL',\n    'OF',\n    'ON',\n    'OR',\n    'ORDER',\n    'OUT',\n    'OUTER',\n    'OVER',\n    'PARTIALSCAN',\n    'PARTITION',\n    'PERCENT',\n    'PRECEDING',\n    'PRESERVE',\n    'PROCEDURE',\n    'RANGE',\n    'READS',\n    'REDUCE',\n    'REVOKE',\n    'RIGHT',\n    'ROLLUP',\n    'ROW',\n    'ROWS',\n    'SELECT',\n    'SET',\n    'SMALLINT',\n    'TABLE',\n    'TABLESAMPLE',\n    'THEN',\n    'TIMESTAMP',\n    'TO',\n    'TRANSFORM',\n    'TRIGGER',\n    'TRUE',\n    'TRUNCATE',\n    'UNBOUNDED',\n    'UNION',\n    'UNIQUEJOIN',\n    'UPDATE',\n    'USER',\n    'USING',\n    'UTC_TMESTAMP',\n    'VALUES',\n    'VARCHAR',\n    'WHEN',\n    'WHERE',\n    'WINDOW',\n    'WITH',\n    'COMMIT',\n    'ONLY',\n    'REGEXP',\n    'RLIKE',\n    'ROLLBACK',\n    'START',\n    'CACHE',\n    'CONSTRAINT',\n    'FOREIGN',\n    'PRIMARY',\n    'REFERENCES',\n    'DAYOFWEEK',\n    'EXTRACT',\n    'FLOOR',\n    'INTEGER',\n    'PRECISION',\n    'VIEWS',\n    'TIME',\n    'NUMERIC',\n    'SYNC'\n  ],\n  fileTypes: [\n    'TEXTFILE',\n    'SEQUENCEFILE',\n    'ORC',\n    'CSV',\n    'TSV',\n    'PARQUET',\n    'AVRO',\n    'RCFILE',\n    'JSONFILE',\n    'INPUTFORMAT',\n    'OUTPUTFORMAT'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './hive.functions.js';\nimport { keywords } from './hive.keywords.js';\n\n// SELECT 作用域\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// 保留字，带作用域\nconst reservedClauses = expandPhrases([\n  // queries\n  // 'WITH', 对齐dorado，暂时移除\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'SORT BY',\n  'CLUSTER BY',\n  'DISTRIBUTE BY',\n  'LIMIT',\n\n  // Data manipulation\n  // - insert:\n  //   Hive does not actually support plain INSERT INTO, only INSERT INTO TABLE\n  //   but it's a nuisance to not support it, as all other dialects do.\n  'INSERT INTO [TABLE]',\n  'VALUES',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  'INSERT [VALUES]',\n  // - insert overwrite directory:\n  //   https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries\n  'INSERT OVERWRITE [LOCAL] DIRECTORY',\n  // - load:\n  //   https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables\n  'LOAD DATA [LOCAL] INPATH',\n  '[OVERWRITE] INTO TABLE',\n  // Data definition\n  'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n  'CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]'\n]);\n\n// 单行，带作用域\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'RENAME TO',\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // other\n  'ALTER',\n  'CREATE',\n  'DESCRIBE',\n  'DROP',\n  'FETCH',\n  'STORED AS',\n  'STORED BY',\n  'ROW FORMAT',\n  'TBLPROPERTIES'\n]);\n\nconst preserveClauses = expandPhrases([\n  // set\n  'SET',\n  'SHOW',\n  'SHOW CREATE'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\n// 支持的Join场景，避免完整的JOIN被意外分隔的很远\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  // non-standard joins\n  'LEFT SEMI JOIN'\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE} BETWEEN']);\n\n// https://cwiki.apache.org/confluence/display/Hive/LanguageManual\nexport const hive: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses, ...preserveClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: ['\"\"-bs', \"''-bs\"],\n    identTypes: ['``'],\n    variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n    operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||']\n  },\n  formatOptions: {\n    onelineClauses,\n    preserveClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://mariadb.com/kb/en/information-schema-keywords-table/\n  all: [\n    'ACCESSIBLE',\n    'ACCOUNT',\n    'ACTION',\n    'ADD',\n    'ADMIN',\n    'AFTER',\n    'AGAINST',\n    'AGGREGATE',\n    'ALL',\n    'ALGORITHM',\n    'ALTER',\n    'ALWAYS',\n    'ANALYZE',\n    'AND',\n    'ANY',\n    'AS',\n    'ASC',\n    'ASCII',\n    'ASENSITIVE',\n    'AT',\n    'ATOMIC',\n    'AUTHORS',\n    'AUTO_INCREMENT',\n    'AUTOEXTEND_SIZE',\n    'AUTO',\n    'AVG',\n    'AVG_ROW_LENGTH',\n    'BACKUP',\n    'BEFORE',\n    'BEGIN',\n    'BETWEEN',\n    'BIGINT',\n    'BINARY',\n    'BINLOG',\n    'BIT',\n    'BLOB',\n    'BLOCK',\n    'BODY',\n    'BOOL',\n    'BOOLEAN',\n    'BOTH',\n    'BTREE',\n    'BY',\n    'BYTE',\n    'CACHE',\n    'CALL',\n    'CASCADE',\n    'CASCADED',\n    'CASE',\n    'CATALOG_NAME',\n    'CHAIN',\n    'CHANGE',\n    'CHANGED',\n    'CHAR',\n    'CHARACTER',\n    'CHARSET',\n    'CHECK',\n    'CHECKPOINT',\n    'CHECKSUM',\n    'CIPHER',\n    'CLASS_ORIGIN',\n    'CLIENT',\n    'CLOB',\n    'CLOSE',\n    'COALESCE',\n    'CODE',\n    'COLLATE',\n    'COLLATION',\n    'COLUMN',\n    'COLUMN_NAME',\n    'COLUMNS',\n    'COLUMN_ADD',\n    'COLUMN_CHECK',\n    'COLUMN_CREATE',\n    'COLUMN_DELETE',\n    'COLUMN_GET',\n    'COMMENT',\n    'COMMIT',\n    'COMMITTED',\n    'COMPACT',\n    'COMPLETION',\n    'COMPRESSED',\n    'CONCURRENT',\n    'CONDITION',\n    'CONNECTION',\n    'CONSISTENT',\n    'CONSTRAINT',\n    'CONSTRAINT_CATALOG',\n    'CONSTRAINT_NAME',\n    'CONSTRAINT_SCHEMA',\n    'CONTAINS',\n    'CONTEXT',\n    'CONTINUE',\n    'CONTRIBUTORS',\n    'CONVERT',\n    'CPU',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_POS',\n    'CURRENT_ROLE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURSOR',\n    'CURSOR_NAME',\n    'CYCLE',\n    'DATA',\n    'DATABASE',\n    'DATABASES',\n    'DATAFILE',\n    'DATE',\n    'DATETIME',\n    'DAY',\n    'DAY_HOUR',\n    'DAY_MICROSECOND',\n    'DAY_MINUTE',\n    'DAY_SECOND',\n    'DEALLOCATE',\n    'DEC',\n    'DECIMAL',\n    'DECLARE',\n    'DEFAULT',\n    'DEFINER',\n    'DELAYED',\n    'DELAY_KEY_WRITE',\n    'DELETE',\n    'DELETE_DOMAIN_ID',\n    'DESC',\n    'DESCRIBE',\n    'DES_KEY_FILE',\n    'DETERMINISTIC',\n    'DIAGNOSTICS',\n    'DIRECTORY',\n    'DISABLE',\n    'DISCARD',\n    'DISK',\n    'DISTINCT',\n    'DISTINCTROW',\n    'DIV',\n    'DO',\n    'DOUBLE',\n    'DO_DOMAIN_IDS',\n    'DROP',\n    'DUAL',\n    'DUMPFILE',\n    'DUPLICATE',\n    'DYNAMIC',\n    'EACH',\n    'ELSE',\n    'ELSEIF',\n    'ELSIF',\n    'EMPTY',\n    'ENABLE',\n    'ENCLOSED',\n    'END',\n    'ENDS',\n    'ENGINE',\n    'ENGINES',\n    'ENUM',\n    'ERROR',\n    'ERRORS',\n    'ESCAPE',\n    'ESCAPED',\n    'EVENT',\n    'EVENTS',\n    'EVERY',\n    'EXAMINED',\n    'EXCEPT',\n    'EXCHANGE',\n    'EXCLUDE',\n    'EXECUTE',\n    'EXCEPTION',\n    'EXISTS',\n    'EXIT',\n    'EXPANSION',\n    'EXPIRE',\n    'EXPORT',\n    'EXPLAIN',\n    'EXTENDED',\n    'EXTENT_SIZE',\n    'FALSE',\n    'FAST',\n    'FAULTS',\n    'FEDERATED',\n    'FETCH',\n    'FIELDS',\n    'FILE',\n    'FIRST',\n    'FIXED',\n    'FLOAT',\n    'FLOAT4',\n    'FLOAT8',\n    'FLUSH',\n    'FOLLOWING',\n    'FOLLOWS',\n    'FOR',\n    'FORCE',\n    'FOREIGN',\n    'FORMAT',\n    'FOUND',\n    'FROM',\n    'FULL',\n    'FULLTEXT',\n    'FUNCTION',\n    'GENERAL',\n    'GENERATED',\n    'GET_FORMAT',\n    'GET',\n    'GLOBAL',\n    'GOTO',\n    'GRANT',\n    'GRANTS',\n    'GROUP',\n    'HANDLER',\n    'HARD',\n    'HASH',\n    'HAVING',\n    'HELP',\n    'HIGH_PRIORITY',\n    'HISTORY',\n    'HOST',\n    'HOSTS',\n    'HOUR',\n    'HOUR_MICROSECOND',\n    'HOUR_MINUTE',\n    'HOUR_SECOND',\n    // 'ID', // conflicts with common column name\n    'IDENTIFIED',\n    'IF',\n    'IGNORE',\n    'IGNORED',\n    'IGNORE_DOMAIN_IDS',\n    'IGNORE_SERVER_IDS',\n    'IMMEDIATE',\n    'IMPORT',\n    'INTERSECT',\n    'IN',\n    'INCREMENT',\n    'INDEX',\n    'INDEXES',\n    'INFILE',\n    'INITIAL_SIZE',\n    'INNER',\n    'INOUT',\n    'INSENSITIVE',\n    'INSERT',\n    'INSERT_METHOD',\n    'INSTALL',\n    'INT',\n    'INT1',\n    'INT2',\n    'INT3',\n    'INT4',\n    'INT8',\n    'INTEGER',\n    'INTERVAL',\n    'INVISIBLE',\n    'INTO',\n    'IO',\n    'IO_THREAD',\n    'IPC',\n    'IS',\n    'ISOLATION',\n    'ISOPEN',\n    'ISSUER',\n    'ITERATE',\n    'INVOKER',\n    'JOIN',\n    'JSON',\n    'JSON_TABLE',\n    'KEY',\n    'KEYS',\n    'KEY_BLOCK_SIZE',\n    'KILL',\n    'LANGUAGE',\n    'LAST',\n    'LAST_VALUE',\n    'LASTVAL',\n    'LEADING',\n    'LEAVE',\n    'LEAVES',\n    'LEFT',\n    'LESS',\n    'LEVEL',\n    'LIKE',\n    'LIMIT',\n    'LINEAR',\n    'LINES',\n    'LIST',\n    'LOAD',\n    'LOCAL',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOCK',\n    'LOCKED',\n    'LOCKS',\n    'LOGFILE',\n    'LOGS',\n    'LONG',\n    'LONGBLOB',\n    'LONGTEXT',\n    'LOOP',\n    'LOW_PRIORITY',\n    'MASTER',\n    'MASTER_CONNECT_RETRY',\n    'MASTER_DELAY',\n    'MASTER_GTID_POS',\n    'MASTER_HOST',\n    'MASTER_LOG_FILE',\n    'MASTER_LOG_POS',\n    'MASTER_PASSWORD',\n    'MASTER_PORT',\n    'MASTER_SERVER_ID',\n    'MASTER_SSL',\n    'MASTER_SSL_CA',\n    'MASTER_SSL_CAPATH',\n    'MASTER_SSL_CERT',\n    'MASTER_SSL_CIPHER',\n    'MASTER_SSL_CRL',\n    'MASTER_SSL_CRLPATH',\n    'MASTER_SSL_KEY',\n    'MASTER_SSL_VERIFY_SERVER_CERT',\n    'MASTER_USER',\n    'MASTER_USE_GTID',\n    'MASTER_HEARTBEAT_PERIOD',\n    'MATCH',\n    'MAX_CONNECTIONS_PER_HOUR',\n    'MAX_QUERIES_PER_HOUR',\n    'MAX_ROWS',\n    'MAX_SIZE',\n    'MAX_STATEMENT_TIME',\n    'MAX_UPDATES_PER_HOUR',\n    'MAX_USER_CONNECTIONS',\n    'MAXVALUE',\n    'MEDIUM',\n    'MEDIUMBLOB',\n    'MEDIUMINT',\n    'MEDIUMTEXT',\n    'MEMORY',\n    'MERGE',\n    'MESSAGE_TEXT',\n    'MICROSECOND',\n    'MIDDLEINT',\n    'MIGRATE',\n    'MINUS',\n    'MINUTE',\n    'MINUTE_MICROSECOND',\n    'MINUTE_SECOND',\n    'MINVALUE',\n    'MIN_ROWS',\n    'MOD',\n    'MODE',\n    'MODIFIES',\n    'MODIFY',\n    'MONITOR',\n    'MONTH',\n    'MUTEX',\n    'MYSQL',\n    'MYSQL_ERRNO',\n    'NAME',\n    'NAMES',\n    'NATIONAL',\n    'NATURAL',\n    'NCHAR',\n    'NESTED',\n    'NEVER',\n    'NEW',\n    'NEXT',\n    'NEXTVAL',\n    'NO',\n    'NOMAXVALUE',\n    'NOMINVALUE',\n    'NOCACHE',\n    'NOCYCLE',\n    'NO_WAIT',\n    'NOWAIT',\n    'NODEGROUP',\n    'NONE',\n    'NOT',\n    'NOTFOUND',\n    'NO_WRITE_TO_BINLOG',\n    'NULL',\n    'NUMBER',\n    'NUMERIC',\n    'NVARCHAR',\n    'OF',\n    'OFFSET',\n    'OLD_PASSWORD',\n    'ON',\n    'ONE',\n    'ONLINE',\n    'ONLY',\n    'OPEN',\n    'OPTIMIZE',\n    'OPTIONS',\n    'OPTION',\n    'OPTIONALLY',\n    'OR',\n    'ORDER',\n    'ORDINALITY',\n    'OTHERS',\n    'OUT',\n    'OUTER',\n    'OUTFILE',\n    'OVER',\n    'OVERLAPS',\n    'OWNER',\n    'PACKAGE',\n    'PACK_KEYS',\n    'PAGE',\n    'PAGE_CHECKSUM',\n    'PARSER',\n    'PARSE_VCOL_EXPR',\n    'PATH',\n    'PERIOD',\n    'PARTIAL',\n    'PARTITION',\n    'PARTITIONING',\n    'PARTITIONS',\n    'PASSWORD',\n    'PERSISTENT',\n    'PHASE',\n    'PLUGIN',\n    'PLUGINS',\n    'PORT',\n    'PORTION',\n    'PRECEDES',\n    'PRECEDING',\n    'PRECISION',\n    'PREPARE',\n    'PRESERVE',\n    'PREV',\n    'PREVIOUS',\n    'PRIMARY',\n    'PRIVILEGES',\n    'PROCEDURE',\n    'PROCESS',\n    'PROCESSLIST',\n    'PROFILE',\n    'PROFILES',\n    'PROXY',\n    'PURGE',\n    'QUARTER',\n    'QUERY',\n    'QUICK',\n    'RAISE',\n    'RANGE',\n    'RAW',\n    'READ',\n    'READ_ONLY',\n    'READ_WRITE',\n    'READS',\n    'REAL',\n    'REBUILD',\n    'RECOVER',\n    'RECURSIVE',\n    'REDO_BUFFER_SIZE',\n    'REDOFILE',\n    'REDUNDANT',\n    'REFERENCES',\n    'REGEXP',\n    'RELAY',\n    'RELAYLOG',\n    'RELAY_LOG_FILE',\n    'RELAY_LOG_POS',\n    'RELAY_THREAD',\n    'RELEASE',\n    'RELOAD',\n    'REMOVE',\n    'RENAME',\n    'REORGANIZE',\n    'REPAIR',\n    'REPEATABLE',\n    'REPLACE',\n    'REPLAY',\n    'REPLICA',\n    'REPLICAS',\n    'REPLICA_POS',\n    'REPLICATION',\n    'REPEAT',\n    'REQUIRE',\n    'RESET',\n    'RESIGNAL',\n    'RESTART',\n    'RESTORE',\n    'RESTRICT',\n    'RESUME',\n    'RETURNED_SQLSTATE',\n    'RETURN',\n    'RETURNING',\n    'RETURNS',\n    'REUSE',\n    'REVERSE',\n    'REVOKE',\n    'RIGHT',\n    'RLIKE',\n    'ROLE',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROUTINE',\n    'ROW',\n    'ROWCOUNT',\n    'ROWNUM',\n    'ROWS',\n    'ROWTYPE',\n    'ROW_COUNT',\n    'ROW_FORMAT',\n    'RTREE',\n    'SAVEPOINT',\n    'SCHEDULE',\n    'SCHEMA',\n    'SCHEMA_NAME',\n    'SCHEMAS',\n    'SECOND',\n    'SECOND_MICROSECOND',\n    'SECURITY',\n    'SELECT',\n    'SENSITIVE',\n    'SEPARATOR',\n    'SEQUENCE',\n    'SERIAL',\n    'SERIALIZABLE',\n    'SESSION',\n    'SERVER',\n    'SET',\n    'SETVAL',\n    'SHARE',\n    'SHOW',\n    'SHUTDOWN',\n    'SIGNAL',\n    'SIGNED',\n    'SIMPLE',\n    'SKIP',\n    'SLAVE',\n    'SLAVES',\n    'SLAVE_POS',\n    'SLOW',\n    'SNAPSHOT',\n    'SMALLINT',\n    'SOCKET',\n    'SOFT',\n    'SOME',\n    'SONAME',\n    'SOUNDS',\n    'SOURCE',\n    'STAGE',\n    'STORED',\n    'SPATIAL',\n    'SPECIFIC',\n    'REF_SYSTEM_ID',\n    'SQL',\n    'SQLEXCEPTION',\n    'SQLSTATE',\n    'SQLWARNING',\n    'SQL_BIG_RESULT',\n    'SQL_BUFFER_RESULT',\n    'SQL_CACHE',\n    'SQL_CALC_FOUND_ROWS',\n    'SQL_NO_CACHE',\n    'SQL_SMALL_RESULT',\n    'SQL_THREAD',\n    'SQL_TSI_SECOND',\n    'SQL_TSI_MINUTE',\n    'SQL_TSI_HOUR',\n    'SQL_TSI_DAY',\n    'SQL_TSI_WEEK',\n    'SQL_TSI_MONTH',\n    'SQL_TSI_QUARTER',\n    'SQL_TSI_YEAR',\n    'SSL',\n    'START',\n    'STARTING',\n    'STARTS',\n    'STATEMENT',\n    'STATS_AUTO_RECALC',\n    'STATS_PERSISTENT',\n    'STATS_SAMPLE_PAGES',\n    'STATUS',\n    'STOP',\n    'STORAGE',\n    'STRAIGHT_JOIN',\n    'STRING',\n    'SUBCLASS_ORIGIN',\n    'SUBJECT',\n    'SUBPARTITION',\n    'SUBPARTITIONS',\n    'SUPER',\n    'SUSPEND',\n    'SWAPS',\n    'SWITCHES',\n    'SYSDATE',\n    'SYSTEM',\n    'SYSTEM_TIME',\n    'TABLE',\n    'TABLE_NAME',\n    'TABLES',\n    'TABLESPACE',\n    'TABLE_CHECKSUM',\n    'TEMPORARY',\n    'TEMPTABLE',\n    'TERMINATED',\n    'TEXT',\n    'THAN',\n    'THEN',\n    'TIES',\n    'TIME',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TINYBLOB',\n    'TINYINT',\n    'TINYTEXT',\n    'TO',\n    'TRAILING',\n    'TRANSACTION',\n    'TRANSACTIONAL',\n    'THREADS',\n    'TRIGGER',\n    'TRIGGERS',\n    'TRUE',\n    'TRUNCATE',\n    'TYPE',\n    'TYPES',\n    'UNBOUNDED',\n    'UNCOMMITTED',\n    'UNDEFINED',\n    'UNDO_BUFFER_SIZE',\n    'UNDOFILE',\n    'UNDO',\n    'UNICODE',\n    'UNION',\n    'UNIQUE',\n    'UNKNOWN',\n    'UNLOCK',\n    'UNINSTALL',\n    'UNSIGNED',\n    'UNTIL',\n    'UPDATE',\n    'UPGRADE',\n    'USAGE',\n    'USE',\n    'USER',\n    'USER_RESOURCES',\n    'USE_FRM',\n    'USING',\n    'UTC_DATE',\n    'UTC_TIME',\n    'UTC_TIMESTAMP',\n    'VALUE',\n    'VALUES',\n    'VARBINARY',\n    'VARCHAR',\n    'VARCHARACTER',\n    'VARCHAR2',\n    'VARIABLES',\n    'VARYING',\n    'VIA',\n    'VIEW',\n    'VIRTUAL',\n    'VISIBLE',\n    'VERSIONING',\n    'WAIT',\n    'WARNINGS',\n    'WEEK',\n    'WEIGHT_STRING',\n    'WHEN',\n    'WHERE',\n    'WHILE',\n    'WINDOW',\n    'WITH',\n    'WITHIN',\n    'WITHOUT',\n    'WORK',\n    'WRAPPER',\n    'WRITE',\n    'X509',\n    'XOR',\n    'XA',\n    'XML',\n    'YEAR',\n    'YEAR_MONTH',\n    'ZEROFILL'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://mariadb.com/kb/en/information-schema-sql_functions-table/\n  all: [\n    'ADDDATE',\n    'ADD_MONTHS',\n    'BIT_AND',\n    'BIT_OR',\n    'BIT_XOR',\n    'CAST',\n    'COUNT',\n    'CUME_DIST',\n    'CURDATE',\n    'CURTIME',\n    'DATE_ADD',\n    'DATE_SUB',\n    'DATE_FORMAT',\n    'DECODE',\n    'DENSE_RANK',\n    'EXTRACT',\n    'FIRST_VALUE',\n    'GROUP_CONCAT',\n    'JSON_ARRAYAGG',\n    'JSON_OBJECTAGG',\n    'LAG',\n    'LEAD',\n    'MAX',\n    'MEDIAN',\n    'MID',\n    'MIN',\n    'NOW',\n    'NTH_VALUE',\n    'NTILE',\n    'POSITION',\n    'PERCENT_RANK',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'RANK',\n    'ROW_NUMBER',\n    'SESSION_USER',\n    'STD',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'SUBDATE',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUM',\n    'SYSTEM_USER',\n    'TRIM',\n    'TRIM_ORACLE',\n    'VARIANCE',\n    'VAR_POP',\n    'VAR_SAMP',\n    'ABS',\n    'ACOS',\n    'ADDTIME',\n    'AES_DECRYPT',\n    'AES_ENCRYPT',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'BENCHMARK',\n    'BIN',\n    'BINLOG_GTID_POS',\n    'BIT_COUNT',\n    'BIT_LENGTH',\n    'CEIL',\n    'CEILING',\n    'CHARACTER_LENGTH',\n    'CHAR_LENGTH',\n    'CHR',\n    'COERCIBILITY',\n    'COLUMN_CHECK',\n    'COLUMN_EXISTS',\n    'COLUMN_LIST',\n    'COLUMN_JSON',\n    'COMPRESS',\n    'CONCAT',\n    'CONCAT_OPERATOR_ORACLE',\n    'CONCAT_WS',\n    'CONNECTION_ID',\n    'CONV',\n    'CONVERT_TZ',\n    'COS',\n    'COT',\n    'CRC32',\n    'DATEDIFF',\n    'DAYNAME',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFYEAR',\n    'DEGREES',\n    'DECODE_HISTOGRAM',\n    'DECODE_ORACLE',\n    'DES_DECRYPT',\n    'DES_ENCRYPT',\n    'ELT',\n    'ENCODE',\n    'ENCRYPT',\n    'EXP',\n    'EXPORT_SET',\n    'EXTRACTVALUE',\n    'FIELD',\n    'FIND_IN_SET',\n    'FLOOR',\n    'FORMAT',\n    'FOUND_ROWS',\n    'FROM_BASE64',\n    'FROM_DAYS',\n    'FROM_UNIXTIME',\n    'GET_LOCK',\n    'GREATEST',\n    'HEX',\n    'IFNULL',\n    'INSTR',\n    'ISNULL',\n    'IS_FREE_LOCK',\n    'IS_USED_LOCK',\n    'JSON_ARRAY',\n    'JSON_ARRAY_APPEND',\n    'JSON_ARRAY_INSERT',\n    'JSON_COMPACT',\n    'JSON_CONTAINS',\n    'JSON_CONTAINS_PATH',\n    'JSON_DEPTH',\n    'JSON_DETAILED',\n    'JSON_EXISTS',\n    'JSON_EXTRACT',\n    'JSON_INSERT',\n    'JSON_KEYS',\n    'JSON_LENGTH',\n    'JSON_LOOSE',\n    'JSON_MERGE',\n    'JSON_MERGE_PATCH',\n    'JSON_MERGE_PRESERVE',\n    'JSON_QUERY',\n    'JSON_QUOTE',\n    'JSON_OBJECT',\n    'JSON_REMOVE',\n    'JSON_REPLACE',\n    'JSON_SET',\n    'JSON_SEARCH',\n    'JSON_TYPE',\n    'JSON_UNQUOTE',\n    'JSON_VALID',\n    'JSON_VALUE',\n    'LAST_DAY',\n    'LAST_INSERT_ID',\n    'LCASE',\n    'LEAST',\n    'LENGTH',\n    'LENGTHB',\n    'LN',\n    'LOAD_FILE',\n    'LOCATE',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'LOWER',\n    'LPAD',\n    'LPAD_ORACLE',\n    'LTRIM',\n    'LTRIM_ORACLE',\n    'MAKEDATE',\n    'MAKETIME',\n    'MAKE_SET',\n    'MASTER_GTID_WAIT',\n    'MASTER_POS_WAIT',\n    'MD5',\n    'MONTHNAME',\n    'NAME_CONST',\n    'NVL',\n    'NVL2',\n    'OCT',\n    'OCTET_LENGTH',\n    'ORD',\n    'PERIOD_ADD',\n    'PERIOD_DIFF',\n    'PI',\n    'POW',\n    'POWER',\n    'QUOTE',\n    'REGEXP_INSTR',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'RADIANS',\n    'RAND',\n    'RELEASE_ALL_LOCKS',\n    'RELEASE_LOCK',\n    'REPLACE_ORACLE',\n    'REVERSE',\n    'ROUND',\n    'RPAD',\n    'RPAD_ORACLE',\n    'RTRIM',\n    'RTRIM_ORACLE',\n    'SEC_TO_TIME',\n    'SHA',\n    'SHA1',\n    'SHA2',\n    'SIGN',\n    'SIN',\n    'SLEEP',\n    'SOUNDEX',\n    'SPACE',\n    'SQRT',\n    'STRCMP',\n    'STR_TO_DATE',\n    'SUBSTR_ORACLE',\n    'SUBSTRING_INDEX',\n    'SUBTIME',\n    'SYS_GUID',\n    'TAN',\n    'TIMEDIFF',\n    'TIME_FORMAT',\n    'TIME_TO_SEC',\n    'TO_BASE64',\n    'TO_CHAR',\n    'TO_DAYS',\n    'TO_SECONDS',\n    'UCASE',\n    'UNCOMPRESS',\n    'UNCOMPRESSED_LENGTH',\n    'UNHEX',\n    'UNIX_TIMESTAMP',\n    'UPDATEXML',\n    'UPPER',\n    'UUID',\n    'UUID_SHORT',\n    'VERSION',\n    'WEEKDAY',\n    'WEEKOFYEAR',\n    'WSREP_LAST_WRITTEN_GTID',\n    'WSREP_LAST_SEEN_GTID',\n    'WSREP_SYNC_WAIT_UPTO_GTID',\n    'YEARWEEK',\n    // CASE expression shorthands\n    'COALESCE',\n    'NULLIF',\n    // Data types with parameters\n    // https://mariadb.com/kb/en/data-types/\n    'TINYINT',\n    'SMALLINT',\n    'MEDIUMINT',\n    'INT',\n    'INTEGER',\n    'BIGINT',\n    'DECIMAL',\n    'DEC',\n    'NUMERIC',\n    'FIXED',\n    // 'NUMBER', // ?? In oracle mode only\n    'FLOAT',\n    'DOUBLE',\n    'DOUBLE PRECISION',\n    'REAL',\n    'BIT',\n    'BINARY',\n    'BLOB',\n    'CHAR',\n    'NATIONAL CHAR',\n    'CHAR BYTE',\n    'ENUM',\n    'VARBINARY',\n    'VARCHAR',\n    'NATIONAL VARCHAR',\n    // 'SET' // handled as special-case in postProcess\n    'TIME',\n    'DATETIME',\n    'TIMESTAMP',\n    'YEAR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './mariadb.keywords.js';\nimport { functions } from './mariadb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n  'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]',\n  // other\n  'RETURNING'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE [LOW_PRIORITY] [IGNORE]',\n  // - delete:\n  'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS]',\n  'ADD [COLUMN] [IF NOT EXISTS]',\n  '{CHANGE | MODIFY} [COLUMN] [IF EXISTS]',\n  'DROP [COLUMN] [IF EXISTS]',\n  'RENAME [TO]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  'SET {VISIBLE | INVISIBLE}', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://mariadb.com/docs/reference/mdb/sql-statements/\n  'ALTER DATABASE',\n  'ALTER DATABASE COMMENT',\n  'ALTER EVENT',\n  'ALTER FUNCTION',\n  'ALTER PROCEDURE',\n  'ALTER SCHEMA',\n  'ALTER SCHEMA COMMENT',\n  'ALTER SEQUENCE',\n  'ALTER SERVER',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE',\n  'ANALYZE TABLE',\n  'BACKUP LOCK',\n  'BACKUP STAGE',\n  'BACKUP UNLOCK',\n  'BEGIN',\n  'BINLOG',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE MASTER TO',\n  'CHECK TABLE',\n  'CHECK VIEW',\n  'CHECKSUM TABLE',\n  'COMMIT',\n  'CREATE AGGREGATE FUNCTION',\n  'CREATE DATABASE',\n  'CREATE EVENT',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE PROCEDURE',\n  'CREATE ROLE',\n  'CREATE SEQUENCE',\n  'CREATE SERVER',\n  'CREATE SPATIAL INDEX',\n  'CREATE TRIGGER',\n  'CREATE UNIQUE INDEX',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DO',\n  'DROP DATABASE',\n  'DROP EVENT',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP PREPARE',\n  'DROP PROCEDURE',\n  'DROP ROLE',\n  'DROP SEQUENCE',\n  'DROP SERVER',\n  'DROP TRIGGER',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'GET DIAGNOSTICS',\n  'GET DIAGNOSTICS CONDITION',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'INSTALL PLUGIN',\n  'INSTALL SONAME',\n  'KILL',\n  'LOAD DATA INFILE',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML INFILE',\n  'LOCK TABLE',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'PURGE MASTER LOGS',\n  'RELEASE SAVEPOINT',\n  'RENAME TABLE',\n  'RENAME USER',\n  'REPAIR TABLE',\n  'REPAIR VIEW',\n  'RESET MASTER',\n  'RESET QUERY CACHE',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESIGNAL',\n  'REVOKE',\n  'ROLLBACK',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET GLOBAL TRANSACTION',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET ROLE',\n  'SET STATEMENT',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW ALL REPLICAS STATUS',\n  'SHOW ALL SLAVES STATUS',\n  'SHOW AUTHORS',\n  'SHOW BINARY LOGS',\n  'SHOW BINLOG EVENTS',\n  'SHOW BINLOG STATUS',\n  'SHOW CHARACTER SET',\n  'SHOW CLIENT_STATISTICS',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CONTRIBUTORS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE EVENT',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PACKAGE',\n  'SHOW CREATE PACKAGE BODY',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE SEQUENCE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE TRIGGER',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINE INNODB STATUS',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW EVENTS',\n  'SHOW EXPLAIN',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW INDEXES',\n  'SHOW INDEX_STATISTICS',\n  'SHOW KEYS',\n  'SHOW LOCALES',\n  'SHOW MASTER LOGS',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PACKAGE BODY CODE',\n  'SHOW PACKAGE BODY STATUS',\n  'SHOW PACKAGE STATUS',\n  'SHOW PLUGINS',\n  'SHOW PLUGINS SONAME',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW QUERY_RESPONSE_TIME',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA',\n  'SHOW REPLICA HOSTS',\n  'SHOW REPLICA STATUS',\n  'SHOW SCHEMAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW SLAVE STATUS',\n  'SHOW STATUS',\n  'SHOW STORAGE ENGINES',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW TRIGGERS',\n  'SHOW USER_STATISTICS',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHOW WSREP_MEMBERSHIP',\n  'SHOW WSREP_STATUS',\n  'SHUTDOWN',\n  'SIGNAL',\n  'START ALL REPLICAS',\n  'START ALL SLAVES',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP ALL REPLICAS',\n  'STOP ALL SLAVES',\n  'STOP REPLICA',\n  'STOP SLAVE',\n  'UNINSTALL PLUGIN',\n  'UNINSTALL SONAME',\n  'UNLOCK TABLE',\n  'USE',\n  'XA BEGIN',\n  'XA COMMIT',\n  'XA END',\n  'XA PREPARE',\n  'XA RECOVER',\n  'XA ROLLBACK',\n  'XA START'\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n  'MINUS [ALL | DISTINCT]'\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN'\n]);\n\n// For reference: https://mariadb.com/kb/en/sql-statements-structure/\nexport const mariadb: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n    stringTypes: ['\"\"-qq-bs', \"''-qq-bs\", { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true }],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_.$]+' },\n      { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n      { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n      { quote: '``', prefixes: ['@'], requirePrefix: true }\n    ],\n    paramTypes: { positional: true },\n    lineCommentTypes: ['--', '#'],\n    operators: ['%', ':=', '&', '|', '^', '~', '<<', '>>', '<=>', '&&', '||', '!'],\n    postProcess\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n    if (isToken.SET(token) && nextToken.text === '(') {\n      // This is SET datatype, not SET statement\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n    return token;\n  });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://dev.mysql.com/doc/refman/8.0/en/keywords.html\n  all: [\n    'ACCESSIBLE', // (R)\n    'ACCOUNT',\n    'ACTION',\n    'ACTIVE',\n    'ADD', // (R)\n    'ADMIN',\n    'AFTER',\n    'AGAINST',\n    'AGGREGATE',\n    'ALGORITHM',\n    'ALL', // (R)\n    'ALTER', // (R)\n    'ALWAYS',\n    'ANALYZE', // (R)\n    'AND', // (R)\n    'ANY',\n    'ARRAY',\n    'AS', // (R)\n    'ASC', // (R)\n    'ASCII',\n    'ASENSITIVE', // (R)\n    'AT',\n    'ATTRIBUTE',\n    'AUTHENTICATION',\n    'AUTOEXTEND_SIZE',\n    'AUTO_INCREMENT',\n    'AVG',\n    'AVG_ROW_LENGTH',\n    'BACKUP',\n    'BEFORE', // (R)\n    'BEGIN',\n    'BETWEEN', // (R)\n    'BIGINT', // (R)\n    'BINARY', // (R)\n    'BINLOG',\n    'BIT',\n    'BLOB', // (R)\n    'BLOCK',\n    'BOOL',\n    'BOOLEAN',\n    'BOTH', // (R)\n    'BTREE',\n    'BUCKETS',\n    'BY', // (R)\n    'BYTE',\n    'CACHE',\n    'CALL', // (R)\n    'CASCADE', // (R)\n    'CASCADED',\n    'CASE', // (R)\n    'CATALOG_NAME',\n    'CHAIN',\n    'CHALLENGE_RESPONSE',\n    'CHANGE', // (R)\n    'CHANGED',\n    'CHANNEL',\n    'CHAR', // (R)\n    'CHARACTER', // (R)\n    'CHARSET',\n    'CHECK', // (R)\n    'CHECKSUM',\n    'CIPHER',\n    'CLASS_ORIGIN',\n    'CLIENT',\n    'CLONE',\n    'CLOSE',\n    'COALESCE',\n    'CODE',\n    'COLLATE', // (R)\n    'COLLATION',\n    'COLUMN', // (R)\n    'COLUMNS',\n    'COLUMN_FORMAT',\n    'COLUMN_NAME',\n    'COMMENT',\n    'COMMIT',\n    'COMMITTED',\n    'COMPACT',\n    'COMPLETION',\n    'COMPONENT',\n    'COMPRESSED',\n    'COMPRESSION',\n    'CONCURRENT',\n    'CONDITION', // (R)\n    'CONNECTION',\n    'CONSISTENT',\n    'CONSTRAINT', // (R)\n    'CONSTRAINT_CATALOG',\n    'CONSTRAINT_NAME',\n    'CONSTRAINT_SCHEMA',\n    'CONTAINS',\n    'CONTEXT',\n    'CONTINUE', // (R)\n    'CONVERT', // (R)\n    'CPU',\n    'CREATE', // (R)\n    'CROSS', // (R)\n    'CUBE', // (R)\n    'CUME_DIST', // (R)\n    'CURRENT',\n    'CURRENT_DATE', // (R)\n    'CURRENT_TIME', // (R)\n    'CURRENT_TIMESTAMP', // (R)\n    'CURRENT_USER', // (R)\n    'CURSOR', // (R)\n    'CURSOR_NAME',\n    'DATA',\n    'DATABASE', // (R)\n    'DATABASES', // (R)\n    'DATAFILE',\n    'DATE',\n    'DATETIME',\n    'DAY',\n    'DAY_HOUR', // (R)\n    'DAY_MICROSECOND', // (R)\n    'DAY_MINUTE', // (R)\n    'DAY_SECOND', // (R)\n    'DEALLOCATE',\n    'DEC', // (R)\n    'DECIMAL', // (R)\n    'DECLARE', // (R)\n    'DEFAULT', // (R)\n    'DEFAULT_AUTH',\n    'DEFINER',\n    'DEFINITION',\n    'DELAYED', // (R)\n    'DELAY_KEY_WRITE',\n    'DELETE', // (R)\n    'DENSE_RANK', // (R)\n    'DESC', // (R)\n    'DESCRIBE', // (R)\n    'DESCRIPTION',\n    'DETERMINISTIC', // (R)\n    'DIAGNOSTICS',\n    'DIRECTORY',\n    'DISABLE',\n    'DISCARD',\n    'DISK',\n    'DISTINCT', // (R)\n    'DISTINCTROW', // (R)\n    'DIV', // (R)\n    'DO',\n    'DOUBLE', // (R)\n    'DROP', // (R)\n    'DUAL', // (R)\n    'DUMPFILE',\n    'DUPLICATE',\n    'DYNAMIC',\n    'EACH', // (R)\n    'ELSE', // (R)\n    'ELSEIF', // (R)\n    'EMPTY', // (R)\n    'ENABLE',\n    'ENCLOSED', // (R)\n    'ENCRYPTION',\n    'END',\n    'ENDS',\n    'ENFORCED',\n    'ENGINE',\n    'ENGINES',\n    'ENGINE_ATTRIBUTE',\n    'ENUM',\n    'ERROR',\n    'ERRORS',\n    'ESCAPE',\n    'ESCAPED', // (R)\n    'EVENT',\n    'EVENTS',\n    'EVERY',\n    'EXCEPT', // (R)\n    'EXCHANGE',\n    'EXCLUDE',\n    'EXECUTE',\n    'EXISTS', // (R)\n    'EXIT', // (R)\n    'EXPANSION',\n    'EXPIRE',\n    'EXPLAIN', // (R)\n    'EXPORT',\n    'EXTENDED',\n    'EXTENT_SIZE',\n    'FACTOR',\n    'FAILED_LOGIN_ATTEMPTS',\n    'FALSE', // (R)\n    'FAST',\n    'FAULTS',\n    'FETCH', // (R)\n    'FIELDS',\n    'FILE',\n    'FILE_BLOCK_SIZE',\n    'FILTER',\n    'FINISH',\n    'FIRST',\n    'FIRST_VALUE', // (R)\n    'FIXED',\n    'FLOAT', // (R)\n    'FLOAT4', // (R)\n    'FLOAT8', // (R)\n    'FLUSH',\n    'FOLLOWING',\n    'FOLLOWS',\n    'FOR', // (R)\n    'FORCE', // (R)\n    'FOREIGN', // (R)\n    'FORMAT',\n    'FOUND',\n    'FROM', // (R)\n    'FULL',\n    'FULLTEXT', // (R)\n    'FUNCTION', // (R)\n    'GENERAL',\n    'GENERATED', // (R)\n    'GEOMCOLLECTION',\n    'GEOMETRY',\n    'GEOMETRYCOLLECTION',\n    'GET', // (R)\n    'GET_FORMAT',\n    'GET_MASTER_PUBLIC_KEY',\n    'GET_SOURCE_PUBLIC_KEY',\n    'GLOBAL',\n    'GRANT', // (R)\n    'GRANTS',\n    'GROUP', // (R)\n    'GROUPING', // (R)\n    'GROUPS', // (R)\n    'GROUP_REPLICATION',\n    'GTID_ONLY',\n    'HANDLER',\n    'HASH',\n    'HAVING', // (R)\n    'HELP',\n    'HIGH_PRIORITY', // (R)\n    'HISTOGRAM',\n    'HISTORY',\n    'HOST',\n    'HOSTS',\n    'HOUR',\n    'HOUR_MICROSECOND', // (R)\n    'HOUR_MINUTE', // (R)\n    'HOUR_SECOND', // (R)\n    'IDENTIFIED',\n    'IF', // (R)\n    'IGNORE', // (R)\n    'IGNORE_SERVER_IDS',\n    'IMPORT',\n    'IN', // (R)\n    'INACTIVE',\n    'INDEX', // (R)\n    'INDEXES',\n    'INFILE', // (R)\n    'INITIAL',\n    'INITIAL_SIZE',\n    'INITIATE',\n    'INNER', // (R)\n    'INOUT', // (R)\n    'INSENSITIVE', // (R)\n    'INSERT', // (R)\n    'INSERT_METHOD',\n    'INSTALL',\n    'INSTANCE',\n    'IN', // <-- moved over from functions\n    'INT', // (R)\n    'INT1', // (R)\n    'INT2', // (R)\n    'INT3', // (R)\n    'INT4', // (R)\n    'INT8', // (R)\n    'INTEGER', // (R)\n    'INTERSECT', // (R)\n    'INTERVAL', // (R)\n    'INTO', // (R)\n    'INVISIBLE',\n    'INVOKER',\n    'IO',\n    'IO_AFTER_GTIDS', // (R)\n    'IO_BEFORE_GTIDS', // (R)\n    'IO_THREAD',\n    'IPC',\n    'IS', // (R)\n    'ISOLATION',\n    'ISSUER',\n    'ITERATE', // (R)\n    'JOIN', // (R)\n    'JSON',\n    'JSON_TABLE', // (R)\n    'JSON_VALUE',\n    'KEY', // (R)\n    'KEYRING',\n    'KEYS', // (R)\n    'KEY_BLOCK_SIZE',\n    'KILL', // (R)\n    'LAG', // (R)\n    'LANGUAGE',\n    'LAST',\n    'LAST_VALUE', // (R)\n    'LATERAL', // (R)\n    'LEAD', // (R)\n    'LEADING', // (R)\n    'LEAVE', // (R)\n    'LEAVES',\n    'LEFT', // (R)\n    'LESS',\n    'LEVEL',\n    'LIKE', // (R)\n    'LIMIT', // (R)\n    'LINEAR', // (R)\n    'LINES', // (R)\n    'LINESTRING',\n    'LIST',\n    'LOAD', // (R)\n    'LOCAL',\n    'LOCALTIME', // (R)\n    'LOCALTIMESTAMP', // (R)\n    'LOCK', // (R)\n    'LOCKED',\n    'LOCKS',\n    'LOGFILE',\n    'LOGS',\n    'LONG', // (R)\n    'LONGBLOB', // (R)\n    'LONGTEXT', // (R)\n    'LOOP', // (R)\n    'LOW_PRIORITY', // (R)\n    'MASTER',\n    'MASTER_AUTO_POSITION',\n    'MASTER_BIND', // (R)\n    'MASTER_COMPRESSION_ALGORITHMS',\n    'MASTER_CONNECT_RETRY',\n    'MASTER_DELAY',\n    'MASTER_HEARTBEAT_PERIOD',\n    'MASTER_HOST',\n    'MASTER_LOG_FILE',\n    'MASTER_LOG_POS',\n    'MASTER_PASSWORD',\n    'MASTER_PORT',\n    'MASTER_PUBLIC_KEY_PATH',\n    'MASTER_RETRY_COUNT',\n    'MASTER_SSL',\n    'MASTER_SSL_CA',\n    'MASTER_SSL_CAPATH',\n    'MASTER_SSL_CERT',\n    'MASTER_SSL_CIPHER',\n    'MASTER_SSL_CRL',\n    'MASTER_SSL_CRLPATH',\n    'MASTER_SSL_KEY',\n    'MASTER_SSL_VERIFY_SERVER_CERT', // (R)\n    'MASTER_TLS_CIPHERSUITES',\n    'MASTER_TLS_VERSION',\n    'MASTER_USER',\n    'MASTER_ZSTD_COMPRESSION_LEVEL',\n    'MATCH', // (R)\n    'MAXVALUE', // (R)\n    'MAX_CONNECTIONS_PER_HOUR',\n    'MAX_QUERIES_PER_HOUR',\n    'MAX_ROWS',\n    'MAX_SIZE',\n    'MAX_UPDATES_PER_HOUR',\n    'MAX_USER_CONNECTIONS',\n    'MEDIUM',\n    'MEDIUMBLOB', // (R)\n    'MEDIUMINT', // (R)\n    'MEDIUMTEXT', // (R)\n    'MEMBER',\n    'MEMORY',\n    'MERGE',\n    'MESSAGE_TEXT',\n    'MICROSECOND',\n    'MIDDLEINT', // (R)\n    'MIGRATE',\n    'MINUTE',\n    'MINUTE_MICROSECOND', // (R)\n    'MINUTE_SECOND', // (R)\n    'MIN_ROWS',\n    'MOD', // (R)\n    'MODE',\n    'MODIFIES', // (R)\n    'MODIFY',\n    'MONTH',\n    'MULTILINESTRING',\n    'MULTIPOINT',\n    'MULTIPOLYGON',\n    'MUTEX',\n    'MYSQL_ERRNO',\n    'NAME',\n    'NAMES',\n    'NATIONAL',\n    'NATURAL', // (R)\n    'NCHAR',\n    'NDB',\n    'NDBCLUSTER',\n    'NESTED',\n    'NETWORK_NAMESPACE',\n    'NEVER',\n    'NEW',\n    'NEXT',\n    'NO',\n    'NODEGROUP',\n    'NONE',\n    'NOT', // (R)\n    'NOWAIT',\n    'NO_WAIT',\n    'NO_WRITE_TO_BINLOG', // (R)\n    'NTH_VALUE', // (R)\n    'NTILE', // (R)\n    'NULL', // (R)\n    'NULLS',\n    'NUMBER',\n    'NUMERIC', // (R)\n    'NVARCHAR',\n    'OF', // (R)\n    'OFF',\n    'OFFSET',\n    'OJ',\n    'OLD',\n    'ON', // (R)\n    'ONE',\n    'ONLY',\n    'OPEN',\n    'OPTIMIZE', // (R)\n    'OPTIMIZER_COSTS', // (R)\n    'OPTION', // (R)\n    'OPTIONAL',\n    'OPTIONALLY', // (R)\n    'OPTIONS',\n    'OR', // (R)\n    'ORDER', // (R)\n    'ORDINALITY',\n    'ORGANIZATION',\n    'OTHERS',\n    'OUT', // (R)\n    'OUTER', // (R)\n    'OUTFILE', // (R)\n    'OVER', // (R)\n    'OWNER',\n    'PACK_KEYS',\n    'PAGE',\n    'PARSER',\n    'PARTIAL',\n    'PARTITION', // (R)\n    'PARTITIONING',\n    'PARTITIONS',\n    'PASSWORD',\n    'PASSWORD_LOCK_TIME',\n    'PATH',\n    'PERCENT_RANK', // (R)\n    'PERSIST',\n    'PERSIST_ONLY',\n    'PHASE',\n    'PLUGIN',\n    'PLUGINS',\n    'PLUGIN_DIR',\n    'POINT',\n    'POLYGON',\n    'PORT',\n    'PRECEDES',\n    'PRECEDING',\n    'PRECISION', // (R)\n    'PREPARE',\n    'PRESERVE',\n    'PREV',\n    'PRIMARY', // (R)\n    'PRIVILEGES',\n    'PRIVILEGE_CHECKS_USER',\n    'PROCEDURE', // (R)\n    'PROCESS',\n    'PROCESSLIST',\n    'PROFILE',\n    'PROFILES',\n    'PROXY',\n    'PURGE', // (R)\n    'QUARTER',\n    'QUERY',\n    'QUICK',\n    'RANDOM',\n    'RANGE', // (R)\n    'RANK', // (R)\n    'READ', // (R)\n    'READS', // (R)\n    'READ_ONLY',\n    'READ_WRITE', // (R)\n    'REAL', // (R)\n    'REBUILD',\n    'RECOVER',\n    'RECURSIVE', // (R)\n    'REDO_BUFFER_SIZE',\n    'REDUNDANT',\n    'REFERENCE',\n    'REFERENCES', // (R)\n    'REGEXP', // (R)\n    'REGISTRATION',\n    'RELAY',\n    'RELAYLOG',\n    'RELAY_LOG_FILE',\n    'RELAY_LOG_POS',\n    'RELAY_THREAD',\n    'RELEASE', // (R)\n    'RELOAD',\n    'REMOVE',\n    'RENAME', // (R)\n    'REORGANIZE',\n    'REPAIR',\n    'REPEAT', // (R)\n    'REPEATABLE',\n    'REPLACE', // (R)\n    'REPLICA',\n    'REPLICAS',\n    'REPLICATE_DO_DB',\n    'REPLICATE_DO_TABLE',\n    'REPLICATE_IGNORE_DB',\n    'REPLICATE_IGNORE_TABLE',\n    'REPLICATE_REWRITE_DB',\n    'REPLICATE_WILD_DO_TABLE',\n    'REPLICATE_WILD_IGNORE_TABLE',\n    'REPLICATION',\n    'REQUIRE', // (R)\n    'REQUIRE_ROW_FORMAT',\n    'RESET',\n    'RESIGNAL', // (R)\n    'RESOURCE',\n    'RESPECT',\n    'RESTART',\n    'RESTORE',\n    'RESTRICT', // (R)\n    'RESUME',\n    'RETAIN',\n    'RETURN', // (R)\n    'RETURNED_SQLSTATE',\n    'RETURNING',\n    'RETURNS',\n    'REUSE',\n    'REVERSE',\n    'REVOKE', // (R)\n    'RIGHT', // (R)\n    'RLIKE', // (R)\n    'ROLE',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROTATE',\n    'ROUTINE',\n    'ROW', // (R)\n    'ROWS', // (R)\n    'ROW_COUNT',\n    'ROW_FORMAT',\n    'ROW_NUMBER', // (R)\n    'RTREE',\n    'SAVEPOINT',\n    'SCHEDULE',\n    'SCHEMA', // (R)\n    'SCHEMAS', // (R)\n    'SCHEMA_NAME',\n    'SECOND',\n    'SECONDARY',\n    'SECONDARY_ENGINE',\n    'SECONDARY_ENGINE_ATTRIBUTE',\n    'SECONDARY_LOAD',\n    'SECONDARY_UNLOAD',\n    'SECOND_MICROSECOND', // (R)\n    'SECURITY',\n    'SELECT', // (R)\n    'SENSITIVE', // (R)\n    'SEPARATOR', // (R)\n    'SERIAL',\n    'SERIALIZABLE',\n    'SERVER',\n    'SESSION',\n    'SET', // (R)\n    'SHARE',\n    'SHOW', // (R)\n    'SHUTDOWN',\n    'SIGNAL', // (R)\n    'SIGNED',\n    'SIMPLE',\n    'SKIP',\n    'SLAVE',\n    'SLOW',\n    'SMALLINT', // (R)\n    'SNAPSHOT',\n    'SOCKET',\n    'SOME',\n    'SONAME',\n    'SOUNDS',\n    'SOURCE',\n    'SOURCE_AUTO_POSITION',\n    'SOURCE_BIND',\n    'SOURCE_COMPRESSION_ALGORITHMS',\n    'SOURCE_CONNECT_RETRY',\n    'SOURCE_DELAY',\n    'SOURCE_HEARTBEAT_PERIOD',\n    'SOURCE_HOST',\n    'SOURCE_LOG_FILE',\n    'SOURCE_LOG_POS',\n    'SOURCE_PASSWORD',\n    'SOURCE_PORT',\n    'SOURCE_PUBLIC_KEY_PATH',\n    'SOURCE_RETRY_COUNT',\n    'SOURCE_SSL',\n    'SOURCE_SSL_CA',\n    'SOURCE_SSL_CAPATH',\n    'SOURCE_SSL_CERT',\n    'SOURCE_SSL_CIPHER',\n    'SOURCE_SSL_CRL',\n    'SOURCE_SSL_CRLPATH',\n    'SOURCE_SSL_KEY',\n    'SOURCE_SSL_VERIFY_SERVER_CERT',\n    'SOURCE_TLS_CIPHERSUITES',\n    'SOURCE_TLS_VERSION',\n    'SOURCE_USER',\n    'SOURCE_ZSTD_COMPRESSION_LEVEL',\n    'SPATIAL', // (R)\n    'SPECIFIC', // (R)\n    'SQL', // (R)\n    'SQLEXCEPTION', // (R)\n    'SQLSTATE', // (R)\n    'SQLWARNING', // (R)\n    'SQL_AFTER_GTIDS',\n    'SQL_AFTER_MTS_GAPS',\n    'SQL_BEFORE_GTIDS',\n    'SQL_BIG_RESULT', // (R)\n    'SQL_BUFFER_RESULT',\n    'SQL_CALC_FOUND_ROWS', // (R)\n    'SQL_NO_CACHE',\n    'SQL_SMALL_RESULT', // (R)\n    'SQL_THREAD',\n    'SQL_TSI_DAY',\n    'SQL_TSI_HOUR',\n    'SQL_TSI_MINUTE',\n    'SQL_TSI_MONTH',\n    'SQL_TSI_QUARTER',\n    'SQL_TSI_SECOND',\n    'SQL_TSI_WEEK',\n    'SQL_TSI_YEAR',\n    'SRID',\n    'SSL', // (R)\n    'STACKED',\n    'START',\n    'STARTING', // (R)\n    'STARTS',\n    'STATS_AUTO_RECALC',\n    'STATS_PERSISTENT',\n    'STATS_SAMPLE_PAGES',\n    'STATUS',\n    'STOP',\n    'STORAGE',\n    'STORED', // (R)\n    'STRAIGHT_JOIN', // (R)\n    'STREAM',\n    'STRING',\n    'SUBCLASS_ORIGIN',\n    'SUBJECT',\n    'SUBPARTITION',\n    'SUBPARTITIONS',\n    'SUPER',\n    'SUSPEND',\n    'SWAPS',\n    'SWITCHES',\n    'SYSTEM', // (R)\n    'TABLE', // (R)\n    'TABLES',\n    'TABLESPACE',\n    'TABLE_CHECKSUM',\n    'TABLE_NAME',\n    'TEMPORARY',\n    'TEMPTABLE',\n    'TERMINATED', // (R)\n    'TEXT',\n    'THAN',\n    'THEN', // (R)\n    'THREAD_PRIORITY',\n    'TIES',\n    'TIME',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TINYBLOB', // (R)\n    'TINYINT', // (R)\n    'TINYTEXT', // (R)\n    'TLS',\n    'TO', // (R)\n    'TRAILING', // (R)\n    'TRANSACTION',\n    'TRIGGER', // (R)\n    'TRIGGERS',\n    'TRUE', // (R)\n    'TRUNCATE',\n    'TYPE',\n    'TYPES',\n    'UNBOUNDED',\n    'UNCOMMITTED',\n    'UNDEFINED',\n    'UNDO', // (R)\n    'UNDOFILE',\n    'UNDO_BUFFER_SIZE',\n    'UNICODE',\n    'UNINSTALL',\n    'UNION', // (R)\n    'UNIQUE', // (R)\n    'UNKNOWN',\n    'UNLOCK', // (R)\n    'UNREGISTER',\n    'UNSIGNED', // (R)\n    'UNTIL',\n    'UPDATE', // (R)\n    'UPGRADE',\n    'USAGE', // (R)\n    'USE', // (R)\n    'USER',\n    'USER_RESOURCES',\n    'USE_FRM',\n    'USING', // (R)\n    'UTC_DATE', // (R)\n    'UTC_TIME', // (R)\n    'UTC_TIMESTAMP', // (R)\n    'VALIDATION',\n    'VALUE',\n    'VALUES', // (R)\n    'VARBINARY', // (R)\n    'VARCHAR', // (R)\n    'VARCHARACTER', // (R)\n    'VARIABLES',\n    'VARYING', // (R)\n    'VCPU',\n    'VIEW',\n    'VIRTUAL', // (R)\n    'VISIBLE',\n    'WAIT',\n    'WARNINGS',\n    'WEEK',\n    'WEIGHT_STRING',\n    'WHEN', // (R)\n    'WHERE', // (R)\n    'WHILE', // (R)\n    'WINDOW', // (R)\n    'WITH', // (R)\n    'WITHOUT',\n    'WORK',\n    'WRAPPER',\n    'WRITE', // (R)\n    'X509',\n    'XA',\n    'XID',\n    'XML',\n    'XOR', // (R)\n    'YEAR',\n    'YEAR_MONTH', // (R)\n    'ZEROFILL', // (R)\n    'ZONE'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html\n  all: [\n    'ABS',\n    'ACOS',\n    'ADDDATE',\n    'ADDTIME',\n    'AES_DECRYPT',\n    'AES_ENCRYPT',\n    // 'AND',\n    'ANY_VALUE',\n    'ASCII',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'AVG',\n    'BENCHMARK',\n    'BIN',\n    'BIN_TO_UUID',\n    'BINARY',\n    'BIT_AND',\n    'BIT_COUNT',\n    'BIT_LENGTH',\n    'BIT_OR',\n    'BIT_XOR',\n    'CAN_ACCESS_COLUMN',\n    'CAN_ACCESS_DATABASE',\n    'CAN_ACCESS_TABLE',\n    'CAN_ACCESS_USER',\n    'CAN_ACCESS_VIEW',\n    'CAST',\n    'CEIL',\n    'CEILING',\n    'CHAR',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'CHARSET',\n    'COALESCE',\n    'COERCIBILITY',\n    'COLLATION',\n    'COMPRESS',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONNECTION_ID',\n    'CONV',\n    'CONVERT',\n    'CONVERT_TZ',\n    'COS',\n    'COT',\n    'COUNT',\n    'CRC32',\n    'CUME_DIST',\n    'CURDATE',\n    'CURRENT_DATE',\n    'CURRENT_ROLE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURTIME',\n    'DATABASE',\n    'DATE',\n    'DATE_ADD',\n    'DATE_FORMAT',\n    'DATE_SUB',\n    'DATEDIFF',\n    'DAY',\n    'DAYNAME',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFYEAR',\n    'DEFAULT',\n    'DEGREES',\n    'DENSE_RANK',\n    'DIV',\n    'ELT',\n    'EXP',\n    'EXPORT_SET',\n    'EXTRACT',\n    'EXTRACTVALUE',\n    'FIELD',\n    'FIND_IN_SET',\n    'FIRST_VALUE',\n    'FLOOR',\n    'FORMAT',\n    'FORMAT_BYTES',\n    'FORMAT_PICO_TIME',\n    'FOUND_ROWS',\n    'FROM_BASE64',\n    'FROM_DAYS',\n    'FROM_UNIXTIME',\n    'GEOMCOLLECTION',\n    'GEOMETRYCOLLECTION',\n    'GET_DD_COLUMN_PRIVILEGES',\n    'GET_DD_CREATE_OPTIONS',\n    'GET_DD_INDEX_SUB_PART_LENGTH',\n    'GET_FORMAT',\n    'GET_LOCK',\n    'GREATEST',\n    'GROUP_CONCAT',\n    'GROUPING',\n    'GTID_SUBSET',\n    'GTID_SUBTRACT',\n    'HEX',\n    'HOUR',\n    'ICU_VERSION',\n    'IF',\n    'IFNULL',\n    // 'IN',\n    'INET_ATON',\n    'INET_NTOA',\n    'INET6_ATON',\n    'INET6_NTOA',\n    'INSERT',\n    'INSTR',\n    'INTERNAL_AUTO_INCREMENT',\n    'INTERNAL_AVG_ROW_LENGTH',\n    'INTERNAL_CHECK_TIME',\n    'INTERNAL_CHECKSUM',\n    'INTERNAL_DATA_FREE',\n    'INTERNAL_DATA_LENGTH',\n    'INTERNAL_DD_CHAR_LENGTH',\n    'INTERNAL_GET_COMMENT_OR_ERROR',\n    'INTERNAL_GET_ENABLED_ROLE_JSON',\n    'INTERNAL_GET_HOSTNAME',\n    'INTERNAL_GET_USERNAME',\n    'INTERNAL_GET_VIEW_WARNING_OR_ERROR',\n    'INTERNAL_INDEX_COLUMN_CARDINALITY',\n    'INTERNAL_INDEX_LENGTH',\n    'INTERNAL_IS_ENABLED_ROLE',\n    'INTERNAL_IS_MANDATORY_ROLE',\n    'INTERNAL_KEYS_DISABLED',\n    'INTERNAL_MAX_DATA_LENGTH',\n    'INTERNAL_TABLE_ROWS',\n    'INTERNAL_UPDATE_TIME',\n    'INTERVAL',\n    'IS',\n    'IS_FREE_LOCK',\n    'IS_IPV4',\n    'IS_IPV4_COMPAT',\n    'IS_IPV4_MAPPED',\n    'IS_IPV6',\n    'IS NOT',\n    'IS NOT NULL',\n    'IS NULL',\n    'IS_USED_LOCK',\n    'IS_UUID',\n    'ISNULL',\n    'JSON_ARRAY',\n    'JSON_ARRAY_APPEND',\n    'JSON_ARRAY_INSERT',\n    'JSON_ARRAYAGG',\n    'JSON_CONTAINS',\n    'JSON_CONTAINS_PATH',\n    'JSON_DEPTH',\n    'JSON_EXTRACT',\n    'JSON_INSERT',\n    'JSON_KEYS',\n    'JSON_LENGTH',\n    'JSON_MERGE',\n    'JSON_MERGE_PATCH',\n    'JSON_MERGE_PRESERVE',\n    'JSON_OBJECT',\n    'JSON_OBJECTAGG',\n    'JSON_OVERLAPS',\n    'JSON_PRETTY',\n    'JSON_QUOTE',\n    'JSON_REMOVE',\n    'JSON_REPLACE',\n    'JSON_SCHEMA_VALID',\n    'JSON_SCHEMA_VALIDATION_REPORT',\n    'JSON_SEARCH',\n    'JSON_SET',\n    'JSON_STORAGE_FREE',\n    'JSON_STORAGE_SIZE',\n    'JSON_TABLE',\n    'JSON_TYPE',\n    'JSON_UNQUOTE',\n    'JSON_VALID',\n    'JSON_VALUE',\n    'LAG',\n    'LAST_DAY',\n    'LAST_INSERT_ID',\n    'LAST_VALUE',\n    'LCASE',\n    'LEAD',\n    'LEAST',\n    'LEFT',\n    'LENGTH',\n    'LIKE',\n    'LINESTRING',\n    'LN',\n    'LOAD_FILE',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOCATE',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'MAKE_SET',\n    'MAKEDATE',\n    'MAKETIME',\n    'MASTER_POS_WAIT',\n    'MATCH',\n    'MAX',\n    'MBRCONTAINS',\n    'MBRCOVEREDBY',\n    'MBRCOVERS',\n    'MBRDISJOINT',\n    'MBREQUALS',\n    'MBRINTERSECTS',\n    'MBROVERLAPS',\n    'MBRTOUCHES',\n    'MBRWITHIN',\n    'MD5',\n    'MEMBER OF',\n    'MICROSECOND',\n    'MID',\n    'MIN',\n    'MINUTE',\n    'MOD',\n    'MONTH',\n    'MONTHNAME',\n    'MULTILINESTRING',\n    'MULTIPOINT',\n    'MULTIPOLYGON',\n    'NAME_CONST',\n    'NOT',\n    'NOT IN',\n    'NOT LIKE',\n    'NOT REGEXP',\n    'NOW',\n    'NTH_VALUE',\n    'NTILE',\n    'NULLIF',\n    'OCT',\n    'OCTET_LENGTH',\n    // 'OR',\n    'ORD',\n    'PERCENT_RANK',\n    'PERIOD_ADD',\n    'PERIOD_DIFF',\n    'PI',\n    'POINT',\n    'POLYGON',\n    'POSITION',\n    'POW',\n    'POWER',\n    'PS_CURRENT_THREAD_ID',\n    'PS_THREAD_ID',\n    'QUARTER',\n    'QUOTE',\n    'RADIANS',\n    'RAND',\n    'RANDOM_BYTES',\n    'RANK',\n    'REGEXP',\n    'REGEXP_INSTR',\n    'REGEXP_LIKE',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'RELEASE_ALL_LOCKS',\n    'RELEASE_LOCK',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'RIGHT',\n    'RLIKE',\n    'ROLES_GRAPHML',\n    'ROUND',\n    'ROW_COUNT',\n    'ROW_NUMBER',\n    'RPAD',\n    'RTRIM',\n    'SCHEMA',\n    'SEC_TO_TIME',\n    'SECOND',\n    'SESSION_USER',\n    'SHA1',\n    'SHA2',\n    'SIGN',\n    'SIN',\n    'SLEEP',\n    'SOUNDEX',\n    'SOUNDS LIKE',\n    'SOURCE_POS_WAIT',\n    'SPACE',\n    'SQRT',\n    'ST_AREA',\n    'ST_ASBINARY',\n    'ST_ASGEOJSON',\n    'ST_ASTEXT',\n    'ST_BUFFER',\n    'ST_BUFFER_STRATEGY',\n    'ST_CENTROID',\n    'ST_COLLECT',\n    'ST_CONTAINS',\n    'ST_CONVEXHULL',\n    'ST_CROSSES',\n    'ST_DIFFERENCE',\n    'ST_DIMENSION',\n    'ST_DISJOINT',\n    'ST_DISTANCE',\n    'ST_DISTANCE_SPHERE',\n    'ST_ENDPOINT',\n    'ST_ENVELOPE',\n    'ST_EQUALS',\n    'ST_EXTERIORRING',\n    'ST_FRECHETDISTANCE',\n    'ST_GEOHASH',\n    'ST_GEOMCOLLFROMTEXT',\n    'ST_GEOMCOLLFROMWKB',\n    'ST_GEOMETRYN',\n    'ST_GEOMETRYTYPE',\n    'ST_GEOMFROMGEOJSON',\n    'ST_GEOMFROMTEXT',\n    'ST_GEOMFROMWKB',\n    'ST_HAUSDORFFDISTANCE',\n    'ST_INTERIORRINGN',\n    'ST_INTERSECTION',\n    'ST_INTERSECTS',\n    'ST_ISCLOSED',\n    'ST_ISEMPTY',\n    'ST_ISSIMPLE',\n    'ST_ISVALID',\n    'ST_LATFROMGEOHASH',\n    'ST_LATITUDE',\n    'ST_LENGTH',\n    'ST_LINEFROMTEXT',\n    'ST_LINEFROMWKB',\n    'ST_LINEINTERPOLATEPOINT',\n    'ST_LINEINTERPOLATEPOINTS',\n    'ST_LONGFROMGEOHASH',\n    'ST_LONGITUDE',\n    'ST_MAKEENVELOPE',\n    'ST_MLINEFROMTEXT',\n    'ST_MLINEFROMWKB',\n    'ST_MPOINTFROMTEXT',\n    'ST_MPOINTFROMWKB',\n    'ST_MPOLYFROMTEXT',\n    'ST_MPOLYFROMWKB',\n    'ST_NUMGEOMETRIES',\n    'ST_NUMINTERIORRING',\n    'ST_NUMPOINTS',\n    'ST_OVERLAPS',\n    'ST_POINTATDISTANCE',\n    'ST_POINTFROMGEOHASH',\n    'ST_POINTFROMTEXT',\n    'ST_POINTFROMWKB',\n    'ST_POINTN',\n    'ST_POLYFROMTEXT',\n    'ST_POLYFROMWKB',\n    'ST_SIMPLIFY',\n    'ST_SRID',\n    'ST_STARTPOINT',\n    'ST_SWAPXY',\n    'ST_SYMDIFFERENCE',\n    'ST_TOUCHES',\n    'ST_TRANSFORM',\n    'ST_UNION',\n    'ST_VALIDATE',\n    'ST_WITHIN',\n    'ST_X',\n    'ST_Y',\n    'STATEMENT_DIGEST',\n    'STATEMENT_DIGEST_TEXT',\n    'STD',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STR_TO_DATE',\n    'STRCMP',\n    'SUBDATE',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUBSTRING_INDEX',\n    'SUBTIME',\n    'SUM',\n    'SYSDATE',\n    'SYSTEM_USER',\n    'TAN',\n    'TIME',\n    'TIME_FORMAT',\n    'TIME_TO_SEC',\n    'TIMEDIFF',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TO_BASE64',\n    'TO_DAYS',\n    'TO_SECONDS',\n    'TRIM',\n    'TRUNCATE',\n    'UCASE',\n    'UNCOMPRESS',\n    'UNCOMPRESSED_LENGTH',\n    'UNHEX',\n    'UNIX_TIMESTAMP',\n    'UPDATEXML',\n    'UPPER',\n    'USER',\n    'UTC_DATE',\n    'UTC_TIME',\n    'UTC_TIMESTAMP',\n    'UUID',\n    'UUID_SHORT',\n    'UUID_TO_BIN',\n    'VALIDATE_PASSWORD_STRENGTH',\n    'VALUES',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE',\n    'VERSION',\n    'WAIT_FOR_EXECUTED_GTID_SET',\n    'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',\n    'WEEK',\n    'WEEKDAY',\n    'WEEKOFYEAR',\n    'WEIGHT_STRING',\n    // 'XOR',\n    'YEAR',\n    'YEARWEEK',\n    // Data types with parameters\n    // https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n    'BIT',\n    'TINYINT',\n    'SMALLINT',\n    'MEDIUMINT',\n    'INT',\n    'INTEGER',\n    'BIGINT',\n    'DECIMAL',\n    'DEC',\n    'NUMERIC',\n    'FIXED',\n    'FLOAT',\n    'DOUBLE',\n    'DOUBLE PRECISION',\n    'REAL',\n    'DATETIME',\n    'TIMESTAMP',\n    'TIME',\n    'YEAR',\n    'CHAR',\n    'NATIONAL CHAR',\n    'VARCHAR',\n    'NATIONAL VARCHAR',\n    'BINARY',\n    'VARBINARY',\n    'BLOB',\n    'TEXT',\n    'ENUM'\n    // 'SET' // handled as special-case in postProcess\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './mysql.keywords.js';\nimport { functions } from './mysql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n  'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n  'CREATE [TEMPORARY] TABLE [IF NOT EXISTS]'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE [LOW_PRIORITY] [IGNORE]',\n  // - delete:\n  'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  '{CHANGE | MODIFY} [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [TO | AS]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html\n  'ALTER DATABASE',\n  'ALTER EVENT',\n  'ALTER FUNCTION',\n  'ALTER INSTANCE',\n  'ALTER LOGFILE GROUP',\n  'ALTER PROCEDURE',\n  'ALTER RESOURCE GROUP',\n  'ALTER SERVER',\n  'ALTER TABLESPACE',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE TABLE',\n  'BINLOG',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE MASTER TO',\n  'CHANGE REPLICATION FILTER',\n  'CHANGE REPLICATION SOURCE TO',\n  'CHECK TABLE',\n  'CHECKSUM TABLE',\n  'CLONE',\n  'COMMIT',\n  'CREATE DATABASE',\n  'CREATE EVENT',\n  'CREATE FUNCTION',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE LOGFILE GROUP',\n  'CREATE PROCEDURE',\n  'CREATE RESOURCE GROUP',\n  'CREATE ROLE',\n  'CREATE SERVER',\n  'CREATE SPATIAL REFERENCE SYSTEM',\n  'CREATE TABLESPACE',\n  'CREATE TRIGGER',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DO',\n  'DROP DATABASE',\n  'DROP EVENT',\n  'DROP FUNCTION',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP LOGFILE GROUP',\n  'DROP PROCEDURE',\n  'DROP RESOURCE GROUP',\n  'DROP ROLE',\n  'DROP SERVER',\n  'DROP SPATIAL REFERENCE SYSTEM',\n  'DROP TABLESPACE',\n  'DROP TRIGGER',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'IMPORT TABLE',\n  'INSTALL COMPONENT',\n  'INSTALL PLUGIN',\n  'KILL',\n  'LOAD DATA',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML',\n  'LOCK INSTANCE FOR BACKUP',\n  'LOCK TABLES',\n  'MASTER_POS_WAIT',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'RELEASE SAVEPOINT',\n  'RENAME TABLE',\n  'RENAME USER',\n  'REPAIR TABLE',\n  'RESET',\n  'RESET MASTER',\n  'RESET PERSIST',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESTART',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET RESOURCE GROUP',\n  'SET ROLE',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW BINARY LOGS',\n  'SHOW BINLOG EVENTS',\n  'SHOW CHARACTER SET',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE EVENT',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE TRIGGER',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW EVENTS',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PLUGINS',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA STATUS',\n  'SHOW REPLICAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW STATUS',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW TRIGGERS',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHUTDOWN',\n  'SOURCE_POS_WAIT',\n  'START GROUP_REPLICATION',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP GROUP_REPLICATION',\n  'STOP REPLICA',\n  'STOP SLAVE',\n  'TABLE',\n  'UNINSTALL COMPONENT',\n  'UNINSTALL PLUGIN',\n  'UNLOCK INSTANCE',\n  'UNLOCK TABLES',\n  'USE',\n  'XA',\n  // flow control\n  // 'IF',\n  'ITERATE',\n  'LEAVE',\n  'LOOP',\n  'REPEAT',\n  'RETURN',\n  'WHILE'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL]',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN'\n]);\n\n// https://dev.mysql.com/doc/refman/8.0/en/\nexport const mysql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n    stringTypes: [\n      '\"\"-qq-bs',\n      { quote: \"''-qq-bs\", prefixes: ['N'] },\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true }\n    ],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_.$]+' },\n      { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n      { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n      { quote: '``', prefixes: ['@'], requirePrefix: true }\n    ],\n    paramTypes: { positional: true },\n    lineCommentTypes: ['--', '#'],\n    operators: ['%', ':=', '&', '|', '^', '~', '<<', '>>', '<=>', '->', '->>', '&&', '||', '!'],\n    postProcess\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n    if (isToken.SET(token) && nextToken.text === '(') {\n      // This is SET datatype, not SET statement\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n    return token;\n  });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html\n  all: [\n    'ABORT',\n    'ABS',\n    'ACOS',\n    'ADVISOR',\n    'ARRAY_AGG',\n    'ARRAY_AGG',\n    'ARRAY_APPEND',\n    'ARRAY_AVG',\n    'ARRAY_BINARY_SEARCH',\n    'ARRAY_CONCAT',\n    'ARRAY_CONTAINS',\n    'ARRAY_COUNT',\n    'ARRAY_DISTINCT',\n    'ARRAY_EXCEPT',\n    'ARRAY_FLATTEN',\n    'ARRAY_IFNULL',\n    'ARRAY_INSERT',\n    'ARRAY_INTERSECT',\n    'ARRAY_LENGTH',\n    'ARRAY_MAX',\n    'ARRAY_MIN',\n    'ARRAY_MOVE',\n    'ARRAY_POSITION',\n    'ARRAY_PREPEND',\n    'ARRAY_PUT',\n    'ARRAY_RANGE',\n    'ARRAY_REMOVE',\n    'ARRAY_REPEAT',\n    'ARRAY_REPLACE',\n    'ARRAY_REVERSE',\n    'ARRAY_SORT',\n    'ARRAY_STAR',\n    'ARRAY_SUM',\n    'ARRAY_SYMDIFF',\n    'ARRAY_SYMDIFF1',\n    'ARRAY_SYMDIFFN',\n    'ARRAY_UNION',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'AVG',\n    'BASE64',\n    'BASE64_DECODE',\n    'BASE64_ENCODE',\n    'BITAND ',\n    'BITCLEAR ',\n    'BITNOT ',\n    'BITOR ',\n    'BITSET ',\n    'BITSHIFT ',\n    'BITTEST ',\n    'BITXOR ',\n    'CEIL',\n    'CLOCK_LOCAL',\n    'CLOCK_MILLIS',\n    'CLOCK_STR',\n    'CLOCK_TZ',\n    'CLOCK_UTC',\n    'COALESCE',\n    'CONCAT',\n    'CONCAT2',\n    'CONTAINS',\n    'CONTAINS_TOKEN',\n    'CONTAINS_TOKEN_LIKE',\n    'CONTAINS_TOKEN_REGEXP',\n    'COS',\n    'COUNT',\n    'COUNT',\n    'COUNTN',\n    'CUME_DIST',\n    'CURL',\n    'DATE_ADD_MILLIS',\n    'DATE_ADD_STR',\n    'DATE_DIFF_MILLIS',\n    'DATE_DIFF_STR',\n    'DATE_FORMAT_STR',\n    'DATE_PART_MILLIS',\n    'DATE_PART_STR',\n    'DATE_RANGE_MILLIS',\n    'DATE_RANGE_STR',\n    'DATE_TRUNC_MILLIS',\n    'DATE_TRUNC_STR',\n    'DECODE',\n    'DECODE_JSON',\n    'DEGREES',\n    'DENSE_RANK',\n    'DURATION_TO_STR',\n    // 'E',\n    'ENCODED_SIZE',\n    'ENCODE_JSON',\n    'EXP',\n    'FIRST_VALUE',\n    'FLOOR',\n    'GREATEST',\n    'HAS_TOKEN',\n    'IFINF',\n    'IFMISSING',\n    'IFMISSINGORNULL',\n    'IFNAN',\n    'IFNANORINF',\n    'IFNULL',\n    'INITCAP',\n    'ISARRAY',\n    'ISATOM',\n    'ISBITSET',\n    'ISBOOLEAN',\n    'ISNUMBER',\n    'ISOBJECT',\n    'ISSTRING',\n    'LAG',\n    'LAST_VALUE',\n    'LEAD',\n    'LEAST',\n    'LENGTH',\n    'LN',\n    'LOG',\n    'LOWER',\n    'LTRIM',\n    'MAX',\n    'MEAN',\n    'MEDIAN',\n    'META',\n    'MILLIS',\n    'MILLIS_TO_LOCAL',\n    'MILLIS_TO_STR',\n    'MILLIS_TO_TZ',\n    'MILLIS_TO_UTC',\n    'MILLIS_TO_ZONE_NAME',\n    'MIN',\n    'MISSINGIF',\n    'NANIF',\n    'NEGINFIF',\n    'NOW_LOCAL',\n    'NOW_MILLIS',\n    'NOW_STR',\n    'NOW_TZ',\n    'NOW_UTC',\n    'NTH_VALUE',\n    'NTILE',\n    'NULLIF',\n    'NVL',\n    'NVL2',\n    'OBJECT_ADD',\n    'OBJECT_CONCAT',\n    'OBJECT_INNER_PAIRS',\n    'OBJECT_INNER_VALUES',\n    'OBJECT_LENGTH',\n    'OBJECT_NAMES',\n    'OBJECT_PAIRS',\n    'OBJECT_PUT',\n    'OBJECT_REMOVE',\n    'OBJECT_RENAME',\n    'OBJECT_REPLACE',\n    'OBJECT_UNWRAP',\n    'OBJECT_VALUES',\n    'PAIRS',\n    'PERCENT_RANK',\n    'PI',\n    'POLY_LENGTH',\n    'POSINFIF',\n    'POSITION',\n    'POWER',\n    'RADIANS',\n    'RANDOM',\n    'RANK',\n    'RATIO_TO_REPORT',\n    'REGEXP_CONTAINS',\n    'REGEXP_LIKE',\n    'REGEXP_MATCHES',\n    'REGEXP_POSITION',\n    'REGEXP_REPLACE',\n    'REGEXP_SPLIT',\n    'REGEX_CONTAINS',\n    'REGEX_LIKE',\n    'REGEX_MATCHES',\n    'REGEX_POSITION',\n    'REGEX_REPLACE',\n    'REGEX_SPLIT',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'ROUND',\n    'ROW_NUMBER',\n    'RTRIM',\n    'SEARCH',\n    'SEARCH_META',\n    'SEARCH_SCORE',\n    'SIGN',\n    'SIN',\n    'SPLIT',\n    'SQRT',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STR_TO_DURATION',\n    'STR_TO_MILLIS',\n    'STR_TO_TZ',\n    'STR_TO_UTC',\n    'STR_TO_ZONE_NAME',\n    'SUBSTR',\n    'SUFFIXES',\n    'SUM',\n    'TAN',\n    'TITLE',\n    'TOARRAY',\n    'TOATOM',\n    'TOBOOLEAN',\n    'TOKENS',\n    'TOKENS',\n    'TONUMBER',\n    'TOOBJECT',\n    'TOSTRING',\n    'TRIM',\n    'TRUNC',\n    // 'TYPE', // disabled\n    'UPPER',\n    'UUID',\n    'VARIANCE',\n    'VARIANCE_POP',\n    'VARIANCE_SAMP',\n    'VAR_POP',\n    'VAR_SAMP',\n    'WEEKDAY_MILLIS',\n    'WEEKDAY_STR',\n    // type casting\n    // not implemented in N1QL, but added here now for the sake of tests\n    // https://docs.couchbase.com/server/current/analytics/3_query.html#Vs_SQL-92\n    'CAST'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n  all: [\n    'ADVISE',\n    'ALL',\n    'ALTER',\n    'ANALYZE',\n    'AND',\n    'ANY',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'AT',\n    'BEGIN',\n    'BETWEEN',\n    'BINARY',\n    'BOOLEAN',\n    'BREAK',\n    'BUCKET',\n    'BUILD',\n    'BY',\n    'CALL',\n    'CASE',\n    'CAST',\n    'CLUSTER',\n    'COLLATE',\n    'COLLECTION',\n    'COMMIT',\n    'COMMITTED',\n    'CONNECT',\n    'CONTINUE',\n    'CORRELATED',\n    'COVER',\n    'CREATE',\n    'CURRENT',\n    'DATABASE',\n    'DATASET',\n    'DATASTORE',\n    'DECLARE',\n    'DECREMENT',\n    'DELETE',\n    'DERIVED',\n    'DESC',\n    'DESCRIBE',\n    'DISTINCT',\n    'DO',\n    'DROP',\n    'EACH',\n    'ELEMENT',\n    'ELSE',\n    'END',\n    'EVERY',\n    'EXCEPT',\n    'EXCLUDE',\n    'EXECUTE',\n    'EXISTS',\n    'EXPLAIN',\n    'FALSE',\n    'FETCH',\n    'FILTER',\n    'FIRST',\n    'FLATTEN',\n    'FLUSH',\n    'FOLLOWING',\n    'FOR',\n    'FORCE',\n    'FROM',\n    'FTS',\n    'FUNCTION',\n    'GOLANG',\n    'GRANT',\n    'GROUP',\n    'GROUPS',\n    'GSI',\n    'HASH',\n    'HAVING',\n    'IF',\n    'ISOLATION',\n    'IGNORE',\n    'ILIKE',\n    'IN',\n    'INCLUDE',\n    'INCREMENT',\n    'INDEX',\n    'INFER',\n    'INLINE',\n    'INNER',\n    'INSERT',\n    'INTERSECT',\n    'INTO',\n    'IS',\n    'JAVASCRIPT',\n    'JOIN',\n    'KEY',\n    'KEYS',\n    'KEYSPACE',\n    'KNOWN',\n    'LANGUAGE',\n    'LAST',\n    'LEFT',\n    'LET',\n    'LETTING',\n    'LEVEL',\n    'LIKE',\n    'LIMIT',\n    'LSM',\n    'MAP',\n    'MAPPING',\n    'MATCHED',\n    'MATERIALIZED',\n    'MERGE',\n    'MINUS',\n    'MISSING',\n    'NAMESPACE',\n    'NEST',\n    'NL',\n    'NO',\n    'NOT',\n    'NTH_VALUE',\n    'NULL',\n    'NULLS',\n    'NUMBER',\n    'OBJECT',\n    'OFFSET',\n    'ON',\n    'OPTION',\n    'OPTIONS',\n    'OR',\n    'ORDER',\n    'OTHERS',\n    'OUTER',\n    'OVER',\n    'PARSE',\n    'PARTITION',\n    'PASSWORD',\n    'PATH',\n    'POOL',\n    'PRECEDING',\n    'PREPARE',\n    'PRIMARY',\n    'PRIVATE',\n    'PRIVILEGE',\n    'PROBE',\n    'PROCEDURE',\n    'PUBLIC',\n    'RANGE',\n    'RAW',\n    'REALM',\n    'REDUCE',\n    'RENAME',\n    'RESPECT',\n    'RETURN',\n    'RETURNING',\n    'REVOKE',\n    'RIGHT',\n    'ROLE',\n    'ROLLBACK',\n    'ROW',\n    'ROWS',\n    'SATISFIES',\n    'SAVEPOINT',\n    'SCHEMA',\n    'SCOPE',\n    'SELECT',\n    'SELF',\n    'SEMI',\n    'SET',\n    'SHOW',\n    'SOME',\n    'START',\n    'STATISTICS',\n    'STRING',\n    'SYSTEM',\n    'THEN',\n    'TIES',\n    'TO',\n    'TRAN',\n    'TRANSACTION',\n    'TRIGGER',\n    'TRUE',\n    'TRUNCATE',\n    'UNBOUNDED',\n    'UNDER',\n    'UNION',\n    'UNIQUE',\n    'UNKNOWN',\n    'UNNEST',\n    'UNSET',\n    'UPDATE',\n    'UPSERT',\n    'USE',\n    'USER',\n    'USING',\n    'VALIDATE',\n    'VALUE',\n    'VALUED',\n    'VALUES',\n    'VIA',\n    'VIEW',\n    'WHEN',\n    'WHERE',\n    'WHILE',\n    'WINDOW',\n    'WITH',\n    'WITHIN',\n    'WORK',\n    'XOR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './n1ql.functions.js';\nimport { keywords } from './n1ql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED THEN',\n  'UPDATE SET',\n  'INSERT',\n  // other\n  'NEST',\n  'UNNEST',\n  'RETURNING'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - set schema:\n  'SET SCHEMA',\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n  'ADVISE',\n  'ALTER INDEX',\n  'BEGIN TRANSACTION',\n  'BUILD INDEX',\n  'COMMIT TRANSACTION',\n  'CREATE COLLECTION',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE PRIMARY INDEX',\n  'CREATE SCOPE',\n  'DROP COLLECTION',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP PRIMARY INDEX',\n  'DROP SCOPE',\n  'EXECUTE',\n  'EXECUTE FUNCTION',\n  'EXPLAIN',\n  'GRANT',\n  'INFER',\n  'PREPARE',\n  'REVOKE',\n  'ROLLBACK TRANSACTION',\n  'SAVEPOINT',\n  'SET TRANSACTION',\n  'UPDATE STATISTICS',\n  'UPSERT',\n  // other\n  'LET',\n  'SET CURRENT SCHEMA',\n  'SHOW',\n  'USE [PRIMARY] KEYS'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT} [OUTER] JOIN', 'INNER JOIN']);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE | GROUPS} BETWEEN']);\n\n// For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html\nexport const n1ql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    // NOTE: single quotes are actually not supported in N1QL,\n    // but we support them anyway as all other SQL dialects do,\n    // which simplifies writing tests that are shared between all dialects.\n    stringTypes: ['\"\"-bs', \"''-bs\"],\n    identTypes: ['``'],\n    extraParens: ['[]', '{}'],\n    paramTypes: { positional: true, numbered: ['$'], named: ['$'] },\n    lineCommentTypes: ['#', '--'],\n    operators: ['%', '==', ':', '||']\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/reservewords.htm\n  all: [\n    // 'A',\n    'ADD',\n    'AGENT',\n    'AGGREGATE',\n    'ALL',\n    'ALTER',\n    'AND',\n    'ANY',\n    'ARRAY',\n    'ARROW',\n    'AS',\n    'ASC',\n    'AT',\n    'ATTRIBUTE',\n    'AUTHID',\n    'AVG',\n    'BEGIN',\n    'BETWEEN',\n    'BFILE_BASE',\n    'BINARY',\n    'BLOB_BASE',\n    'BLOCK',\n    'BODY',\n    'BOTH',\n    'BOUND',\n    'BULK',\n    'BY',\n    'BYTE',\n    // 'C',\n    'CALL',\n    'CALLING',\n    'CASCADE',\n    'CASE',\n    'CHAR',\n    'CHAR_BASE',\n    'CHARACTER',\n    'CHARSET',\n    'CHARSETFORM',\n    'CHARSETID',\n    'CHECK',\n    'CLOB_BASE',\n    'CLOSE',\n    'CLUSTER',\n    'CLUSTERS',\n    'COLAUTH',\n    'COLLECT',\n    'COLUMNS',\n    'COMMENT',\n    'COMMIT',\n    'COMMITTED',\n    'COMPILED',\n    'COMPRESS',\n    'CONNECT',\n    'CONSTANT',\n    'CONSTRUCTOR',\n    'CONTEXT',\n    'CONVERT',\n    'COUNT',\n    'CRASH',\n    'CREATE',\n    'CURRENT',\n    'CURSOR',\n    'CUSTOMDATUM',\n    'DANGLING',\n    'DATA',\n    'DATE',\n    'DATE_BASE',\n    'DAY',\n    'DECIMAL',\n    'DECLARE',\n    'DEFAULT',\n    'DEFINE',\n    'DELETE',\n    'DESC',\n    'DETERMINISTIC',\n    'DISTINCT',\n    'DOUBLE',\n    'DROP',\n    'DURATION',\n    'ELEMENT',\n    'ELSE',\n    'ELSIF',\n    'EMPTY',\n    'END',\n    'ESCAPE',\n    'EXCEPT',\n    'EXCEPTION',\n    'EXCEPTIONS',\n    'EXCLUSIVE',\n    'EXECUTE',\n    'EXISTS',\n    'EXIT',\n    'EXTERNAL',\n    'FETCH',\n    'FINAL',\n    'FIXED',\n    'FLOAT',\n    'FOR',\n    'FORALL',\n    'FORCE',\n    'FORM',\n    'FROM',\n    'FUNCTION',\n    'GENERAL',\n    'GOTO',\n    'GRANT',\n    'GROUP',\n    'HASH',\n    'HAVING',\n    'HEAP',\n    'HIDDEN',\n    'HOUR',\n    'IDENTIFIED',\n    'IF',\n    'IMMEDIATE',\n    'IN',\n    'INCLUDING',\n    'INDEX',\n    'INDEXES',\n    'INDICATOR',\n    'INDICES',\n    'INFINITE',\n    'INSERT',\n    'INSTANTIABLE',\n    'INT',\n    'INTERFACE',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'INVALIDATE',\n    'IS',\n    'ISOLATION',\n    'JAVA',\n    'LANGUAGE',\n    'LARGE',\n    'LEADING',\n    'LENGTH',\n    'LEVEL',\n    'LIBRARY',\n    'LIKE',\n    'LIKE2',\n    'LIKE4',\n    'LIKEC',\n    'LIMIT',\n    'LIMITED',\n    'LOCAL',\n    'LOCK',\n    'LONG',\n    'LOOP',\n    'MAP',\n    'MAX',\n    'MAXLEN',\n    'MEMBER',\n    'MERGE',\n    'MIN',\n    'MINUS',\n    'MINUTE',\n    'MOD',\n    'MODE',\n    'MODIFY',\n    'MONTH',\n    'MULTISET',\n    'NAME',\n    'NAN',\n    'NATIONAL',\n    'NATIVE',\n    'NCHAR',\n    'NEW',\n    'NOCOMPRESS',\n    'NOCOPY',\n    'NOT',\n    'NOWAIT',\n    'NULL',\n    'NUMBER_BASE',\n    'OBJECT',\n    'OCICOLL',\n    'OCIDATE',\n    'OCIDATETIME',\n    'OCIDURATION',\n    'OCIINTERVAL',\n    'OCILOBLOCATOR',\n    'OCINUMBER',\n    'OCIRAW',\n    'OCIREF',\n    'OCIREFCURSOR',\n    'OCIROWID',\n    'OCISTRING',\n    'OCITYPE',\n    'OF',\n    'ON',\n    'ONLY',\n    'OPAQUE',\n    'OPEN',\n    'OPERATOR',\n    'OPTION',\n    'OR',\n    'ORACLE',\n    'ORADATA',\n    'ORDER',\n    'OVERLAPS',\n    'ORGANIZATION',\n    'ORLANY',\n    'ORLVARY',\n    'OTHERS',\n    'OUT',\n    'OVERRIDING',\n    'PACKAGE',\n    'PARALLEL_ENABLE',\n    'PARAMETER',\n    'PARAMETERS',\n    'PARTITION',\n    'PASCAL',\n    'PIPE',\n    'PIPELINED',\n    'PRAGMA',\n    'PRECISION',\n    'PRIOR',\n    'PRIVATE',\n    'PROCEDURE',\n    'PUBLIC',\n    'RAISE',\n    'RANGE',\n    'RAW',\n    'READ',\n    'RECORD',\n    'REF',\n    'REFERENCE',\n    'REM',\n    'REMAINDER',\n    'RENAME',\n    'RESOURCE',\n    'RESULT',\n    'RETURN',\n    'RETURNING',\n    'REVERSE',\n    'REVOKE',\n    'ROLLBACK',\n    'ROW',\n    'SAMPLE',\n    'SAVE',\n    'SAVEPOINT',\n    'SB1',\n    'SB2',\n    'SB4',\n    'SECOND',\n    'SEGMENT',\n    'SELECT',\n    'SELF',\n    'SEPARATE',\n    'SEQUENCE',\n    'SERIALIZABLE',\n    'SET',\n    'SHARE',\n    'SHORT',\n    'SIZE',\n    'SIZE_T',\n    'SOME',\n    'SPARSE',\n    'SQL',\n    'SQLCODE',\n    'SQLDATA',\n    'SQLNAME',\n    'SQLSTATE',\n    'STANDARD',\n    'START',\n    'STATIC',\n    'STDDEV',\n    'STORED',\n    'STRING',\n    'STRUCT',\n    'STYLE',\n    'SUBMULTISET',\n    'SUBPARTITION',\n    'SUBSTITUTABLE',\n    'SUBTYPE',\n    'SUM',\n    'SYNONYM',\n    'TABAUTH',\n    'TABLE',\n    'TDO',\n    'THE',\n    'THEN',\n    'TIME',\n    'TIMESTAMP',\n    'TIMEZONE_ABBR',\n    'TIMEZONE_HOUR',\n    'TIMEZONE_MINUTE',\n    'TIMEZONE_REGION',\n    'TO',\n    'TRAILING',\n    'TRANSAC',\n    'TRANSACTIONAL',\n    'TRUSTED',\n    'TYPE',\n    'UB1',\n    'UB2',\n    'UB4',\n    'UNDER',\n    'UNION',\n    'UNIQUE',\n    'UNSIGNED',\n    'UNTRUSTED',\n    'UPDATE',\n    'USE',\n    'USING',\n    'VALIST',\n    'VALUE',\n    'VALUES',\n    'VARIABLE',\n    'VARIANCE',\n    'VARRAY',\n    'VARYING',\n    'VIEW',\n    'VIEWS',\n    'VOID',\n    'WHEN',\n    'WHERE',\n    'WHILE',\n    'WITH',\n    'WORK',\n    'WRAPPED',\n    'WRITE',\n    'YEAR',\n    'ZONE'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm\n  numeric: [\n    'ABS',\n    'ACOS',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'BITAND',\n    'CEIL',\n    'COS',\n    'COSH',\n    'EXP',\n    'FLOOR',\n    'LN',\n    'LOG',\n    'MOD',\n    'NANVL',\n    'POWER',\n    'REMAINDER',\n    'ROUND',\n    'SIGN',\n    'SIN',\n    'SINH',\n    'SQRT',\n    'TAN',\n    'TANH',\n    'TRUNC',\n    'WIDTH_BUCKET'\n  ],\n  character: [\n    'CHR',\n    'CONCAT',\n    'INITCAP',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'NLS_INITCAP',\n    'NLS_LOWER',\n    'NLSSORT',\n    'NLS_UPPER',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'REPLACE',\n    'RPAD',\n    'RTRIM',\n    'SOUNDEX',\n    'SUBSTR',\n    'TRANSLATE',\n    'TREAT',\n    'TRIM',\n    'UPPER',\n\n    'NLS_CHARSET_DECL_LEN',\n    'NLS_CHARSET_ID',\n    'NLS_CHARSET_NAME',\n\n    'ASCII',\n    'INSTR',\n    'LENGTH',\n    'REGEXP_INSTR'\n  ],\n  datetime: [\n    'ADD_MONTHS',\n    'CURRENT_DATE',\n    'CURRENT_TIMESTAMP',\n    'DBTIMEZONE',\n    'EXTRACT',\n    'FROM_TZ',\n    'LAST_DAY',\n    'LOCALTIMESTAMP',\n    'MONTHS_BETWEEN',\n    'NEW_TIME',\n    'NEXT_DAY',\n    'NUMTODSINTERVAL',\n    'NUMTOYMINTERVAL',\n    'ROUND',\n    'SESSIONTIMEZONE',\n    'SYS_EXTRACT_UTC',\n    'SYSDATE',\n    'SYSTIMESTAMP',\n    'TO_CHAR',\n    'TO_TIMESTAMP',\n    'TO_TIMESTAMP_TZ',\n    'TO_DSINTERVAL',\n    'TO_YMINTERVAL',\n    'TRUNC',\n    'TZ_OFFSET'\n  ],\n  comparison: ['GREATEST', 'LEAST'],\n  conversion: [\n    'ASCIISTR',\n    'BIN_TO_NUM',\n    'CAST',\n    'CHARTOROWID',\n    'COMPOSE',\n    'CONVERT',\n    'DECOMPOSE',\n    'HEXTORAW',\n    'NUMTODSINTERVAL',\n    'NUMTOYMINTERVAL',\n    'RAWTOHEX',\n    'RAWTONHEX',\n    'ROWIDTOCHAR',\n    'ROWIDTONCHAR',\n    'SCN_TO_TIMESTAMP',\n    'TIMESTAMP_TO_SCN',\n    'TO_BINARY_DOUBLE',\n    'TO_BINARY_FLOAT',\n    'TO_CHAR',\n    'TO_CLOB',\n    'TO_DATE',\n    'TO_DSINTERVAL',\n    'TO_LOB',\n    'TO_MULTI_BYTE',\n    'TO_NCHAR',\n    'TO_NCLOB',\n    'TO_NUMBER',\n    'TO_DSINTERVAL',\n    'TO_SINGLE_BYTE',\n    'TO_TIMESTAMP',\n    'TO_TIMESTAMP_TZ',\n    'TO_YMINTERVAL',\n    'TO_YMINTERVAL',\n    'TRANSLATE',\n    'UNISTR'\n  ],\n  largeObject: ['BFILENAME', 'EMPTY_BLOB,', 'EMPTY_CLOB'],\n  collection: ['CARDINALITY', 'COLLECT', 'POWERMULTISET', 'POWERMULTISET_BY_CARDINALITY', 'SET'],\n  hierarchical: ['SYS_CONNECT_BY_PATH'],\n  dataMining: [\n    'CLUSTER_ID',\n    'CLUSTER_PROBABILITY',\n    'CLUSTER_SET',\n    'FEATURE_ID',\n    'FEATURE_SET',\n    'FEATURE_VALUE',\n    'PREDICTION',\n    'PREDICTION_COST',\n    'PREDICTION_DETAILS',\n    'PREDICTION_PROBABILITY',\n    'PREDICTION_SET'\n  ],\n  xml: [\n    'APPENDCHILDXML',\n    'DELETEXML',\n    'DEPTH',\n    'EXTRACT',\n    'EXISTSNODE',\n    'EXTRACTVALUE',\n    'INSERTCHILDXML',\n    'INSERTXMLBEFORE',\n    'PATH',\n    'SYS_DBURIGEN',\n    'SYS_XMLAGG',\n    'SYS_XMLGEN',\n    'UPDATEXML',\n    'XMLAGG',\n    'XMLCDATA',\n    'XMLCOLATTVAL',\n    'XMLCOMMENT',\n    'XMLCONCAT',\n    'XMLFOREST',\n    'XMLPARSE',\n    'XMLPI',\n    'XMLQUERY',\n    'XMLROOT',\n    'XMLSEQUENCE',\n    'XMLSERIALIZE',\n    'XMLTABLE',\n    'XMLTRANSFORM'\n  ],\n  encoding: ['DECODE', 'DUMP', 'ORA_HASH', 'VSIZE'],\n  nullRelated: ['COALESCE', 'LNNVL', 'NULLIF', 'NVL', 'NVL2'],\n  env: ['SYS_CONTEXT', 'SYS_GUID', 'SYS_TYPEID', 'UID', 'USER', 'USERENV'],\n  aggregate: [\n    'AVG',\n    'COLLECT',\n    'CORR',\n    'CORR_S',\n    'CORR_K',\n    'COUNT',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'CUME_DIST',\n    'DENSE_RANK',\n    'FIRST',\n    'GROUP_ID',\n    'GROUPING',\n    'GROUPING_ID',\n    'LAST',\n    'MAX',\n    'MEDIAN',\n    'MIN',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PERCENT_RANK',\n    'RANK',\n    'REGR_SLOPE',\n    'REGR_INTERCEPT',\n    'REGR_COUNT',\n    'REGR_R2',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_SXX',\n    'REGR_SYY',\n    'REGR_SXY',\n    'STATS_BINOMIAL_TEST',\n    'STATS_CROSSTAB',\n    'STATS_F_TEST',\n    'STATS_KS_TEST',\n    'STATS_MODE',\n    'STATS_MW_TEST',\n    'STATS_ONE_WAY_ANOVA',\n    'STATS_T_TEST_ONE',\n    'STATS_T_TEST_PAIRED',\n    'STATS_T_TEST_INDEP',\n    'STATS_T_TEST_INDEPU',\n    'STATS_WSR_TEST',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'SUM',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE'\n  ],\n  // Windowing functions (minus the ones already listed in aggregates)\n  window: ['FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTILE', 'RATIO_TO_REPORT', 'ROW_NUMBER'],\n  objectReference: ['DEREF', 'MAKE_REF', 'REF', 'REFTOHEX', 'VALUE'],\n  model: ['CV', 'ITERATION_NUMBER', 'PRESENTNNV', 'PRESENTV', 'PREVIOUS'],\n  // Parameterized data types\n  // https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Data-Types.html\n  dataTypes: [\n    // Oracle builtin data types\n    'VARCHAR2',\n    'NVARCHAR2',\n    'NUMBER',\n    'FLOAT',\n    'TIMESTAMP',\n    'INTERVAL YEAR',\n    'INTERVAL DAY',\n    'RAW',\n    'UROWID',\n    'NCHAR',\n    // ANSI Data Types\n    'CHARACTER',\n    'CHAR',\n    'CHARACTER VARYING',\n    'CHAR VARYING',\n    'NATIONAL CHARACTER',\n    'NATIONAL CHAR',\n    'NATIONAL CHARACTER VARYING',\n    'NATIONAL CHAR VARYING',\n    'NCHAR VARYING',\n    'NUMERIC',\n    'DECIMAL',\n    'FLOAT',\n    // SQL/DS and DB2 Data Types\n    'VARCHAR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isReserved, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './plsql.keywords.js';\nimport { functions } from './plsql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | UNIQUE]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER [SIBLINGS] BY',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  'FOR UPDATE',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO | ALL INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  // Data definition\n  'CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW',\n  'CREATE MATERIALIZED VIEW',\n  'CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE',\n  // other\n  'RETURNING'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE [ONLY]',\n  // - delete:\n  'DELETE FROM [ONLY]',\n  // - drop table:\n  'DROP TABLE',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD',\n  'DROP {COLUMN | UNUSED COLUMNS | COLUMNS CONTINUE}',\n  'MODIFY',\n  'RENAME TO',\n  'RENAME COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'SET SCHEMA',\n  'BEGIN',\n  'CONNECT BY',\n  'DECLARE',\n  'EXCEPT',\n  'EXCEPTION',\n  'LOOP',\n  'START WITH'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  // non-standard joins\n  '{CROSS | OUTER} APPLY'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL]',\n  'ON COMMIT',\n  '{ROWS | RANGE} BETWEEN'\n]);\n\nexport const plsql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['N'] },\n      { quote: \"q''\", prefixes: ['N'] }\n    ],\n    // PL/SQL doesn't actually support escaping of quotes in identifiers,\n    // but for the sake of simpler testing we'll support this anyway\n    // as all other SQL dialects with \"identifiers\" do.\n    identTypes: [`\"\"-qq`],\n    identChars: { rest: '$#' },\n    variableTypes: [{ regex: '&{1,2}[A-Za-z][A-Za-z0-9_$#]*' }],\n    paramTypes: { numbered: [':'], named: [':'] },\n    paramChars: {}, // Empty object used on purpose to not allow $ and # chars as specified in identChars\n    operators: [\n      '**',\n      ':=',\n      '%',\n      '~=',\n      '^=',\n      // '..', // Conflicts with float followed by dot (so \"2..3\" gets parsed as [\"2.\", \".\", \"3\"])\n      '>>',\n      '<<',\n      '=>',\n      '@',\n      '||'\n    ],\n    postProcess\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['@'],\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]) {\n  let previousReservedToken: Token = EOF_TOKEN;\n\n  return tokens.map(token => {\n    // BY [SET]\n    if (isToken.SET(token) && isToken.BY(previousReservedToken)) {\n      return { ...token, type: TokenType.RESERVED_KEYWORD };\n    }\n\n    if (isReserved(token.type)) {\n      previousReservedToken = token;\n    }\n\n    return token;\n  });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://www.postgresql.org/docs/14/functions.html\n  //\n  // https://www.postgresql.org/docs/14/functions-math.html\n  math: [\n    'ABS',\n    'ACOS',\n    'ACOSD',\n    'ACOSH',\n    'ASIN',\n    'ASIND',\n    'ASINH',\n    'ATAN',\n    'ATAN2',\n    'ATAN2D',\n    'ATAND',\n    'ATANH',\n    'CBRT',\n    'CEIL',\n    'CEILING',\n    'COS',\n    'COSD',\n    'COSH',\n    'COT',\n    'COTD',\n    'DEGREES',\n    'DIV',\n    'EXP',\n    'FACTORIAL',\n    'FLOOR',\n    'GCD',\n    'LCM',\n    'LN',\n    'LOG',\n    'LOG10',\n    'MIN_SCALE',\n    'MOD',\n    'PI',\n    'POWER',\n    'RADIANS',\n    'RANDOM',\n    'ROUND',\n    'SCALE',\n    'SETSEED',\n    'SIGN',\n    'SIN',\n    'SIND',\n    'SINH',\n    'SQRT',\n    'TAN',\n    'TAND',\n    'TANH',\n    'TRIM_SCALE',\n    'TRUNC',\n    'WIDTH_BUCKET'\n  ],\n  // https://www.postgresql.org/docs/14/functions-string.html\n  string: [\n    'ABS',\n    'ASCII',\n    'BIT_LENGTH',\n    'BTRIM',\n    'CHARACTER_LENGTH',\n    'CHAR_LENGTH',\n    'CHR',\n    'CONCAT',\n    'CONCAT_WS',\n    'FORMAT',\n    'INITCAP',\n    'LEFT',\n    'LENGTH',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'MD5',\n    'NORMALIZE',\n    'OCTET_LENGTH',\n    'OVERLAY',\n    'PARSE_IDENT',\n    'PG_CLIENT_ENCODING',\n    'POSITION',\n    'QUOTE_IDENT',\n    'QUOTE_LITERAL',\n    'QUOTE_NULLABLE',\n    'REGEXP_MATCH',\n    'REGEXP_MATCHES',\n    'REGEXP_REPLACE',\n    'REGEXP_SPLIT_TO_ARRAY',\n    'REGEXP_SPLIT_TO_TABLE',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'RIGHT',\n    'RPAD',\n    'RTRIM',\n    'SPLIT_PART',\n    'SPRINTF',\n    'STARTS_WITH',\n    'STRING_AGG',\n    'STRING_TO_ARRAY',\n    'STRING_TO_TABLE',\n    'STRPOS',\n    'SUBSTR',\n    'SUBSTRING',\n    'TO_ASCII',\n    'TO_HEX',\n    'TRANSLATE',\n    'TRIM',\n    'UNISTR',\n    'UPPER'\n  ],\n  // https://www.postgresql.org/docs/14/functions-binarystring.html\n  binary: [\n    'BIT_COUNT',\n    'BIT_LENGTH',\n    'BTRIM',\n    'CONVERT',\n    'CONVERT_FROM',\n    'CONVERT_TO',\n    'DECODE',\n    'ENCODE',\n    'GET_BIT',\n    'GET_BYTE',\n    'LENGTH',\n    'LTRIM',\n    'MD5',\n    'OCTET_LENGTH',\n    'OVERLAY',\n    'POSITION',\n    'RTRIM',\n    'SET_BIT',\n    'SET_BYTE',\n    'SHA224',\n    'SHA256',\n    'SHA384',\n    'SHA512',\n    'STRING_AGG',\n    'SUBSTR',\n    'SUBSTRING',\n    'TRIM'\n  ],\n  // https://www.postgresql.org/docs/14/functions-bitstring.html\n  bitstring: [\n    'BIT_COUNT',\n    'BIT_LENGTH',\n    'GET_BIT',\n    'LENGTH',\n    'OCTET_LENGTH',\n    'OVERLAY',\n    'POSITION',\n    'SET_BIT',\n    'SUBSTRING'\n  ],\n  // https://www.postgresql.org/docs/14/functions-matching.html\n  pattern: [\n    'REGEXP_MATCH',\n    'REGEXP_MATCHES',\n    'REGEXP_REPLACE',\n    'REGEXP_SPLIT_TO_ARRAY',\n    'REGEXP_SPLIT_TO_TABLE'\n  ],\n  // https://www.postgresql.org/docs/14/functions-formatting.html\n  datatype: ['TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TO_TIMESTAMP'],\n  // https://www.postgresql.org/docs/14/functions-datetime.html\n  datetime: [\n    // 'AGE',\n    'CLOCK_TIMESTAMP',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'DATE_BIN',\n    'DATE_PART',\n    'DATE_TRUNC',\n    'EXTRACT',\n    'ISFINITE',\n    'JUSTIFY_DAYS',\n    'JUSTIFY_HOURS',\n    'JUSTIFY_INTERVAL',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'MAKE_DATE',\n    'MAKE_INTERVAL',\n    'MAKE_TIME',\n    'MAKE_TIMESTAMP',\n    'MAKE_TIMESTAMPTZ',\n    'NOW',\n    'PG_SLEEP',\n    'PG_SLEEP_FOR',\n    'PG_SLEEP_UNTIL',\n    'STATEMENT_TIMESTAMP',\n    'TIMEOFDAY',\n    'TO_TIMESTAMP',\n    'TRANSACTION_TIMESTAMP'\n  ],\n  // https://www.postgresql.org/docs/14/functions-enum.html\n  enum: ['ENUM_FIRST', 'ENUM_LAST', 'ENUM_RANGE'],\n  // https://www.postgresql.org/docs/14/functions-geometry.html\n  geometry: [\n    'AREA',\n    'BOUND_BOX',\n    'BOX',\n    'CENTER',\n    'CIRCLE',\n    'DIAGONAL',\n    'DIAMETER',\n    'HEIGHT',\n    'ISCLOSED',\n    'ISOPEN',\n    'LENGTH',\n    'LINE',\n    'LSEG',\n    'NPOINTS',\n    'PATH',\n    'PCLOSE',\n    'POINT',\n    'POLYGON',\n    'POPEN',\n    'RADIUS',\n    'SLOPE',\n    'WIDTH'\n  ],\n  // https://www.postgresql.org/docs/14/functions-net.html\n  network: [\n    'ABBREV',\n    'BROADCAST',\n    'FAMILY',\n    'HOST',\n    'HOSTMASK',\n    'INET_MERGE',\n    'INET_SAME_FAMILY',\n    'MACADDR8_SET7BIT',\n    'MASKLEN',\n    'NETMASK',\n    'NETWORK',\n    'SET_MASKLEN',\n    'TEXT',\n    'TRUNC'\n  ],\n  // https://www.postgresql.org/docs/14/functions-textsearch.html\n  textsearch: [\n    'ARRAY_TO_TSVECTOR',\n    'GET_CURRENT_TS_CONFIG',\n    'JSONB_TO_TSVECTOR',\n    'JSON_TO_TSVECTOR',\n    'LENGTH',\n    'NUMNODE',\n    'PHRASETO_TSQUERY',\n    'PLAINTO_TSQUERY',\n    'QUERYTREE',\n    'SETWEIGHT',\n    'STRIP',\n    'TO_TSQUERY',\n    'TO_TSVECTOR',\n    'TSQUERY_PHRASE',\n    'TSVECTOR_TO_ARRAY',\n    'TS_DEBUG',\n    'TS_DELETE',\n    'TS_FILTER',\n    'TS_HEADLINE',\n    'TS_LEXIZE',\n    'TS_PARSE',\n    'TS_RANK',\n    'TS_RANK_CD',\n    'TS_REWRITE',\n    'TS_STAT',\n    'TS_TOKEN_TYPE',\n    'WEBSEARCH_TO_TSQUERY'\n  ],\n  // https://www.postgresql.org/docs/14/functions-uuid.html\n  uuid: ['UUID'],\n  // https://www.postgresql.org/docs/14/functions-xml.html\n  xml: [\n    'CURSOR_TO_XML',\n    'CURSOR_TO_XMLSCHEMA',\n    'DATABASE_TO_XML',\n    'DATABASE_TO_XMLSCHEMA',\n    'DATABASE_TO_XML_AND_XMLSCHEMA',\n    'NEXTVAL',\n    'QUERY_TO_XML',\n    'QUERY_TO_XMLSCHEMA',\n    'QUERY_TO_XML_AND_XMLSCHEMA',\n    'SCHEMA_TO_XML',\n    'SCHEMA_TO_XMLSCHEMA',\n    'SCHEMA_TO_XML_AND_XMLSCHEMA',\n    'STRING',\n    'TABLE_TO_XML',\n    'TABLE_TO_XMLSCHEMA',\n    'TABLE_TO_XML_AND_XMLSCHEMA',\n    'XMLAGG',\n    'XMLCOMMENT',\n    'XMLCONCAT',\n    'XMLELEMENT',\n    'XMLEXISTS',\n    'XMLFOREST',\n    'XMLPARSE',\n    'XMLPI',\n    'XMLROOT',\n    'XMLSERIALIZE',\n    'XMLTABLE',\n    'XML_IS_WELL_FORMED',\n    'XML_IS_WELL_FORMED_CONTENT',\n    'XML_IS_WELL_FORMED_DOCUMENT',\n    'XPATH',\n    'XPATH_EXISTS'\n  ],\n  // https://www.postgresql.org/docs/14/functions-json.html\n  json: [\n    'ARRAY_TO_JSON',\n    'JSONB_AGG',\n    'JSONB_ARRAY_ELEMENTS',\n    'JSONB_ARRAY_ELEMENTS_TEXT',\n    'JSONB_ARRAY_LENGTH',\n    'JSONB_BUILD_ARRAY',\n    'JSONB_BUILD_OBJECT',\n    'JSONB_EACH',\n    'JSONB_EACH_TEXT',\n    'JSONB_EXTRACT_PATH',\n    'JSONB_EXTRACT_PATH_TEXT',\n    'JSONB_INSERT',\n    'JSONB_OBJECT',\n    'JSONB_OBJECT_AGG',\n    'JSONB_OBJECT_KEYS',\n    'JSONB_PATH_EXISTS',\n    'JSONB_PATH_EXISTS_TZ',\n    'JSONB_PATH_MATCH',\n    'JSONB_PATH_MATCH_TZ',\n    'JSONB_PATH_QUERY',\n    'JSONB_PATH_QUERY_ARRAY',\n    'JSONB_PATH_QUERY_ARRAY_TZ',\n    'JSONB_PATH_QUERY_FIRST',\n    'JSONB_PATH_QUERY_FIRST_TZ',\n    'JSONB_PATH_QUERY_TZ',\n    'JSONB_POPULATE_RECORD',\n    'JSONB_POPULATE_RECORDSET',\n    'JSONB_PRETTY',\n    'JSONB_SET',\n    'JSONB_SET_LAX',\n    'JSONB_STRIP_NULLS',\n    'JSONB_TO_RECORD',\n    'JSONB_TO_RECORDSET',\n    'JSONB_TYPEOF',\n    'JSON_AGG',\n    'JSON_ARRAY_ELEMENTS',\n    'JSON_ARRAY_ELEMENTS_TEXT',\n    'JSON_ARRAY_LENGTH',\n    'JSON_BUILD_ARRAY',\n    'JSON_BUILD_OBJECT',\n    'JSON_EACH',\n    'JSON_EACH_TEXT',\n    'JSON_EXTRACT_PATH',\n    'JSON_EXTRACT_PATH_TEXT',\n    'JSON_OBJECT',\n    'JSON_OBJECT_AGG',\n    'JSON_OBJECT_KEYS',\n    'JSON_POPULATE_RECORD',\n    'JSON_POPULATE_RECORDSET',\n    'JSON_STRIP_NULLS',\n    'JSON_TO_RECORD',\n    'JSON_TO_RECORDSET',\n    'JSON_TYPEOF',\n    'ROW_TO_JSON',\n    'TO_JSON',\n    'TO_JSONB',\n    'TO_TIMESTAMP'\n  ],\n  // https://www.postgresql.org/docs/14/functions-sequence.html\n  sequence: ['CURRVAL', 'LASTVAL', 'NEXTVAL', 'SETVAL'],\n  // https://www.postgresql.org/docs/14/functions-conditional.html\n  conditional: [\n    // 'CASE',\n    'COALESCE',\n    'GREATEST',\n    'LEAST',\n    'NULLIF'\n  ],\n  // https://www.postgresql.org/docs/14/functions-array.html\n  array: [\n    'ARRAY_AGG',\n    'ARRAY_APPEND',\n    'ARRAY_CAT',\n    'ARRAY_DIMS',\n    'ARRAY_FILL',\n    'ARRAY_LENGTH',\n    'ARRAY_LOWER',\n    'ARRAY_NDIMS',\n    'ARRAY_POSITION',\n    'ARRAY_POSITIONS',\n    'ARRAY_PREPEND',\n    'ARRAY_REMOVE',\n    'ARRAY_REPLACE',\n    'ARRAY_TO_STRING',\n    'ARRAY_UPPER',\n    'CARDINALITY',\n    'STRING_TO_ARRAY',\n    'TRIM_ARRAY',\n    'UNNEST'\n  ],\n  // https://www.postgresql.org/docs/14/functions-range.html\n  range: [\n    'ISEMPTY',\n    'LOWER',\n    'LOWER_INC',\n    'LOWER_INF',\n    'MULTIRANGE',\n    'RANGE_MERGE',\n    'UPPER',\n    'UPPER_INC',\n    'UPPER_INF'\n  ],\n  // https://www.postgresql.org/docs/14/functions-aggregate.html\n  aggregate: [\n    // 'ANY',\n    'ARRAY_AGG',\n    'AVG',\n    'BIT_AND',\n    'BIT_OR',\n    'BIT_XOR',\n    'BOOL_AND',\n    'BOOL_OR',\n    'COALESCE',\n    'CORR',\n    'COUNT',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'CUME_DIST',\n    'DENSE_RANK',\n    'EVERY',\n    'GROUPING',\n    'JSONB_AGG',\n    'JSONB_OBJECT_AGG',\n    'JSON_AGG',\n    'JSON_OBJECT_AGG',\n    'MAX',\n    'MIN',\n    'MODE',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PERCENT_RANK',\n    'RANGE_AGG',\n    'RANGE_INTERSECT_AGG',\n    'RANK',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_COUNT',\n    'REGR_INTERCEPT',\n    'REGR_R2',\n    'REGR_SLOPE',\n    'REGR_SXX',\n    'REGR_SXY',\n    'REGR_SYY',\n    // 'SOME',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STRING_AGG',\n    'SUM',\n    'TO_JSON',\n    'TO_JSONB',\n    'VARIANCE',\n    'VAR_POP',\n    'VAR_SAMP',\n    'XMLAGG'\n  ],\n  // https://www.postgresql.org/docs/14/functions-window.html\n  window: [\n    'CUME_DIST',\n    'DENSE_RANK',\n    'FIRST_VALUE',\n    'LAG',\n    'LAST_VALUE',\n    'LEAD',\n    'NTH_VALUE',\n    'NTILE',\n    'PERCENT_RANK',\n    'RANK',\n    'ROW_NUMBER'\n  ],\n  // https://www.postgresql.org/docs/14/functions-srf.html\n  set: ['GENERATE_SERIES', 'GENERATE_SUBSCRIPTS'],\n  // https://www.postgresql.org/docs/14/functions-info.html\n  sysInfo: [\n    'ACLDEFAULT',\n    'ACLEXPLODE',\n    'COL_DESCRIPTION',\n    'CURRENT_CATALOG',\n    'CURRENT_DATABASE',\n    'CURRENT_QUERY',\n    'CURRENT_ROLE',\n    'CURRENT_SCHEMA',\n    'CURRENT_SCHEMAS',\n    'CURRENT_USER',\n    'FORMAT_TYPE',\n    'HAS_ANY_COLUMN_PRIVILEGE',\n    'HAS_COLUMN_PRIVILEGE',\n    'HAS_DATABASE_PRIVILEGE',\n    'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE',\n    'HAS_FUNCTION_PRIVILEGE',\n    'HAS_LANGUAGE_PRIVILEGE',\n    'HAS_SCHEMA_PRIVILEGE',\n    'HAS_SEQUENCE_PRIVILEGE',\n    'HAS_SERVER_PRIVILEGE',\n    'HAS_TABLESPACE_PRIVILEGE',\n    'HAS_TABLE_PRIVILEGE',\n    'HAS_TYPE_PRIVILEGE',\n    'INET_CLIENT_ADDR',\n    'INET_CLIENT_PORT',\n    'INET_SERVER_ADDR',\n    'INET_SERVER_PORT',\n    'MAKEACLITEM',\n    'OBJ_DESCRIPTION',\n    'PG_BACKEND_PID',\n    'PG_BLOCKING_PIDS',\n    'PG_COLLATION_IS_VISIBLE',\n    'PG_CONF_LOAD_TIME',\n    'PG_CONTROL_CHECKPOINT',\n    'PG_CONTROL_INIT',\n    'PG_CONTROL_SYSTEM',\n    'PG_CONVERSION_IS_VISIBLE',\n    'PG_CURRENT_LOGFILE',\n    'PG_CURRENT_SNAPSHOT',\n    'PG_CURRENT_XACT_ID',\n    'PG_CURRENT_XACT_ID_IF_ASSIGNED',\n    'PG_DESCRIBE_OBJECT',\n    'PG_FUNCTION_IS_VISIBLE',\n    'PG_GET_CATALOG_FOREIGN_KEYS',\n    'PG_GET_CONSTRAINTDEF',\n    'PG_GET_EXPR',\n    'PG_GET_FUNCTIONDEF',\n    'PG_GET_FUNCTION_ARGUMENTS',\n    'PG_GET_FUNCTION_IDENTITY_ARGUMENTS',\n    'PG_GET_FUNCTION_RESULT',\n    'PG_GET_INDEXDEF',\n    'PG_GET_KEYWORDS',\n    'PG_GET_OBJECT_ADDRESS',\n    'PG_GET_OWNED_SEQUENCE',\n    'PG_GET_RULEDEF',\n    'PG_GET_SERIAL_SEQUENCE',\n    'PG_GET_STATISTICSOBJDEF',\n    'PG_GET_TRIGGERDEF',\n    'PG_GET_USERBYID',\n    'PG_GET_VIEWDEF',\n    'PG_HAS_ROLE',\n    'PG_IDENTIFY_OBJECT',\n    'PG_IDENTIFY_OBJECT_AS_ADDRESS',\n    'PG_INDEXAM_HAS_PROPERTY',\n    'PG_INDEX_COLUMN_HAS_PROPERTY',\n    'PG_INDEX_HAS_PROPERTY',\n    'PG_IS_OTHER_TEMP_SCHEMA',\n    'PG_JIT_AVAILABLE',\n    'PG_LAST_COMMITTED_XACT',\n    'PG_LISTENING_CHANNELS',\n    'PG_MY_TEMP_SCHEMA',\n    'PG_NOTIFICATION_QUEUE_USAGE',\n    'PG_OPCLASS_IS_VISIBLE',\n    'PG_OPERATOR_IS_VISIBLE',\n    'PG_OPFAMILY_IS_VISIBLE',\n    'PG_OPTIONS_TO_TABLE',\n    'PG_POSTMASTER_START_TIME',\n    'PG_SAFE_SNAPSHOT_BLOCKING_PIDS',\n    'PG_SNAPSHOT_XIP',\n    'PG_SNAPSHOT_XMAX',\n    'PG_SNAPSHOT_XMIN',\n    'PG_STATISTICS_OBJ_IS_VISIBLE',\n    'PG_TABLESPACE_DATABASES',\n    'PG_TABLESPACE_LOCATION',\n    'PG_TABLE_IS_VISIBLE',\n    'PG_TRIGGER_DEPTH',\n    'PG_TS_CONFIG_IS_VISIBLE',\n    'PG_TS_DICT_IS_VISIBLE',\n    'PG_TS_PARSER_IS_VISIBLE',\n    'PG_TS_TEMPLATE_IS_VISIBLE',\n    'PG_TYPEOF',\n    'PG_TYPE_IS_VISIBLE',\n    'PG_VISIBLE_IN_SNAPSHOT',\n    'PG_XACT_COMMIT_TIMESTAMP',\n    'PG_XACT_COMMIT_TIMESTAMP_ORIGIN',\n    'PG_XACT_STATUS',\n    'PQSERVERVERSION',\n    'ROW_SECURITY_ACTIVE',\n    'SESSION_USER',\n    'SHOBJ_DESCRIPTION',\n    'TO_REGCLASS',\n    'TO_REGCOLLATION',\n    'TO_REGNAMESPACE',\n    'TO_REGOPER',\n    'TO_REGOPERATOR',\n    'TO_REGPROC',\n    'TO_REGPROCEDURE',\n    'TO_REGROLE',\n    'TO_REGTYPE',\n    'TXID_CURRENT',\n    'TXID_CURRENT_IF_ASSIGNED',\n    'TXID_CURRENT_SNAPSHOT',\n    'TXID_SNAPSHOT_XIP',\n    'TXID_SNAPSHOT_XMAX',\n    'TXID_SNAPSHOT_XMIN',\n    'TXID_STATUS',\n    'TXID_VISIBLE_IN_SNAPSHOT',\n    'USER',\n    'VERSION'\n  ],\n  // https://www.postgresql.org/docs/14/functions-admin.html\n  sysAdmin: [\n    'BRIN_DESUMMARIZE_RANGE',\n    'BRIN_SUMMARIZE_NEW_VALUES',\n    'BRIN_SUMMARIZE_RANGE',\n    'CONVERT_FROM',\n    'CURRENT_SETTING',\n    'GIN_CLEAN_PENDING_LIST',\n    'PG_ADVISORY_LOCK',\n    'PG_ADVISORY_LOCK_SHARED',\n    'PG_ADVISORY_UNLOCK',\n    'PG_ADVISORY_UNLOCK_ALL',\n    'PG_ADVISORY_UNLOCK_SHARED',\n    'PG_ADVISORY_XACT_LOCK',\n    'PG_ADVISORY_XACT_LOCK_SHARED',\n    'PG_BACKUP_START_TIME',\n    'PG_CANCEL_BACKEND',\n    'PG_COLLATION_ACTUAL_VERSION',\n    'PG_COLUMN_COMPRESSION',\n    'PG_COLUMN_SIZE',\n    'PG_COPY_LOGICAL_REPLICATION_SLOT',\n    'PG_COPY_PHYSICAL_REPLICATION_SLOT',\n    'PG_CREATE_LOGICAL_REPLICATION_SLOT',\n    'PG_CREATE_PHYSICAL_REPLICATION_SLOT',\n    'PG_CREATE_RESTORE_POINT',\n    'PG_CURRENT_WAL_FLUSH_LSN',\n    'PG_CURRENT_WAL_INSERT_LSN',\n    'PG_CURRENT_WAL_LSN',\n    'PG_DATABASE_SIZE',\n    'PG_DROP_REPLICATION_SLOT',\n    'PG_EXPORT_SNAPSHOT',\n    'PG_FILENODE_RELATION',\n    'PG_GET_WAL_REPLAY_PAUSE_STATE',\n    'PG_IMPORT_SYSTEM_COLLATIONS',\n    'PG_INDEXES_SIZE',\n    'PG_IS_IN_BACKUP',\n    'PG_IS_IN_RECOVERY',\n    'PG_IS_WAL_REPLAY_PAUSED',\n    'PG_LAST_WAL_RECEIVE_LSN',\n    'PG_LAST_WAL_REPLAY_LSN',\n    'PG_LAST_XACT_REPLAY_TIMESTAMP',\n    'PG_LOGICAL_EMIT_MESSAGE',\n    'PG_LOGICAL_SLOT_GET_BINARY_CHANGES',\n    'PG_LOGICAL_SLOT_GET_CHANGES',\n    'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES',\n    'PG_LOGICAL_SLOT_PEEK_CHANGES',\n    'PG_LOG_BACKEND_MEMORY_CONTEXTS',\n    'PG_LS_ARCHIVE_STATUSDIR',\n    'PG_LS_DIR',\n    'PG_LS_LOGDIR',\n    'PG_LS_TMPDIR',\n    'PG_LS_WALDIR',\n    'PG_PARTITION_ANCESTORS',\n    'PG_PARTITION_ROOT',\n    'PG_PARTITION_TREE',\n    'PG_PROMOTE',\n    'PG_READ_BINARY_FILE',\n    'PG_READ_FILE',\n    'PG_RELATION_FILENODE',\n    'PG_RELATION_FILEPATH',\n    'PG_RELATION_SIZE',\n    'PG_RELOAD_CONF',\n    'PG_REPLICATION_ORIGIN_ADVANCE',\n    'PG_REPLICATION_ORIGIN_CREATE',\n    'PG_REPLICATION_ORIGIN_DROP',\n    'PG_REPLICATION_ORIGIN_OID',\n    'PG_REPLICATION_ORIGIN_PROGRESS',\n    'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP',\n    'PG_REPLICATION_ORIGIN_SESSION_PROGRESS',\n    'PG_REPLICATION_ORIGIN_SESSION_RESET',\n    'PG_REPLICATION_ORIGIN_SESSION_SETUP',\n    'PG_REPLICATION_ORIGIN_XACT_RESET',\n    'PG_REPLICATION_ORIGIN_XACT_SETUP',\n    'PG_REPLICATION_SLOT_ADVANCE',\n    'PG_ROTATE_LOGFILE',\n    'PG_SIZE_BYTES',\n    'PG_SIZE_PRETTY',\n    'PG_START_BACKUP',\n    'PG_STAT_FILE',\n    'PG_STOP_BACKUP',\n    'PG_SWITCH_WAL',\n    'PG_TABLESPACE_SIZE',\n    'PG_TABLE_SIZE',\n    'PG_TERMINATE_BACKEND',\n    'PG_TOTAL_RELATION_SIZE',\n    'PG_TRY_ADVISORY_LOCK',\n    'PG_TRY_ADVISORY_LOCK_SHARED',\n    'PG_TRY_ADVISORY_XACT_LOCK',\n    'PG_TRY_ADVISORY_XACT_LOCK_SHARED',\n    'PG_WALFILE_NAME',\n    'PG_WALFILE_NAME_OFFSET',\n    'PG_WAL_LSN_DIFF',\n    'PG_WAL_REPLAY_PAUSE',\n    'PG_WAL_REPLAY_RESUME',\n    'SET_CONFIG'\n  ],\n  // https://www.postgresql.org/docs/14/functions-trigger.html\n  trigger: [\n    'SUPPRESS_REDUNDANT_UPDATES_TRIGGER',\n    'TSVECTOR_UPDATE_TRIGGER',\n    'TSVECTOR_UPDATE_TRIGGER_COLUMN'\n  ],\n  // https://www.postgresql.org/docs/14/functions-event-triggers.html\n  eventTrigger: [\n    'PG_EVENT_TRIGGER_DDL_COMMANDS',\n    'PG_EVENT_TRIGGER_DROPPED_OBJECTS',\n    'PG_EVENT_TRIGGER_TABLE_REWRITE_OID',\n    'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON',\n    'PG_GET_OBJECT_ADDRESS'\n  ],\n  // https://www.postgresql.org/docs/14/functions-statistics.html\n  stats: ['PG_MCV_LIST_ITEMS'],\n  cast: ['CAST'],\n  // Parameterized data types\n  // https://www.postgresql.org/docs/current/datatype.html\n  dataTypes: [\n    'BIT',\n    'BIT VARYING',\n    'CHARACTER',\n    'CHARACTER VARYING',\n    'VARCHAR',\n    'CHAR',\n    'DECIMAL',\n    'NUMERIC',\n    'TIME',\n    'TIMESTAMP',\n    'ENUM'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://www.postgresql.org/docs/14/sql-keywords-appendix.html\n  all: [\n    'ABORT',\n    'ABSOLUTE',\n    'ACCESS',\n    'ACTION',\n    'ADD',\n    'ADMIN',\n    'AFTER',\n    'AGGREGATE',\n    'ALL', // reserved\n    'ALSO',\n    'ALTER',\n    'ALWAYS',\n    'ANALYSE', // reserved\n    'ANALYZE', // reserved\n    'AND', // reserved\n    'ANY', // reserved\n    'ARRAY', // reserved, requires AS\n    'AS', // reserved, requires AS\n    'ASC', // reserved\n    'ASENSITIVE',\n    'ASSERTION',\n    'ASSIGNMENT',\n    'ASYMMETRIC', // reserved\n    'AT',\n    'ATOMIC',\n    'ATTACH',\n    'ATTRIBUTE',\n    'AUTHORIZATION', // reserved (can be function or type)\n    'BACKWARD',\n    'BEFORE',\n    'BEGIN',\n    'BETWEEN', // (cannot be function or type)\n    'BIGINT', // (cannot be function or type)\n    'BINARY', // reserved (can be function or type)\n    'BIT', // (cannot be function or type)\n    'BOOLEAN', // (cannot be function or type)\n    'BOTH', // reserved\n    'BREADTH',\n    'BY',\n    'CACHE',\n    'CALL',\n    'CALLED',\n    'CASCADE',\n    'CASCADED',\n    'CASE', // reserved\n    'CAST', // reserved\n    'CATALOG',\n    'CHAIN',\n    'CHAR', // (cannot be function or type), requires AS\n    'CHARACTER', // (cannot be function or type), requires AS\n    'CHARACTERISTICS',\n    'CHECK', // reserved\n    'CHECKPOINT',\n    'CLASS',\n    'CLOSE',\n    'CLUSTER',\n    'COALESCE', // (cannot be function or type)\n    'COLLATE', // reserved\n    'COLLATION', // reserved (can be function or type)\n    'COLUMN', // reserved\n    'COLUMNS',\n    'COMMENT',\n    'COMMENTS',\n    'COMMIT',\n    'COMMITTED',\n    'COMPRESSION',\n    'CONCURRENTLY', // reserved (can be function or type)\n    'CONFIGURATION',\n    'CONFLICT',\n    'CONNECTION',\n    'CONSTRAINT', // reserved\n    'CONSTRAINTS',\n    'CONTENT',\n    'CONTINUE',\n    'CONVERSION',\n    'COPY',\n    'COST',\n    'CREATE', // reserved, requires AS\n    'CROSS', // reserved (can be function or type)\n    'CSV',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_CATALOG', // reserved\n    'CURRENT_DATE', // reserved\n    'CURRENT_ROLE', // reserved\n    'CURRENT_SCHEMA', // reserved (can be function or type)\n    'CURRENT_TIME', // reserved\n    'CURRENT_TIMESTAMP', // reserved\n    'CURRENT_USER', // reserved\n    'CURSOR',\n    'CYCLE',\n    'DATA',\n    'DATABASE',\n    'DAY', // requires AS\n    'DEALLOCATE',\n    'DEC', // (cannot be function or type)\n    'DECIMAL', // (cannot be function or type)\n    'DECLARE',\n    'DEFAULT', // reserved\n    'DEFAULTS',\n    'DEFERRABLE', // reserved\n    'DEFERRED',\n    'DEFINER',\n    'DELETE',\n    'DELIMITER',\n    'DELIMITERS',\n    'DEPENDS',\n    'DEPTH',\n    'DESC', // reserved\n    'DETACH',\n    'DICTIONARY',\n    'DISABLE',\n    'DISCARD',\n    'DISTINCT', // reserved\n    'DO', // reserved\n    'DOCUMENT',\n    'DOMAIN',\n    'DOUBLE',\n    'DROP',\n    'EACH',\n    'ELSE', // reserved\n    'ENABLE',\n    'ENCODING',\n    'ENCRYPTED',\n    'END', // reserved\n    'ENUM',\n    'ESCAPE',\n    'EVENT',\n    'EXCEPT', // reserved, requires AS\n    'EXCLUDE',\n    'EXCLUDING',\n    'EXCLUSIVE',\n    'EXECUTE',\n    'EXISTS', // (cannot be function or type)\n    'EXPLAIN',\n    'EXPRESSION',\n    'EXTENSION',\n    'EXTERNAL',\n    'EXTRACT', // (cannot be function or type)\n    'FALSE', // reserved\n    'FAMILY',\n    'FETCH', // reserved, requires AS\n    'FILTER', // requires AS\n    'FINALIZE',\n    'FIRST',\n    'FLOAT', // (cannot be function or type)\n    'FOLLOWING',\n    'FOR', // reserved, requires AS\n    'FORCE',\n    'FOREIGN', // reserved\n    'FORWARD',\n    'FREEZE', // reserved (can be function or type)\n    'FROM', // reserved, requires AS\n    'FULL', // reserved (can be function or type)\n    'FUNCTION',\n    'FUNCTIONS',\n    'GENERATED',\n    'GLOBAL',\n    'GRANT', // reserved, requires AS\n    'GRANTED',\n    'GREATEST', // (cannot be function or type)\n    'GROUP', // reserved, requires AS\n    'GROUPING', // (cannot be function or type)\n    'GROUPS',\n    'HANDLER',\n    'HAVING', // reserved, requires AS\n    'HEADER',\n    'HOLD',\n    'HOUR', // requires AS\n    'IDENTITY',\n    'IF',\n    'ILIKE', // reserved (can be function or type)\n    'IMMEDIATE',\n    'IMMUTABLE',\n    'IMPLICIT',\n    'IMPORT',\n    'IN', // reserved\n    'INCLUDE',\n    'INCLUDING',\n    'INCREMENT',\n    'INDEX',\n    'INDEXES',\n    'INHERIT',\n    'INHERITS',\n    'INITIALLY', // reserved\n    'INLINE',\n    'INNER', // reserved (can be function or type)\n    'INOUT', // (cannot be function or type)\n    'INPUT',\n    'INSENSITIVE',\n    'INSERT',\n    'INSTEAD',\n    'INT', // (cannot be function or type)\n    'INTEGER', // (cannot be function or type)\n    'INTERSECT', // reserved, requires AS\n    'INTERVAL', // (cannot be function or type)\n    'INTO', // reserved, requires AS\n    'INVOKER',\n    'IS', // reserved (can be function or type)\n    'ISNULL', // reserved (can be function or type), requires AS\n    'ISOLATION',\n    'JOIN', // reserved (can be function or type)\n    'KEY',\n    'LABEL',\n    'LANGUAGE',\n    'LARGE',\n    'LAST',\n    'LATERAL', // reserved\n    'LEADING', // reserved\n    'LEAKPROOF',\n    'LEAST', // (cannot be function or type)\n    'LEFT', // reserved (can be function or type)\n    'LEVEL',\n    'LIKE', // reserved (can be function or type)\n    'LIMIT', // reserved, requires AS\n    'LISTEN',\n    'LOAD',\n    'LOCAL',\n    'LOCALTIME', // reserved\n    'LOCALTIMESTAMP', // reserved\n    'LOCATION',\n    'LOCK',\n    'LOCKED',\n    'LOGGED',\n    'MAPPING',\n    'MATCH',\n    'MATERIALIZED',\n    'MAXVALUE',\n    'METHOD',\n    'MINUTE', // requires AS\n    'MINVALUE',\n    'MODE',\n    'MONTH', // requires AS\n    'MOVE',\n    'NAME',\n    'NAMES',\n    'NATIONAL', // (cannot be function or type)\n    'NATURAL', // reserved (can be function or type)\n    'NCHAR', // (cannot be function or type)\n    'NEW',\n    'NEXT',\n    'NFC',\n    'NFD',\n    'NFKC',\n    'NFKD',\n    'NO',\n    'NONE', // (cannot be function or type)\n    'NORMALIZE', // (cannot be function or type)\n    'NORMALIZED',\n    'NOT', // reserved\n    'NOTHING',\n    'NOTIFY',\n    'NOTNULL', // reserved (can be function or type), requires AS\n    'NOWAIT',\n    'NULL', // reserved\n    'NULLIF', // (cannot be function or type)\n    'NULLS',\n    'NUMERIC', // (cannot be function or type)\n    'OBJECT',\n    'OF',\n    'OFF',\n    'OFFSET', // reserved, requires AS\n    'OIDS',\n    'OLD',\n    'ON', // reserved, requires AS\n    'ONLY', // reserved\n    'OPERATOR',\n    'OPTION',\n    'OPTIONS',\n    'OR', // reserved\n    'ORDER', // reserved, requires AS\n    'ORDINALITY',\n    'OTHERS',\n    'OUT', // (cannot be function or type)\n    'OUTER', // reserved (can be function or type)\n    'OVER', // requires AS\n    'OVERLAPS', // reserved (can be function or type), requires AS\n    'OVERLAY', // (cannot be function or type)\n    'OVERRIDING',\n    'OWNED',\n    'OWNER',\n    'PARALLEL',\n    'PARSER',\n    'PARTIAL',\n    'PARTITION',\n    'PASSING',\n    'PASSWORD',\n    'PLACING', // reserved\n    'PLANS',\n    'POLICY',\n    'POSITION', // (cannot be function or type)\n    'PRECEDING',\n    'PRECISION', // (cannot be function or type), requires AS\n    'PREPARE',\n    'PREPARED',\n    'PRESERVE',\n    'PRIMARY', // reserved\n    'PRIOR',\n    'PRIVILEGES',\n    'PROCEDURAL',\n    'PROCEDURE',\n    'PROCEDURES',\n    'PROGRAM',\n    'PUBLICATION',\n    'QUOTE',\n    'RANGE',\n    'READ',\n    'REAL', // (cannot be function or type)\n    'REASSIGN',\n    'RECHECK',\n    'RECURSIVE',\n    'REF',\n    'REFERENCES', // reserved\n    'REFERENCING',\n    'REFRESH',\n    'REINDEX',\n    'RELATIVE',\n    'RELEASE',\n    'RENAME',\n    'REPEATABLE',\n    'REPLACE',\n    'REPLICA',\n    'RESET',\n    'RESTART',\n    'RESTRICT',\n    'RETURN',\n    'RETURNING', // reserved, requires AS\n    'RETURNS',\n    'REVOKE',\n    'RIGHT', // reserved (can be function or type)\n    'ROLE',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROUTINE',\n    'ROUTINES',\n    'ROW', // (cannot be function or type)\n    'ROWS',\n    'RULE',\n    'SAVEPOINT',\n    'SCHEMA',\n    'SCHEMAS',\n    'SCROLL',\n    'SEARCH',\n    'SECOND', // requires AS\n    'SECURITY',\n    'SELECT', // reserved\n    'SEQUENCE',\n    'SEQUENCES',\n    'SERIALIZABLE',\n    'SERVER',\n    'SESSION',\n    'SESSION_USER', // reserved\n    'SET',\n    'SETOF', // (cannot be function or type)\n    'SETS',\n    'SHARE',\n    'SHOW',\n    'SIMILAR', // reserved (can be function or type)\n    'SIMPLE',\n    'SKIP',\n    'SMALLINT', // (cannot be function or type)\n    'SNAPSHOT',\n    'SOME', // reserved\n    'SQL',\n    'STABLE',\n    'STANDALONE',\n    'START',\n    'STATEMENT',\n    'STATISTICS',\n    'STDIN',\n    'STDOUT',\n    'STORAGE',\n    'STORED',\n    'STRICT',\n    'STRIP',\n    'SUBSCRIPTION',\n    'SUBSTRING', // (cannot be function or type)\n    'SUPPORT',\n    'SYMMETRIC', // reserved\n    'SYSID',\n    'SYSTEM',\n    'TABLE', // reserved\n    'TABLES',\n    'TABLESAMPLE', // reserved (can be function or type)\n    'TABLESPACE',\n    'TEMP',\n    'TEMPLATE',\n    'TEMPORARY',\n    'TEXT',\n    'THEN', // reserved\n    'TIES',\n    'TIME', // (cannot be function or type)\n    'TIMESTAMP', // (cannot be function or type)\n    'TO', // reserved, requires AS\n    'TRAILING', // reserved\n    'TRANSACTION',\n    'TRANSFORM',\n    'TREAT', // (cannot be function or type)\n    'TRIGGER',\n    'TRIM', // (cannot be function or type)\n    'TRUE', // reserved\n    'TRUNCATE',\n    'TRUSTED',\n    'TYPE',\n    'TYPES',\n    'UESCAPE',\n    'UNBOUNDED',\n    'UNCOMMITTED',\n    'UNENCRYPTED',\n    'UNION', // reserved, requires AS\n    'UNIQUE', // reserved\n    'UNKNOWN',\n    'UNLISTEN',\n    'UNLOGGED',\n    'UNTIL',\n    'UPDATE',\n    'USER', // reserved\n    'USING', // reserved\n    'VACUUM',\n    'VALID',\n    'VALIDATE',\n    'VALIDATOR',\n    'VALUE',\n    'VALUES', // (cannot be function or type)\n    'VARCHAR', // (cannot be function or type)\n    'VARIADIC', // reserved\n    'VARYING', // requires AS\n    'VERBOSE', // reserved (can be function or type)\n    'VERSION',\n    'VIEW',\n    'VIEWS',\n    'VOLATILE',\n    'WHEN', // reserved\n    'WHERE', // reserved, requires AS\n    'WHITESPACE',\n    'WINDOW', // reserved, requires AS\n    'WITH', // reserved, requires AS\n    'WITHIN', // requires AS\n    'WITHOUT', // requires AS\n    'WORK',\n    'WRAPPER',\n    'WRITE',\n    'XML',\n    'XMLATTRIBUTES', // (cannot be function or type)\n    'XMLCONCAT', // (cannot be function or type)\n    'XMLELEMENT', // (cannot be function or type)\n    'XMLEXISTS', // (cannot be function or type)\n    'XMLFOREST', // (cannot be function or type)\n    'XMLNAMESPACES', // (cannot be function or type)\n    'XMLPARSE', // (cannot be function or type)\n    'XMLPI', // (cannot be function or type)\n    'XMLROOT', // (cannot be function or type)\n    'XMLSERIALIZE', // (cannot be function or type)\n    'XMLTABLE', // (cannot be function or type)\n    'YEAR', // requires AS\n    'YES',\n    'ZONE'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './postgresql.functions.js';\nimport { keywords } from './postgresql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW',\n  'CREATE MATERIALIZED VIEW [IF NOT EXISTS]',\n  'CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]',\n  // other\n  'RETURNING'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE [ONLY]',\n  'WHERE CURRENT OF',\n  // - delete:\n  'DELETE FROM [ONLY]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS] [ONLY]',\n  'ALTER TABLE ALL IN TABLESPACE',\n  'RENAME [COLUMN]',\n  'RENAME TO',\n  'ADD [COLUMN] [IF NOT EXISTS]',\n  'DROP [COLUMN] [IF EXISTS]',\n  'ALTER [COLUMN]',\n  '[SET DATA] TYPE', // for alter column\n  '{SET | DROP} DEFAULT', // for alter column\n  '{SET | DROP} NOT NULL', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE] [ONLY]',\n  // other\n  'SET SCHEMA',\n  'AFTER',\n  // https://www.postgresql.org/docs/14/sql-commands.html\n  'ABORT',\n  'ALTER AGGREGATE',\n  'ALTER COLLATION',\n  'ALTER CONVERSION',\n  'ALTER DATABASE',\n  'ALTER DEFAULT PRIVILEGES',\n  'ALTER DOMAIN',\n  'ALTER EVENT TRIGGER',\n  'ALTER EXTENSION',\n  'ALTER FOREIGN DATA WRAPPER',\n  'ALTER FOREIGN TABLE',\n  'ALTER FUNCTION',\n  'ALTER GROUP',\n  'ALTER INDEX',\n  'ALTER LANGUAGE',\n  'ALTER LARGE OBJECT',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER OPERATOR',\n  'ALTER OPERATOR CLASS',\n  'ALTER OPERATOR FAMILY',\n  'ALTER POLICY',\n  'ALTER PROCEDURE',\n  'ALTER PUBLICATION',\n  'ALTER ROLE',\n  'ALTER ROUTINE',\n  'ALTER RULE',\n  'ALTER SCHEMA',\n  'ALTER SEQUENCE',\n  'ALTER SERVER',\n  'ALTER STATISTICS',\n  'ALTER SUBSCRIPTION',\n  'ALTER SYSTEM',\n  'ALTER TABLESPACE',\n  'ALTER TEXT SEARCH CONFIGURATION',\n  'ALTER TEXT SEARCH DICTIONARY',\n  'ALTER TEXT SEARCH PARSER',\n  'ALTER TEXT SEARCH TEMPLATE',\n  'ALTER TRIGGER',\n  'ALTER TYPE',\n  'ALTER USER',\n  'ALTER USER MAPPING',\n  'ALTER VIEW',\n  'ANALYZE',\n  'BEGIN',\n  'CALL',\n  'CHECKPOINT',\n  'CLOSE',\n  'CLUSTER',\n  'COMMENT',\n  'COMMIT',\n  'COMMIT PREPARED',\n  'COPY',\n  'CREATE ACCESS METHOD',\n  'CREATE AGGREGATE',\n  'CREATE CAST',\n  'CREATE COLLATION',\n  'CREATE CONVERSION',\n  'CREATE DATABASE',\n  'CREATE DOMAIN',\n  'CREATE EVENT TRIGGER',\n  'CREATE EXTENSION',\n  'CREATE FOREIGN DATA WRAPPER',\n  'CREATE FOREIGN TABLE',\n  'CREATE FUNCTION',\n  'CREATE GROUP',\n  'CREATE INDEX',\n  'CREATE LANGUAGE',\n  'CREATE OPERATOR',\n  'CREATE OPERATOR CLASS',\n  'CREATE OPERATOR FAMILY',\n  'CREATE POLICY',\n  'CREATE PROCEDURE',\n  'CREATE PUBLICATION',\n  'CREATE ROLE',\n  'CREATE RULE',\n  'CREATE SCHEMA',\n  'CREATE SEQUENCE',\n  'CREATE SERVER',\n  'CREATE STATISTICS',\n  'CREATE SUBSCRIPTION',\n  'CREATE TABLESPACE',\n  'CREATE TEXT SEARCH CONFIGURATION',\n  'CREATE TEXT SEARCH DICTIONARY',\n  'CREATE TEXT SEARCH PARSER',\n  'CREATE TEXT SEARCH TEMPLATE',\n  'CREATE TRANSFORM',\n  'CREATE TRIGGER',\n  'CREATE TYPE',\n  'CREATE USER',\n  'CREATE USER MAPPING',\n  'DEALLOCATE',\n  'DECLARE',\n  'DISCARD',\n  'DO',\n  'DROP ACCESS METHOD',\n  'DROP AGGREGATE',\n  'DROP CAST',\n  'DROP COLLATION',\n  'DROP CONVERSION',\n  'DROP DATABASE',\n  'DROP DOMAIN',\n  'DROP EVENT TRIGGER',\n  'DROP EXTENSION',\n  'DROP FOREIGN DATA WRAPPER',\n  'DROP FOREIGN TABLE',\n  'DROP FUNCTION',\n  'DROP GROUP',\n  'DROP INDEX',\n  'DROP LANGUAGE',\n  'DROP MATERIALIZED VIEW',\n  'DROP OPERATOR',\n  'DROP OPERATOR CLASS',\n  'DROP OPERATOR FAMILY',\n  'DROP OWNED',\n  'DROP POLICY',\n  'DROP PROCEDURE',\n  'DROP PUBLICATION',\n  'DROP ROLE',\n  'DROP ROUTINE',\n  'DROP RULE',\n  'DROP SCHEMA',\n  'DROP SEQUENCE',\n  'DROP SERVER',\n  'DROP STATISTICS',\n  'DROP SUBSCRIPTION',\n  'DROP TABLESPACE',\n  'DROP TEXT SEARCH CONFIGURATION',\n  'DROP TEXT SEARCH DICTIONARY',\n  'DROP TEXT SEARCH PARSER',\n  'DROP TEXT SEARCH TEMPLATE',\n  'DROP TRANSFORM',\n  'DROP TRIGGER',\n  'DROP TYPE',\n  'DROP USER',\n  'DROP USER MAPPING',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FETCH',\n  'GRANT',\n  'IMPORT FOREIGN SCHEMA',\n  'LISTEN',\n  'LOAD',\n  'LOCK',\n  'MOVE',\n  'NOTIFY',\n  'PREPARE',\n  'PREPARE TRANSACTION',\n  'REASSIGN OWNED',\n  'REFRESH MATERIALIZED VIEW',\n  'REINDEX',\n  'RELEASE SAVEPOINT',\n  'RESET',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK PREPARED',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SECURITY LABEL',\n  'SELECT INTO',\n  'SET CONSTRAINTS',\n  'SET ROLE',\n  'SET SESSION AUTHORIZATION',\n  'SET TRANSACTION',\n  'SHOW',\n  'START TRANSACTION',\n  'UNLISTEN',\n  'VACUUM'\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]'\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE | GROUPS} BETWEEN',\n  // https://www.postgresql.org/docs/current/datatype-datetime.html\n  '{TIMESTAMP | TIME} {WITH | WITHOUT} TIME ZONE'\n]);\n\n// https://www.postgresql.org/docs/14/index.html\nexport const postgresql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    nestedBlockComments: true,\n    extraParens: ['[]'],\n    stringTypes: [\n      '$$',\n      { quote: \"''-qq\", prefixes: ['U&'] },\n      { quote: \"''-bs\", prefixes: ['E'], requirePrefix: true },\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true }\n    ],\n    identTypes: [{ quote: '\"\"-qq', prefixes: ['U&'] }],\n    identChars: { rest: '$' },\n    paramTypes: { numbered: ['$'] },\n    operators: [\n      // Arithmetic\n      '%',\n      '^',\n      '|/',\n      '||/',\n      '@',\n      // Assignment\n      ':=',\n      // Bitwise\n      '&',\n      '|',\n      '#',\n      '~',\n      '<<',\n      '>>',\n      // Byte comparison\n      '~>~',\n      '~<~',\n      '~>=~',\n      '~<=~',\n      // Geometric\n      '@-@',\n      '@@',\n      '##',\n      '<->',\n      '&&',\n      '&<',\n      '&>',\n      '<<|',\n      '&<|',\n      '|>>',\n      '|&>',\n      '<^',\n      '^>',\n      '?#',\n      '?-',\n      '?|',\n      '?-|',\n      '?||',\n      '@>',\n      '<@',\n      '~=',\n      // JSON\n      '?',\n      '@?',\n      '?&',\n      '->',\n      '->>',\n      '#>',\n      '#>>',\n      '#-',\n      // Named function params\n      '=>',\n      // Network address\n      '>>=',\n      '<<=',\n      // Pattern matching\n      '~~',\n      '~~*',\n      '!~~',\n      '!~~*',\n      // POSIX RegExp\n      '~',\n      '~*',\n      '!~',\n      '!~*',\n      // Range/multirange\n      '-|-',\n      // String concatenation\n      '||',\n      // Text search\n      '@@@',\n      '!!',\n      // Trigram/trigraph\n      '<%',\n      '%>',\n      '<<%',\n      '%>>',\n      '<<->',\n      '<->>',\n      '<<<->',\n      '<->>>',\n      // Type cast\n      '::'\n    ]\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html\n  aggregate: [\n    'ANY_VALUE',\n    'APPROXIMATE PERCENTILE_DISC',\n    'AVG',\n    'COUNT',\n    'LISTAGG',\n    'MAX',\n    'MEDIAN',\n    'MIN',\n    'PERCENTILE_CONT',\n    'STDDEV_SAMP',\n    'STDDEV_POP',\n    'SUM',\n    'VAR_SAMP',\n    'VAR_POP'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html\n  array: ['array', 'array_concat', 'array_flatten', 'get_array_length', 'split_to_array', 'subarray'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html\n  bitwise: ['BIT_AND', 'BIT_OR', 'BOOL_AND', 'BOOL_OR'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html\n  conditional: ['COALESCE', 'DECODE', 'GREATEST', 'LEAST', 'NVL', 'NVL2', 'NULLIF'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html\n  dateTime: [\n    'ADD_MONTHS',\n    'AT TIME ZONE',\n    'CONVERT_TIMEZONE',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'DATE_CMP',\n    'DATE_CMP_TIMESTAMP',\n    'DATE_CMP_TIMESTAMPTZ',\n    'DATE_PART_YEAR',\n    'DATEADD',\n    'DATEDIFF',\n    'DATE_PART',\n    'DATE_TRUNC',\n    'EXTRACT',\n    'GETDATE',\n    'INTERVAL_CMP',\n    'LAST_DAY',\n    'MONTHS_BETWEEN',\n    'NEXT_DAY',\n    'SYSDATE',\n    'TIMEOFDAY',\n    'TIMESTAMP_CMP',\n    'TIMESTAMP_CMP_DATE',\n    'TIMESTAMP_CMP_TIMESTAMPTZ',\n    'TIMESTAMPTZ_CMP',\n    'TIMESTAMPTZ_CMP_DATE',\n    'TIMESTAMPTZ_CMP_TIMESTAMP',\n    'TIMEZONE',\n    'TO_TIMESTAMP',\n    'TRUNC'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html\n  spatial: [\n    'AddBBox',\n    'DropBBox',\n    'GeometryType',\n    'ST_AddPoint',\n    'ST_Angle',\n    'ST_Area',\n    'ST_AsBinary',\n    'ST_AsEWKB',\n    'ST_AsEWKT',\n    'ST_AsGeoJSON',\n    'ST_AsText',\n    'ST_Azimuth',\n    'ST_Boundary',\n    'ST_Collect',\n    'ST_Contains',\n    'ST_ContainsProperly',\n    'ST_ConvexHull',\n    'ST_CoveredBy',\n    'ST_Covers',\n    'ST_Crosses',\n    'ST_Dimension',\n    'ST_Disjoint',\n    'ST_Distance',\n    'ST_DistanceSphere',\n    'ST_DWithin',\n    'ST_EndPoint',\n    'ST_Envelope',\n    'ST_Equals',\n    'ST_ExteriorRing',\n    'ST_Force2D',\n    'ST_Force3D',\n    'ST_Force3DM',\n    'ST_Force3DZ',\n    'ST_Force4D',\n    'ST_GeometryN',\n    'ST_GeometryType',\n    'ST_GeomFromEWKB',\n    'ST_GeomFromEWKT',\n    'ST_GeomFromText',\n    'ST_GeomFromWKB',\n    'ST_InteriorRingN',\n    'ST_Intersects',\n    'ST_IsPolygonCCW',\n    'ST_IsPolygonCW',\n    'ST_IsClosed',\n    'ST_IsCollection',\n    'ST_IsEmpty',\n    'ST_IsSimple',\n    'ST_IsValid',\n    'ST_Length',\n    'ST_LengthSphere',\n    'ST_Length2D',\n    'ST_LineFromMultiPoint',\n    'ST_LineInterpolatePoint',\n    'ST_M',\n    'ST_MakeEnvelope',\n    'ST_MakeLine',\n    'ST_MakePoint',\n    'ST_MakePolygon',\n    'ST_MemSize',\n    'ST_MMax',\n    'ST_MMin',\n    'ST_Multi',\n    'ST_NDims',\n    'ST_NPoints',\n    'ST_NRings',\n    'ST_NumGeometries',\n    'ST_NumInteriorRings',\n    'ST_NumPoints',\n    'ST_Perimeter',\n    'ST_Perimeter2D',\n    'ST_Point',\n    'ST_PointN',\n    'ST_Points',\n    'ST_Polygon',\n    'ST_RemovePoint',\n    'ST_Reverse',\n    'ST_SetPoint',\n    'ST_SetSRID',\n    'ST_Simplify',\n    'ST_SRID',\n    'ST_StartPoint',\n    'ST_Touches',\n    'ST_Within',\n    'ST_X',\n    'ST_XMax',\n    'ST_XMin',\n    'ST_Y',\n    'ST_YMax',\n    'ST_YMin',\n    'ST_Z',\n    'ST_ZMax',\n    'ST_ZMin',\n    'SupportsBBox'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html\n  hash: ['CHECKSUM', 'FUNC_SHA1', 'FNV_HASH', 'MD5', 'SHA', 'SHA1', 'SHA2'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html\n  hyperLogLog: ['HLL', 'HLL_CREATE_SKETCH', 'HLL_CARDINALITY', 'HLL_COMBINE'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html\n  json: [\n    'IS_VALID_JSON',\n    'IS_VALID_JSON_ARRAY',\n    'JSON_ARRAY_LENGTH',\n    'JSON_EXTRACT_ARRAY_ELEMENT_TEXT',\n    'JSON_EXTRACT_PATH_TEXT',\n    'JSON_PARSE',\n    'JSON_SERIALIZE'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html\n  math: [\n    'ABS',\n    'ACOS',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'CBRT',\n    'CEILING',\n    'CEIL',\n    'COS',\n    'COT',\n    'DEGREES',\n    'DEXP',\n    'DLOG1',\n    'DLOG10',\n    'EXP',\n    'FLOOR',\n    'LN',\n    'LOG',\n    'MOD',\n    'PI',\n    'POWER',\n    'RADIANS',\n    'RANDOM',\n    'ROUND',\n    'SIN',\n    'SIGN',\n    'SQRT',\n    'TAN',\n    'TO_HEX',\n    'TRUNC'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html\n  machineLearning: ['EXPLAIN_MODEL'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html\n  string: [\n    'ASCII',\n    'BPCHARCMP',\n    'BTRIM',\n    'BTTEXT_PATTERN_CMP',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'CHARINDEX',\n    'CHR',\n    'COLLATE',\n    'CONCAT',\n    'CRC32',\n    'DIFFERENCE',\n    'INITCAP',\n    'LEFT',\n    'RIGHT',\n    'LEN',\n    'LENGTH',\n    'LOWER',\n    'LPAD',\n    'RPAD',\n    'LTRIM',\n    'OCTETINDEX',\n    'OCTET_LENGTH',\n    'POSITION',\n    'QUOTE_IDENT',\n    'QUOTE_LITERAL',\n    'REGEXP_COUNT',\n    'REGEXP_INSTR',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'REPEAT',\n    'REPLACE',\n    'REPLICATE',\n    'REVERSE',\n    'RTRIM',\n    'SOUNDEX',\n    'SPLIT_PART',\n    'STRPOS',\n    'STRTOL',\n    'SUBSTRING',\n    'TEXTLEN',\n    'TRANSLATE',\n    'TRIM',\n    'UPPER'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html\n  superType: [\n    'decimal_precision',\n    'decimal_scale',\n    'is_array',\n    'is_bigint',\n    'is_boolean',\n    'is_char',\n    'is_decimal',\n    'is_float',\n    'is_integer',\n    'is_object',\n    'is_scalar',\n    'is_smallint',\n    'is_varchar',\n    'json_typeof'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html\n  window: [\n    'AVG',\n    'COUNT',\n    'CUME_DIST',\n    'DENSE_RANK',\n    'FIRST_VALUE',\n    'LAST_VALUE',\n    'LAG',\n    'LEAD',\n    'LISTAGG',\n    'MAX',\n    'MEDIAN',\n    'MIN',\n    'NTH_VALUE',\n    'NTILE',\n    'PERCENT_RANK',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'RANK',\n    'RATIO_TO_REPORT',\n    'ROW_NUMBER',\n    'STDDEV_SAMP',\n    'STDDEV_POP',\n    'SUM',\n    'VAR_SAMP',\n    'VAR_POP'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html\n  dataType: ['CAST', 'CONVERT', 'TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TEXT_TO_INT_ALT', 'TEXT_TO_NUMERIC_ALT'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html\n  sysAdmin: [\n    'CHANGE_QUERY_PRIORITY',\n    'CHANGE_SESSION_PRIORITY',\n    'CHANGE_USER_PRIORITY',\n    'CURRENT_SETTING',\n    'PG_CANCEL_BACKEND',\n    'PG_TERMINATE_BACKEND',\n    'REBOOT_CLUSTER',\n    'SET_CONFIG'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html\n  sysInfo: [\n    'CURRENT_AWS_ACCOUNT',\n    'CURRENT_DATABASE',\n    'CURRENT_NAMESPACE',\n    'CURRENT_SCHEMA',\n    'CURRENT_SCHEMAS',\n    'CURRENT_USER',\n    'CURRENT_USER_ID',\n    'HAS_ASSUMEROLE_PRIVILEGE',\n    'HAS_DATABASE_PRIVILEGE',\n    'HAS_SCHEMA_PRIVILEGE',\n    'HAS_TABLE_PRIVILEGE',\n    'PG_BACKEND_PID',\n    'PG_GET_COLS',\n    'PG_GET_GRANTEE_BY_IAM_ROLE',\n    'PG_GET_IAM_ROLE_BY_USER',\n    'PG_GET_LATE_BINDING_VIEW_COLS',\n    'PG_LAST_COPY_COUNT',\n    'PG_LAST_COPY_ID',\n    'PG_LAST_UNLOAD_ID',\n    'PG_LAST_QUERY_ID',\n    'PG_LAST_UNLOAD_COUNT',\n    'SESSION_USER',\n    'SLICE_NUM',\n    'USER',\n    'VERSION'\n  ],\n  dataTypes: [\n    'DECIMAL',\n    'NUMERIC',\n    'CHAR',\n    'CHARACTER',\n    'VARCHAR',\n    'CHARACTER VARYING',\n    'NCHAR',\n    'NVARCHAR',\n    'VARBYTE'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html\n  standard: [\n    'AES128',\n    'AES256',\n    'ALL',\n    'ALLOWOVERWRITE',\n    'ANY',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'AUTHORIZATION',\n    'BACKUP',\n    'BETWEEN',\n    'BINARY',\n    'BOTH',\n    'CHECK',\n    'COLUMN',\n    'CONSTRAINT',\n    'CREATE',\n    'CROSS',\n    'DEFAULT',\n    'DEFERRABLE',\n    'DEFLATE',\n    'DEFRAG',\n    'DESC',\n    'DISABLE',\n    'DISTINCT',\n    'DO',\n    'ENABLE',\n    'ENCODE',\n    'ENCRYPT',\n    'ENCRYPTION',\n    'EXPLICIT',\n    'FALSE',\n    'FOR',\n    'FOREIGN',\n    'FREEZE',\n    'FROM',\n    'FULL',\n    'GLOBALDICT256',\n    'GLOBALDICT64K',\n    'GROUP',\n    'IDENTITY',\n    'IGNORE',\n    'ILIKE',\n    'IN',\n    'INITIALLY',\n    'INNER',\n    'INTO',\n    'IS',\n    'ISNULL',\n    'LANGUAGE',\n    'LEADING',\n    'LIKE',\n    'LIMIT',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LUN',\n    'LUNS',\n    'MINUS',\n    'NATURAL',\n    'NEW',\n    'NOT',\n    'NOTNULL',\n    'NULL',\n    'NULLS',\n    'OFF',\n    'OFFLINE',\n    'OFFSET',\n    'OID',\n    'OLD',\n    'ON',\n    'ONLY',\n    'OPEN',\n    'ORDER',\n    'OUTER',\n    'OVERLAPS',\n    'PARALLEL',\n    'PARTITION',\n    'PERCENT',\n    'PERMISSIONS',\n    'PLACING',\n    'PRIMARY',\n    'RECOVER',\n    'REFERENCES',\n    'REJECTLOG',\n    'RESORT',\n    'RESPECT',\n    'RESTORE',\n    'SIMILAR',\n    'SNAPSHOT',\n    'SOME',\n    'SYSTEM',\n    'TABLE',\n    'TAG',\n    'TDES',\n    'THEN',\n    'TIMESTAMP',\n    'TO',\n    'TOP',\n    'TRAILING',\n    'TRUE',\n    'UNIQUE',\n    'USING',\n    'VERBOSE',\n    'WALLET',\n    'WITHOUT'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n  dataConversionParams: [\n    'ACCEPTANYDATE',\n    'ACCEPTINVCHARS',\n    'BLANKSASNULL',\n    'DATEFORMAT',\n    'EMPTYASNULL',\n    'ENCODING',\n    'ESCAPE',\n    'EXPLICIT_IDS',\n    'FILLRECORD',\n    'IGNOREBLANKLINES',\n    'IGNOREHEADER',\n    'REMOVEQUOTES',\n    'ROUNDEC',\n    'TIMEFORMAT',\n    'TRIMBLANKS',\n    'TRUNCATECOLUMNS'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html\n  dataLoadParams: ['COMPROWS', 'COMPUPDATE', 'MAXERROR', 'NOLOAD', 'STATUPDATE'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html\n  dataFormatParams: [\n    'FORMAT',\n    'CSV',\n    'DELIMITER',\n    'FIXEDWIDTH',\n    'SHAPEFILE',\n    'AVRO',\n    'JSON',\n    'PARQUET',\n    'ORC'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html\n  copyAuthParams: [\n    'ACCESS_KEY_ID',\n    'CREDENTIALS',\n    'ENCRYPTED',\n    'IAM_ROLE',\n    'MASTER_SYMMETRIC_KEY',\n    'SECRET_ACCESS_KEY',\n    'SESSION_TOKEN'\n  ],\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html\n  copyCompressionParams: ['BZIP2', 'GZIP', 'LZOP', 'ZSTD'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html\n  copyMiscParams: ['MANIFEST', 'READRATIO', 'REGION', 'SSH'],\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html\n  compressionEncodings: [\n    'RAW',\n    'AZ64',\n    'BYTEDICT',\n    'DELTA',\n    'DELTA32K',\n    'LZO',\n    'MOSTLY8',\n    'MOSTLY16',\n    'MOSTLY32',\n    'RUNLENGTH',\n    'TEXT255',\n    'TEXT32K'\n  ],\n  misc: [\n    // CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)\n    'CATALOG_ROLE',\n    'SECRET_ARN',\n    'EXTERNAL',\n    // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html\n    'AUTO',\n    'EVEN',\n    'KEY',\n    'PREDICATE', // ANALYZE | ANALYSE (https://docs.aws.amazon.com/redshift/latest/dg/r_ANALYZE.html)\n    // unknown\n    'COMPRESSION'\n  ],\n  /**\n   * Other keywords not included:\n   * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html\n   * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html\n   * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html\n   * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html\n   */\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-text-and-bpchar-types\n  dataTypes: ['BPCHAR', 'TEXT']\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './redshift.functions.js';\nimport { keywords } from './redshift.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE | MATERIALIZED] VIEW',\n  'CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ALTER TABLE APPEND',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME TO',\n  'RENAME COLUMN',\n  'ALTER COLUMN',\n  'TYPE', // for alter column\n  'ENCODE', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html\n  'ABORT',\n  'ALTER DATABASE',\n  'ALTER DATASHARE',\n  'ALTER DEFAULT PRIVILEGES',\n  'ALTER GROUP',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER PROCEDURE',\n  'ALTER SCHEMA',\n  'ALTER USER',\n  'ANALYSE',\n  'ANALYZE',\n  'ANALYSE COMPRESSION',\n  'ANALYZE COMPRESSION',\n  'BEGIN',\n  'CALL',\n  'CANCEL',\n  'CLOSE',\n  'COMMENT',\n  'COMMIT',\n  'COPY',\n  'CREATE DATABASE',\n  'CREATE DATASHARE',\n  'CREATE EXTERNAL FUNCTION',\n  'CREATE EXTERNAL SCHEMA',\n  'CREATE EXTERNAL TABLE',\n  'CREATE FUNCTION',\n  'CREATE GROUP',\n  'CREATE LIBRARY',\n  'CREATE MODEL',\n  'CREATE PROCEDURE',\n  'CREATE SCHEMA',\n  'CREATE USER',\n  'DEALLOCATE',\n  'DECLARE',\n  'DESC DATASHARE',\n  'DROP DATABASE',\n  'DROP DATASHARE',\n  'DROP FUNCTION',\n  'DROP GROUP',\n  'DROP LIBRARY',\n  'DROP MODEL',\n  'DROP MATERIALIZED VIEW',\n  'DROP PROCEDURE',\n  'DROP SCHEMA',\n  'DROP USER',\n  'DROP VIEW',\n  'DROP',\n  'EXECUTE',\n  'EXPLAIN',\n  'FETCH',\n  'GRANT',\n  'LOCK',\n  'PREPARE',\n  'REFRESH MATERIALIZED VIEW',\n  'RESET',\n  'REVOKE',\n  'ROLLBACK',\n  'SELECT INTO',\n  'SET SESSION AUTHORIZATION',\n  'SET SESSION CHARACTERISTICS',\n  'SHOW',\n  'SHOW EXTERNAL TABLE',\n  'SHOW MODEL',\n  'SHOW DATASHARES',\n  'SHOW PROCEDURE',\n  'SHOW TABLE',\n  'SHOW VIEW',\n  'START TRANSACTION',\n  'UNLOAD',\n  'VACUUM'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT', 'MINUS']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n  'NULL AS',\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html\n  'DATA CATALOG',\n  'HIVE METASTORE',\n  // in window specifications\n  '{ROWS | RANGE} BETWEEN'\n]);\n\n// https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html\nexport const redshift: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: [\"''-qq\"],\n    identTypes: [`\"\"-qq`],\n    identChars: { first: '#' },\n    paramTypes: { numbered: ['$'] },\n    operators: [\n      '^',\n      '%',\n      '@',\n      '|/',\n      '||/',\n      '&',\n      '|',\n      // '#', conflicts with first char of identifier\n      '~',\n      '<<',\n      '>>',\n      '||',\n      '::'\n    ]\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords\n  all: [\n    'ADD',\n    'AFTER',\n    'ALL',\n    'ALTER',\n    'ANALYZE',\n    'AND',\n    'ANTI',\n    'ANY',\n    'ARCHIVE',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'AT',\n    'AUTHORIZATION',\n    'BETWEEN',\n    'BOTH',\n    'BUCKET',\n    'BUCKETS',\n    'BY',\n    'CACHE',\n    'CASCADE',\n    'CAST',\n    'CHANGE',\n    'CHECK',\n    'CLEAR',\n    'CLUSTER',\n    'CLUSTERED',\n    'CODEGEN',\n    'COLLATE',\n    'COLLECTION',\n    'COLUMN',\n    'COLUMNS',\n    'COMMENT',\n    'COMMIT',\n    'COMPACT',\n    'COMPACTIONS',\n    'COMPUTE',\n    'CONCATENATE',\n    'CONSTRAINT',\n    'COST',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'DATA',\n    'DATABASE',\n    'DATABASES',\n    'DAY',\n    'DBPROPERTIES',\n    'DEFINED',\n    'DELETE',\n    'DELIMITED',\n    'DESC',\n    'DESCRIBE',\n    'DFS',\n    'DIRECTORIES',\n    'DIRECTORY',\n    'DISTINCT',\n    'DISTRIBUTE',\n    'DIV',\n    'DROP',\n    'ESCAPE',\n    'ESCAPED',\n    'EXCEPT',\n    'EXCHANGE',\n    'EXISTS',\n    'EXPORT',\n    'EXTENDED',\n    'EXTERNAL',\n    'EXTRACT',\n    'FALSE',\n    'FETCH',\n    'FIELDS',\n    'FILTER',\n    'FILEFORMAT',\n    'FIRST',\n    'FIRST_VALUE',\n    'FOLLOWING',\n    'FOR',\n    'FOREIGN',\n    'FORMAT',\n    'FORMATTED',\n    'FULL',\n    'FUNCTION',\n    'FUNCTIONS',\n    'GLOBAL',\n    'GRANT',\n    'GROUP',\n    'GROUPING',\n    'HOUR',\n    'IF',\n    'IGNORE',\n    'IMPORT',\n    'IN',\n    'INDEX',\n    'INDEXES',\n    'INNER',\n    'INPATH',\n    'INPUTFORMAT',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'ITEMS',\n    'KEYS',\n    'LAST',\n    'LAST_VALUE',\n    'LATERAL',\n    'LAZY',\n    'LEADING',\n    'LEFT',\n    'LIKE',\n    'LINES',\n    'LIST',\n    'LOCAL',\n    'LOCATION',\n    'LOCK',\n    'LOCKS',\n    'LOGICAL',\n    'MACRO',\n    'MAP',\n    'MATCHED',\n    'MERGE',\n    'MINUTE',\n    'MONTH',\n    'MSCK',\n    'NAMESPACE',\n    'NAMESPACES',\n    'NATURAL',\n    'NO',\n    'NOT',\n    'NULL',\n    'NULLS',\n    'OF',\n    'ONLY',\n    'OPTION',\n    'OPTIONS',\n    'OR',\n    'ORDER',\n    'OUT',\n    'OUTER',\n    'OUTPUTFORMAT',\n    'OVER',\n    'OVERLAPS',\n    'OVERLAY',\n    'OVERWRITE',\n    'OWNER',\n    'PARTITION',\n    'PARTITIONED',\n    'PARTITIONS',\n    'PERCENT',\n    'PLACING',\n    'POSITION',\n    'PRECEDING',\n    'PRIMARY',\n    'PRINCIPALS',\n    'PROPERTIES',\n    'PURGE',\n    'QUERY',\n    'RANGE',\n    'RECORDREADER',\n    'RECORDWRITER',\n    'RECOVER',\n    'REDUCE',\n    'REFERENCES',\n    'RENAME',\n    'REPAIR',\n    'REPLACE',\n    'RESPECT',\n    'RESTRICT',\n    'REVOKE',\n    'RIGHT',\n    'RLIKE',\n    'ROLE',\n    'ROLES',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROW',\n    'ROWS',\n    'SCHEMA',\n    'SECOND',\n    'SELECT',\n    'SEMI',\n    'SEPARATED',\n    'SERDE',\n    'SERDEPROPERTIES',\n    'SESSION_USER',\n    'SETS',\n    'SHOW',\n    'SKEWED',\n    'SOME',\n    'SORT',\n    'SORTED',\n    'START',\n    'STATISTICS',\n    'STORED',\n    'STRATIFY',\n    'STRUCT',\n    'SUBSTR',\n    'SUBSTRING',\n    'TABLE',\n    'TABLES',\n    'TBLPROPERTIES',\n    'TEMPORARY',\n    'TERMINATED',\n    'THEN',\n    'TO',\n    'TOUCH',\n    'TRAILING',\n    'TRANSACTION',\n    'TRANSACTIONS',\n    'TRIM',\n    'TRUE',\n    'TRUNCATE',\n    'UNARCHIVE',\n    'UNBOUNDED',\n    'UNCACHE',\n    'UNIQUE',\n    'UNKNOWN',\n    'UNLOCK',\n    'UNSET',\n    'USE',\n    'USER',\n    'USING',\n    'VIEW',\n    'WINDOW',\n    'YEAR',\n    // other\n    'ANALYSE',\n    'ARRAY_ZIP',\n    'COALESCE',\n    'CONTAINS',\n    'CONVERT',\n    'DAYS',\n    'DAY_HOUR',\n    'DAY_MINUTE',\n    'DAY_SECOND',\n    'DECODE',\n    'DEFAULT',\n    'DISTINCTROW',\n    'ENCODE',\n    'EXPLODE',\n    'EXPLODE_OUTER',\n    'FIXED',\n    'GREATEST',\n    'GROUP_CONCAT',\n    'HOURS',\n    'HOUR_MINUTE',\n    'HOUR_SECOND',\n    'IFNULL',\n    'LEAST',\n    'LEVEL',\n    'MINUTE_SECOND',\n    'NULLIF',\n    'OFFSET',\n    'ON',\n    'OPTIMIZE',\n    'REGEXP',\n    'SEPARATOR',\n    'SIZE',\n    'STRING',\n    'TYPE',\n    'TYPES',\n    'UNSIGNED',\n    'VARIABLES',\n    'YEAR_MONTH'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // http://spark.apache.org/docs/latest/sql-ref-functions.html\n  //\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions\n  aggregate: [\n    // 'ANY',\n    'APPROX_COUNT_DISTINCT',\n    'APPROX_PERCENTILE',\n    'AVG',\n    'BIT_AND',\n    'BIT_OR',\n    'BIT_XOR',\n    'BOOL_AND',\n    'BOOL_OR',\n    'COLLECT_LIST',\n    'COLLECT_SET',\n    'CORR',\n    'COUNT',\n    'COUNT',\n    'COUNT',\n    'COUNT_IF',\n    'COUNT_MIN_SKETCH',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'EVERY',\n    'FIRST',\n    'FIRST_VALUE',\n    'GROUPING',\n    'GROUPING_ID',\n    'KURTOSIS',\n    'LAST',\n    'LAST_VALUE',\n    'MAX',\n    'MAX_BY',\n    'MEAN',\n    'MIN',\n    'MIN_BY',\n    'PERCENTILE',\n    'PERCENTILE',\n    'PERCENTILE_APPROX',\n    'SKEWNESS',\n    // 'SOME',\n    'STD',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'SUM',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE'\n  ],\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions\n  window: [\n    'CUME_DIST',\n    'DENSE_RANK',\n    'LAG',\n    'LEAD',\n    'NTH_VALUE',\n    'NTILE',\n    'PERCENT_RANK',\n    'RANK',\n    'ROW_NUMBER'\n  ],\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions\n  array: [\n    'ARRAY',\n    'ARRAY_CONTAINS',\n    'ARRAY_DISTINCT',\n    'ARRAY_EXCEPT',\n    'ARRAY_INTERSECT',\n    'ARRAY_JOIN',\n    'ARRAY_MAX',\n    'ARRAY_MIN',\n    'ARRAY_POSITION',\n    'ARRAY_REMOVE',\n    'ARRAY_REPEAT',\n    'ARRAY_UNION',\n    'ARRAYS_OVERLAP',\n    'ARRAYS_ZIP',\n    'FLATTEN',\n    'SEQUENCE',\n    'SHUFFLE',\n    'SLICE',\n    'SORT_ARRAY'\n  ],\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions\n  map: [\n    'ELEMENT_AT',\n    'ELEMENT_AT',\n    'MAP',\n    'MAP_CONCAT',\n    'MAP_ENTRIES',\n    'MAP_FROM_ARRAYS',\n    'MAP_FROM_ENTRIES',\n    'MAP_KEYS',\n    'MAP_VALUES',\n    'STR_TO_MAP'\n  ],\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions\n  datetime: [\n    'ADD_MONTHS',\n    'CURRENT_DATE',\n    'CURRENT_DATE',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_TIMEZONE',\n    'DATE_ADD',\n    'DATE_FORMAT',\n    'DATE_FROM_UNIX_DATE',\n    'DATE_PART',\n    'DATE_SUB',\n    'DATE_TRUNC',\n    'DATEDIFF',\n    'DAY',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFYEAR',\n    'EXTRACT',\n    'FROM_UNIXTIME',\n    'FROM_UTC_TIMESTAMP',\n    'HOUR',\n    'LAST_DAY',\n    'MAKE_DATE',\n    'MAKE_DT_INTERVAL',\n    'MAKE_INTERVAL',\n    'MAKE_TIMESTAMP',\n    'MAKE_YM_INTERVAL',\n    'MINUTE',\n    'MONTH',\n    'MONTHS_BETWEEN',\n    'NEXT_DAY',\n    'NOW',\n    'QUARTER',\n    'SECOND',\n    'SESSION_WINDOW',\n    'TIMESTAMP_MICROS',\n    'TIMESTAMP_MILLIS',\n    'TIMESTAMP_SECONDS',\n    'TO_DATE',\n    'TO_TIMESTAMP',\n    'TO_UNIX_TIMESTAMP',\n    'TO_UTC_TIMESTAMP',\n    'TRUNC',\n    'UNIX_DATE',\n    'UNIX_MICROS',\n    'UNIX_MILLIS',\n    'UNIX_SECONDS',\n    'UNIX_TIMESTAMP',\n    'WEEKDAY',\n    'WEEKOFYEAR',\n    'WINDOW',\n    'YEAR'\n  ],\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions\n  json: [\n    'FROM_JSON',\n    'GET_JSON_OBJECT',\n    'JSON_ARRAY_LENGTH',\n    'JSON_OBJECT_KEYS',\n    'JSON_TUPLE',\n    'SCHEMA_OF_JSON',\n    'TO_JSON'\n  ],\n  // http://spark.apache.org/docs/latest/api/sql/index.html\n  misc: [\n    'ABS',\n    'ACOS',\n    'ACOSH',\n    'AGGREGATE',\n    'ARRAY_SORT',\n    'ASCII',\n    'ASIN',\n    'ASINH',\n    'ASSERT_TRUE',\n    'ATAN',\n    'ATAN2',\n    'ATANH',\n    'BASE64',\n    'BIGINT',\n    'BIN',\n    'BINARY',\n    'BIT_COUNT',\n    'BIT_GET',\n    'BIT_LENGTH',\n    'BOOLEAN',\n    'BROUND',\n    'BTRIM',\n    'CARDINALITY',\n    'CBRT',\n    'CEIL',\n    'CEILING',\n    'CHAR',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'CHR',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONV',\n    'COS',\n    'COSH',\n    'COT',\n    'CRC32',\n    'CURRENT_CATALOG',\n    'CURRENT_DATABASE',\n    'CURRENT_USER',\n    'DATE',\n    'DECIMAL',\n    'DEGREES',\n    'DOUBLE',\n    // 'E',\n    'ELT',\n    'EXP',\n    'EXPM1',\n    'FACTORIAL',\n    'FIND_IN_SET',\n    'FLOAT',\n    'FLOOR',\n    'FORALL',\n    'FORMAT_NUMBER',\n    'FORMAT_STRING',\n    'FROM_CSV',\n    'GETBIT',\n    'HASH',\n    'HEX',\n    'HYPOT',\n    'INITCAP',\n    'INLINE',\n    'INLINE_OUTER',\n    'INPUT_FILE_BLOCK_LENGTH',\n    'INPUT_FILE_BLOCK_START',\n    'INPUT_FILE_NAME',\n    'INSTR',\n    'INT',\n    'ISNAN',\n    'ISNOTNULL',\n    'ISNULL',\n    'JAVA_METHOD',\n    'LCASE',\n    'LEFT',\n    'LENGTH',\n    'LEVENSHTEIN',\n    'LN',\n    'LOCATE',\n    'LOG',\n    'LOG10',\n    'LOG1P',\n    'LOG2',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'MAP_FILTER',\n    'MAP_ZIP_WITH',\n    'MD5',\n    'MOD',\n    'MONOTONICALLY_INCREASING_ID',\n    'NAMED_STRUCT',\n    'NANVL',\n    'NEGATIVE',\n    'NVL',\n    'NVL2',\n    'OCTET_LENGTH',\n    'OVERLAY',\n    'PARSE_URL',\n    'PI',\n    'PMOD',\n    'POSEXPLODE',\n    'POSEXPLODE_OUTER',\n    'POSITION',\n    'POSITIVE',\n    'POW',\n    'POWER',\n    'PRINTF',\n    'RADIANS',\n    'RAISE_ERROR',\n    'RAND',\n    'RANDN',\n    'RANDOM',\n    'REFLECT',\n    'REGEXP_EXTRACT',\n    'REGEXP_EXTRACT_ALL',\n    'REGEXP_LIKE',\n    'REGEXP_REPLACE',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'RIGHT',\n    'RINT',\n    'ROUND',\n    'RPAD',\n    'RTRIM',\n    'SCHEMA_OF_CSV',\n    'SENTENCES',\n    'SHA',\n    'SHA1',\n    'SHA2',\n    'SHIFTLEFT',\n    'SHIFTRIGHT',\n    'SHIFTRIGHTUNSIGNED',\n    'SIGN',\n    'SIGNUM',\n    'SIN',\n    'SINH',\n    'SMALLINT',\n    'SOUNDEX',\n    'SPACE',\n    'SPARK_PARTITION_ID',\n    'SPLIT',\n    'SQRT',\n    'STACK',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUBSTRING_INDEX',\n    'TAN',\n    'TANH',\n    'TIMESTAMP',\n    'TINYINT',\n    'TO_CSV',\n    'TRANSFORM_KEYS',\n    'TRANSFORM_VALUES',\n    'TRANSLATE',\n    'TRIM',\n    'TRY_ADD',\n    'TRY_DIVIDE',\n    'TYPEOF',\n    'UCASE',\n    'UNBASE64',\n    'UNHEX',\n    'UPPER',\n    'UUID',\n    'VERSION',\n    'WIDTH_BUCKET',\n    'XPATH',\n    'XPATH_BOOLEAN',\n    'XPATH_DOUBLE',\n    'XPATH_FLOAT',\n    'XPATH_INT',\n    'XPATH_LONG',\n    'XPATH_NUMBER',\n    'XPATH_SHORT',\n    'XPATH_STRING',\n    'XXHASH64',\n    'ZIP_WITH'\n  ],\n  cast: ['CAST'],\n  // Shorthand functions to use in place of CASE expression\n  caseAbbrev: ['COALESCE', 'NULLIF'],\n  // Parameterized data types\n  // https://spark.apache.org/docs/latest/sql-ref-datatypes.html\n  dataTypes: [\n    'DECIMAL',\n    'DEC',\n    'NUMERIC',\n    // No varchar type in Spark, only STRING. Added for the sake of tests\n    'VARCHAR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './spark.keywords.js';\nimport { functions } from './spark.functions.js';\n\n// http://spark.apache.org/docs/latest/sql-ref-syntax.html\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'SORT BY',\n  'CLUSTER BY',\n  'DISTRIBUTE BY',\n  'LIMIT',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO | OVERWRITE] [TABLE]',\n  'VALUES',\n  // - insert overwrite directory:\n  //   https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory.html\n  'INSERT OVERWRITE [LOCAL] DIRECTORY',\n  // - load:\n  //   https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html\n  'LOAD DATA [LOCAL] INPATH',\n  '[OVERWRITE] INTO TABLE',\n  // Data definition\n  'CREATE [OR REPLACE] [GLOBAL TEMPORARY | TEMPORARY] VIEW [IF NOT EXISTS]',\n  'CREATE [EXTERNAL] TABLE [IF NOT EXISTS]'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD COLUMNS',\n  'DROP {COLUMN | COLUMNS}',\n  'RENAME TO',\n  'RENAME COLUMN',\n  'ALTER COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'LATERAL VIEW',\n  'ALTER DATABASE',\n  'ALTER VIEW',\n  'CREATE DATABASE',\n  'CREATE FUNCTION',\n  'DROP DATABASE',\n  'DROP FUNCTION',\n  'DROP VIEW',\n  'REPAIR TABLE',\n  'USE DATABASE',\n  // Data Retrieval\n  'TABLESAMPLE',\n  'PIVOT',\n  'TRANSFORM',\n  'EXPLAIN',\n  // Auxiliary\n  'ADD FILE',\n  'ADD JAR',\n  'ANALYZE TABLE',\n  'CACHE TABLE',\n  'CLEAR CACHE',\n  'DESCRIBE DATABASE',\n  'DESCRIBE FUNCTION',\n  'DESCRIBE QUERY',\n  'DESCRIBE TABLE',\n  'LIST FILE',\n  'LIST JAR',\n  'REFRESH',\n  'REFRESH TABLE',\n  'REFRESH FUNCTION',\n  'RESET',\n  'SHOW COLUMNS',\n  'SHOW CREATE TABLE',\n  'SHOW DATABASES',\n  'SHOW FUNCTIONS',\n  'SHOW PARTITIONS',\n  'SHOW TABLE EXTENDED',\n  'SHOW TABLES',\n  'SHOW TBLPROPERTIES',\n  'SHOW VIEWS',\n  'UNCACHE TABLE'\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]'\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  // non-standard-joins\n  '[LEFT] {ANTI | SEMI} JOIN',\n  'NATURAL [LEFT] {ANTI | SEMI} JOIN'\n]);\n\nconst reservedPhrases = expandPhrases(['ON DELETE', 'ON UPDATE', 'CURRENT ROW', '{ROWS | RANGE} BETWEEN']);\n\n// http://spark.apache.org/docs/latest/sql-programming-guide.html\nexport const spark: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: [\n      \"''-bs\",\n      '\"\"-bs',\n      { quote: \"''-raw\", prefixes: ['R', 'X'], requirePrefix: true },\n      { quote: '\"\"-raw', prefixes: ['R', 'X'], requirePrefix: true }\n    ],\n    identTypes: ['``'],\n    variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n    operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||', '->'],\n    postProcess\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const prevToken = tokens[i - 1] || EOF_TOKEN;\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n\n    // [WINDOW](...)\n    if (isToken.WINDOW(token) && nextToken.type === TokenType.OPEN_PAREN) {\n      // This is a function call, treat it as a reserved function name\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n\n    // TODO: deprecate this once ITEMS is merged with COLLECTION\n    if (token.text === 'ITEMS' && token.type === TokenType.RESERVED_KEYWORD) {\n      if (!(prevToken.text === 'COLLECTION' && nextToken.text === 'TERMINATED')) {\n        // this is a word and not COLLECTION ITEMS\n        return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n      }\n    }\n\n    return token;\n  });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://www.sqlite.org/lang_corefunc.html\n  scalar: [\n    'ABS',\n    'CHANGES',\n    'CHAR',\n    'COALESCE',\n    'FORMAT',\n    'GLOB',\n    'HEX',\n    'IFNULL',\n    'IIF',\n    'INSTR',\n    'LAST_INSERT_ROWID',\n    'LENGTH',\n    'LIKE',\n    'LIKELIHOOD',\n    'LIKELY',\n    'LOAD_EXTENSION',\n    'LOWER',\n    'LTRIM',\n    'NULLIF',\n    'PRINTF',\n    'QUOTE',\n    'RANDOM',\n    'RANDOMBLOB',\n    'REPLACE',\n    'ROUND',\n    'RTRIM',\n    'SIGN',\n    'SOUNDEX',\n    'SQLITE_COMPILEOPTION_GET',\n    'SQLITE_COMPILEOPTION_USED',\n    'SQLITE_OFFSET',\n    'SQLITE_SOURCE_ID',\n    'SQLITE_VERSION',\n    'SUBSTR',\n    'SUBSTRING',\n    'TOTAL_CHANGES',\n    'TRIM',\n    'TYPEOF',\n    'UNICODE',\n    'UNLIKELY',\n    'UPPER',\n    'ZEROBLOB'\n  ],\n  // https://www.sqlite.org/lang_aggfunc.html\n  aggregate: ['AVG', 'COUNT', 'GROUP_CONCAT', 'MAX', 'MIN', 'SUM', 'TOTAL'],\n  // https://www.sqlite.org/lang_datefunc.html\n  datetime: ['DATE', 'TIME', 'DATETIME', 'JULIANDAY', 'UNIXEPOCH', 'STRFTIME'],\n  // https://www.sqlite.org/windowfunctions.html#biwinfunc\n  window: [\n    'row_number',\n    'rank',\n    'dense_rank',\n    'percent_rank',\n    'cume_dist',\n    'ntile',\n    'lag',\n    'lead',\n    'first_value',\n    'last_value',\n    'nth_value'\n  ],\n  // https://www.sqlite.org/lang_mathfunc.html\n  math: [\n    'ACOS',\n    'ACOSH',\n    'ASIN',\n    'ASINH',\n    'ATAN',\n    'ATAN2',\n    'ATANH',\n    'CEIL',\n    'CEILING',\n    'COS',\n    'COSH',\n    'DEGREES',\n    'EXP',\n    'FLOOR',\n    'LN',\n    'LOG',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'MOD',\n    'PI',\n    'POW',\n    'POWER',\n    'RADIANS',\n    'SIN',\n    'SINH',\n    'SQRT',\n    'TAN',\n    'TANH',\n    'TRUNC'\n  ],\n  // https://www.sqlite.org/json1.html\n  json: [\n    'JSON',\n    'JSON_ARRAY',\n    'JSON_ARRAY_LENGTH',\n    'JSON_ARRAY_LENGTH',\n    'JSON_EXTRACT',\n    'JSON_INSERT',\n    'JSON_OBJECT',\n    'JSON_PATCH',\n    'JSON_REMOVE',\n    'JSON_REPLACE',\n    'JSON_SET',\n    'JSON_TYPE',\n    'JSON_TYPE',\n    'JSON_VALID',\n    'JSON_QUOTE',\n    'JSON_GROUP_ARRAY',\n    'JSON_GROUP_OBJECT',\n    'JSON_EACH',\n    'JSON_TREE'\n  ],\n  cast: ['CAST'],\n  // SQLite allows parameters for all data types\n  // Well, in fact it allows any word as a data type, e.g. CREATE TABLE foo (col1 madeupname(123));\n  // https://www.sqlite.org/datatype3.html\n  dataTypes: [\n    'CHARACTER',\n    'VARCHAR',\n    'VARYING CHARACTER',\n    'NCHAR',\n    'NATIVE CHARACTER',\n    'NVARCHAR',\n    'NUMERIC',\n    'DECIMAL'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://www.sqlite.org/lang_keywords.html\n  all: [\n    'ABORT',\n    'ACTION',\n    'ADD',\n    'AFTER',\n    'ALL',\n    'ALTER',\n    'AND',\n    'ANY',\n    'ARE',\n    'ARRAY',\n    'ALWAYS',\n    'ANALYZE',\n    'AS',\n    'ASC',\n    'ATTACH',\n    'AUTOINCREMENT',\n    'BEFORE',\n    'BEGIN',\n    'BETWEEN',\n    'BY',\n    'CASCADE',\n    'CASE',\n    'CAST',\n    'CHECK',\n    'COLLATE',\n    'COLUMN',\n    'COMMIT',\n    'CONFLICT',\n    'CONSTRAINT',\n    'CREATE',\n    'CROSS',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'DATABASE',\n    'DEFAULT',\n    'DEFERRABLE',\n    'DEFERRED',\n    'DELETE',\n    'DESC',\n    'DETACH',\n    'DISTINCT',\n    'DO',\n    'DROP',\n    'EACH',\n    'ELSE',\n    'END',\n    'ESCAPE',\n    'EXCEPT',\n    'EXCLUDE',\n    'EXCLUSIVE',\n    'EXISTS',\n    'EXPLAIN',\n    'FAIL',\n    'FILTER',\n    'FIRST',\n    'FOLLOWING',\n    'FOR',\n    'FOREIGN',\n    'FROM',\n    'FULL',\n    'GENERATED',\n    'GLOB',\n    'GROUP',\n    'GROUPS',\n    'HAVING',\n    'IF',\n    'IGNORE',\n    'IMMEDIATE',\n    'IN',\n    'INDEX',\n    'INDEXED',\n    'INITIALLY',\n    'INNER',\n    'INSERT',\n    'INSTEAD',\n    'INTERSECT',\n    'INTO',\n    'IS',\n    'ISNULL',\n    'JOIN',\n    'KEY',\n    'LAST',\n    'LEFT',\n    'LIKE',\n    'LIMIT',\n    'MATCH',\n    'MATERIALIZED',\n    'NATURAL',\n    'NO',\n    'NOT',\n    'NOTHING',\n    'NOTNULL',\n    'NULL',\n    'NULLS',\n    'OF',\n    'OFFSET',\n    'ON',\n    'ONLY',\n    'OPEN',\n    'OR',\n    'ORDER',\n    'OTHERS',\n    'OUTER',\n    'OVER',\n    'PARTITION',\n    'PLAN',\n    'PRAGMA',\n    'PRECEDING',\n    'PRIMARY',\n    'QUERY',\n    'RAISE',\n    'RANGE',\n    'RECURSIVE',\n    'REFERENCES',\n    'REGEXP',\n    'REINDEX',\n    'RELEASE',\n    'RENAME',\n    'REPLACE',\n    'RESTRICT',\n    'RETURNING',\n    'RIGHT',\n    'ROLLBACK',\n    'ROW',\n    'ROWS',\n    'SAVEPOINT',\n    'SELECT',\n    'SET',\n    'TABLE',\n    'TEMP',\n    'TEMPORARY',\n    'THEN',\n    'TIES',\n    'TO',\n    'TRANSACTION',\n    'TRIGGER',\n    'UNBOUNDED',\n    'UNION',\n    'UNIQUE',\n    'UPDATE',\n    'USING',\n    'VACUUM',\n    'VALUES',\n    'VIEW',\n    'VIRTUAL',\n    'WHEN',\n    'WHERE',\n    'WINDOW',\n    'WITH',\n    'WITHOUT'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sqlite.functions.js';\nimport { keywords } from './sqlite.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK] INTO',\n  'REPLACE INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [TEMPORARY | TEMP] VIEW [IF NOT EXISTS]',\n  'CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK]',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [COLUMN]',\n  'RENAME TO',\n  // - set schema\n  'SET SCHEMA'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\n// joins - https://www.sqlite.org/syntax/join-operator.html\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE | GROUPS} BETWEEN'\n]);\n\nexport const sqlite: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      \"''-qq\",\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true }\n      // Depending on context SQLite also supports double-quotes for strings,\n      // and single-quotes for identifiers.\n    ],\n    identTypes: [`\"\"-qq`, '``', '[]'],\n    // https://www.sqlite.org/lang_expr.html#parameters\n    paramTypes: { positional: true, numbered: ['?'], named: [':', '@', '$'] },\n    operators: ['%', '~', '&', '|', '<<', '>>', '==', '->', '->>', '||']\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_9_set_function_specification\n  set: ['GROUPING'],\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_10_window_function\n  window: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'ROW_NUMBER'],\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_27_numeric_value_function\n  numeric: [\n    'POSITION',\n    'OCCURRENCES_REGEX',\n    'POSITION_REGEX',\n    'EXTRACT',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'OCTET_LENGTH',\n    'CARDINALITY',\n    'ABS',\n    'MOD',\n    'LN',\n    'EXP',\n    'POWER',\n    'SQRT',\n    'FLOOR',\n    'CEIL',\n    'CEILING',\n    'WIDTH_BUCKET'\n  ],\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_29_string_value_function\n  string: [\n    'SUBSTRING',\n    'SUBSTRING_REGEX',\n    'UPPER',\n    'LOWER',\n    'CONVERT',\n    'TRANSLATE',\n    'TRANSLATE_REGEX',\n    'TRIM',\n    'OVERLAY',\n    'NORMALIZE',\n    'SPECIFICTYPE'\n  ],\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_31_datetime_value_function\n  datetime: ['CURRENT_DATE', 'CURRENT_TIME', 'LOCALTIME', 'CURRENT_TIMESTAMP', 'LOCALTIMESTAMP'],\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_38_multiset_value_function\n  // SET serves multiple roles: a SET() function and a SET keyword e.g. in UPDATE table SET ...\n  // multiset: ['SET'], (disabled for now)\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_10_9_aggregate_function\n  aggregate: [\n    'COUNT',\n    'AVG',\n    'MAX',\n    'MIN',\n    'SUM',\n    // 'EVERY',\n    // 'ANY',\n    // 'SOME',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'VAR_SAMP',\n    'VAR_POP',\n    'COLLECT',\n    'FUSION',\n    'INTERSECTION',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'CORR',\n    'REGR_SLOPE',\n    'REGR_INTERCEPT',\n    'REGR_COUNT',\n    'REGR_R2',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_SXX',\n    'REGR_SYY',\n    'REGR_SXY',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC'\n  ],\n  // CAST is a pretty complex case, involving multiple forms:\n  // - CAST(col AS int)\n  // - CAST(...) WITH ...\n  // - CAST FROM int\n  // - CREATE CAST(mycol AS int) WITH ...\n  cast: ['CAST'],\n  // Shorthand functions to use in place of CASE expression\n  caseAbbrev: ['COALESCE', 'NULLIF'],\n  // Non-standard functions that have widespread support\n  nonStandard: ['ROUND', 'SIN', 'COS', 'TAN', 'ASIN', 'ACOS', 'ATAN'],\n  // Data types with parameters like VARCHAR(100)\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#predefined-type\n  dataTypes: [\n    'CHARACTER',\n    'CHAR',\n    'CHARACTER VARYING',\n    'CHAR VARYING',\n    'VARCHAR',\n    'CHARACTER LARGE OBJECT',\n    'CHAR LARGE OBJECT',\n    'CLOB',\n    'NATIONAL CHARACTER',\n    'NATIONAL CHAR',\n    'NCHAR',\n    'NATIONAL CHARACTER VARYING',\n    'NATIONAL CHAR VARYING',\n    'NCHAR VARYING',\n    'NATIONAL CHARACTER LARGE OBJECT',\n    'NCHAR LARGE OBJECT',\n    'NCLOB',\n    'BINARY',\n    'BINARY VARYING',\n    'VARBINARY',\n    'BINARY LARGE OBJECT',\n    'BLOB',\n    'NUMERIC',\n    'DECIMAL',\n    'DEC',\n    'TIME',\n    'TIMESTAMP'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word\n  all: [\n    'ALL',\n    'ALLOCATE',\n    'ALTER',\n    'ANY', // <- moved over from functions\n    'ARE',\n    'ARRAY',\n    'AS',\n    'ASENSITIVE',\n    'ASYMMETRIC',\n    'AT',\n    'ATOMIC',\n    'AUTHORIZATION',\n    'BEGIN',\n    'BETWEEN',\n    'BIGINT',\n    'BINARY',\n    'BLOB',\n    'BOOLEAN',\n    'BOTH',\n    'BY',\n    'CALL',\n    'CALLED',\n    'CASCADED',\n    'CAST',\n    'CHAR',\n    'CHARACTER',\n    'CHECK',\n    'CLOB',\n    'CLOSE',\n    'COALESCE',\n    'COLLATE',\n    'COLUMN',\n    'COMMIT',\n    'CONDITION',\n    'CONNECT',\n    'CONSTRAINT',\n    'CORRESPONDING',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_CATALOG',\n    'CURRENT_DEFAULT_TRANSFORM_GROUP',\n    'CURRENT_PATH',\n    'CURRENT_ROLE',\n    'CURRENT_SCHEMA',\n    'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n    'CURRENT_USER',\n    'CURSOR',\n    'CYCLE',\n    'DATE',\n    'DAY',\n    'DEALLOCATE',\n    'DEC',\n    'DECIMAL',\n    'DECLARE',\n    'DEFAULT',\n    'DELETE',\n    'DEREF',\n    'DESCRIBE',\n    'DETERMINISTIC',\n    'DISCONNECT',\n    'DISTINCT',\n    'DOUBLE',\n    'DROP',\n    'DYNAMIC',\n    'EACH',\n    'ELEMENT',\n    'END-EXEC',\n    'ESCAPE',\n    'EVERY', // <- moved over from functions\n    'EXCEPT',\n    'EXEC',\n    'EXECUTE',\n    'EXISTS',\n    'EXTERNAL',\n    'FALSE',\n    'FETCH',\n    'FILTER',\n    'FLOAT',\n    'FOR',\n    'FOREIGN',\n    'FREE',\n    'FROM',\n    'FULL',\n    'FUNCTION',\n    'GET',\n    'GLOBAL',\n    'GRANT',\n    'GROUP',\n    'HAVING',\n    'HOLD',\n    'HOUR',\n    'IDENTITY',\n    'IN',\n    'INDICATOR',\n    'INNER',\n    'INOUT',\n    'INSENSITIVE',\n    'INSERT',\n    'INT',\n    'INTEGER',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'LANGUAGE',\n    'LARGE',\n    'LATERAL',\n    'LEADING',\n    'LEFT',\n    'LIKE',\n    'LIKE_REGEX',\n    'LOCAL',\n    'MATCH',\n    'MEMBER',\n    'MERGE',\n    'METHOD',\n    'MINUTE',\n    'MODIFIES',\n    'MODULE',\n    'MONTH',\n    'MULTISET',\n    'NATIONAL',\n    'NATURAL',\n    'NCHAR',\n    'NCLOB',\n    'NEW',\n    'NO',\n    'NONE',\n    'NOT',\n    'NULL',\n    'NULLIF',\n    'NUMERIC',\n    'OF',\n    'OLD',\n    'ON',\n    'ONLY',\n    'OPEN',\n    'ORDER',\n    'OUT',\n    'OUTER',\n    'OVER',\n    'OVERLAPS',\n    'PARAMETER',\n    'PARTITION',\n    'PRECISION',\n    'PREPARE',\n    'PRIMARY',\n    'PROCEDURE',\n    'RANGE',\n    'READS',\n    'REAL',\n    'RECURSIVE',\n    'REF',\n    'REFERENCES',\n    'REFERENCING',\n    'RELEASE',\n    'RESULT',\n    'RETURN',\n    'RETURNS',\n    'REVOKE',\n    'RIGHT',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROW',\n    'ROWS',\n    'SAVEPOINT',\n    'SCOPE',\n    'SCROLL',\n    'SEARCH',\n    'SECOND',\n    'SELECT',\n    'SENSITIVE',\n    'SESSION_USER',\n    'SET',\n    'SIMILAR',\n    'SMALLINT',\n    'SOME', // <- moved over from functions\n    'SPECIFIC',\n    'SQL',\n    'SQLEXCEPTION',\n    'SQLSTATE',\n    'SQLWARNING',\n    'START',\n    'STATIC',\n    'SUBMULTISET',\n    'SYMMETRIC',\n    'SYSTEM',\n    'SYSTEM_USER',\n    'TABLE',\n    'TABLESAMPLE',\n    'THEN',\n    'TIME',\n    'TIMESTAMP',\n    'TIMEZONE_HOUR',\n    'TIMEZONE_MINUTE',\n    'TO',\n    'TRAILING',\n    'TRANSLATION',\n    'TREAT',\n    'TRIGGER',\n    'TRUE',\n    'UESCAPE',\n    'UNION',\n    'UNIQUE',\n    'UNKNOWN',\n    'UNNEST',\n    'UPDATE',\n    'USER',\n    'USING',\n    'VALUE',\n    'VALUES',\n    'VARBINARY',\n    'VARCHAR',\n    'VARYING',\n    'WHENEVER',\n    'WINDOW',\n    'WITHIN',\n    'WITHOUT',\n    'YEAR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sql.functions.js';\nimport { keywords } from './sql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  // 'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  'SET',\n  // - update:\n  // Data definition\n  'CREATE [RECURSIVE] VIEW',\n  'CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY | EXTERNAL] TABLE',\n  'GRANT CREATE'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD COLUMN',\n  'DROP [COLUMN]',\n  'RENAME COLUMN',\n  'RENAME TO',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  'ADD SCOPE', // for alter column\n  'DROP SCOPE {CASCADE | RESTRICT}', // for alter column\n  'RESTART WITH', // for alter column\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'SET SCHEMA',\n  'SHOW CREATE',\n  'SHOW',\n  'SYSTEM SET'\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]'\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN'\n]);\n\nconst reservedPhrases = expandPhrases(['ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]', '{ROWS | RANGE} BETWEEN']);\n\nexport const sql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      { quote: \"''-qq-bs\", prefixes: ['N', 'U&'] },\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true }\n    ],\n    identTypes: [`\"\"-qq`, '``'],\n    paramTypes: { positional: true },\n    operators: ['||']\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://github.com/trinodb/trino/tree/432d2897bdef99388c1a47188743a061c4ac1f34/docs/src/main/sphinx/functions\n  // rg '^\\.\\. function::' ./docs/src/main/sphinx/functions | cut -d' ' -f 3 | cut -d '(' -f 1 | sort | uniq\n  // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep    '\\* :func:' | cut -d'`' -f 2\n  // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep -v '\\* :func:'\n  // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep  -e '^- :func:' | cut -d'`' -f2\n  // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -ve '^- :func:'\n  all: [\n    'ABS',\n    'ACOS',\n    'ALL_MATCH',\n    'ANY_MATCH',\n    'APPROX_DISTINCT',\n    'APPROX_MOST_FREQUENT',\n    'APPROX_PERCENTILE',\n    'APPROX_SET',\n    'ARBITRARY',\n    'ARRAYS_OVERLAP',\n    'ARRAY_AGG',\n    'ARRAY_DISTINCT',\n    'ARRAY_EXCEPT',\n    'ARRAY_INTERSECT',\n    'ARRAY_JOIN',\n    'ARRAY_MAX',\n    'ARRAY_MIN',\n    'ARRAY_POSITION',\n    'ARRAY_REMOVE',\n    'ARRAY_SORT',\n    'ARRAY_UNION',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'AT_TIMEZONE',\n    'AVG',\n    'BAR',\n    'BETA_CDF',\n    'BING_TILE',\n    'BING_TILES_AROUND',\n    'BING_TILE_AT',\n    'BING_TILE_COORDINATES',\n    'BING_TILE_POLYGON',\n    'BING_TILE_QUADKEY',\n    'BING_TILE_ZOOM_LEVEL',\n    'BITWISE_AND',\n    'BITWISE_AND_AGG',\n    'BITWISE_LEFT_SHIFT',\n    'BITWISE_NOT',\n    'BITWISE_OR',\n    'BITWISE_OR_AGG',\n    'BITWISE_RIGHT_SHIFT',\n    'BITWISE_RIGHT_SHIFT_ARITHMETIC',\n    'BITWISE_XOR',\n    'BIT_COUNT',\n    'BOOL_AND',\n    'BOOL_OR',\n    'CARDINALITY',\n    'CAST',\n    'CBRT',\n    'CEIL',\n    'CEILING',\n    'CHAR2HEXINT',\n    'CHECKSUM',\n    'CHR',\n    'CLASSIFY',\n    'COALESCE',\n    'CODEPOINT',\n    'COLOR',\n    'COMBINATIONS',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONTAINS',\n    'CONTAINS_SEQUENCE',\n    'CONVEX_HULL_AGG',\n    'CORR',\n    'COS',\n    'COSH',\n    'COSINE_SIMILARITY',\n    'COUNT',\n    'COUNT_IF',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'CRC32',\n    'CUME_DIST',\n    'CURRENT_CATALOG',\n    'CURRENT_DATE',\n    'CURRENT_GROUPS',\n    'CURRENT_SCHEMA',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_TIMEZONE',\n    'CURRENT_USER',\n    'DATE',\n    'DATE_ADD',\n    'DATE_DIFF',\n    'DATE_FORMAT',\n    'DATE_PARSE',\n    'DATE_TRUNC',\n    'DAY',\n    'DAY_OF_MONTH',\n    'DAY_OF_WEEK',\n    'DAY_OF_YEAR',\n    'DEGREES',\n    'DENSE_RANK',\n    'DOW',\n    'DOY',\n    'E',\n    'ELEMENT_AT',\n    'EMPTY_APPROX_SET',\n    'EVALUATE_CLASSIFIER_PREDICTIONS',\n    'EVERY',\n    'EXP',\n    'EXTRACT',\n    'FEATURES',\n    'FILTER',\n    'FIRST_VALUE',\n    'FLATTEN',\n    'FLOOR',\n    'FORMAT',\n    'FORMAT_DATETIME',\n    'FORMAT_NUMBER',\n    'FROM_BASE',\n    'FROM_BASE32',\n    'FROM_BASE64',\n    'FROM_BASE64URL',\n    'FROM_BIG_ENDIAN_32',\n    'FROM_BIG_ENDIAN_64',\n    'FROM_ENCODED_POLYLINE',\n    'FROM_GEOJSON_GEOMETRY',\n    'FROM_HEX',\n    'FROM_IEEE754_32',\n    'FROM_IEEE754_64',\n    'FROM_ISO8601_DATE',\n    'FROM_ISO8601_TIMESTAMP',\n    'FROM_ISO8601_TIMESTAMP_NANOS',\n    'FROM_UNIXTIME',\n    'FROM_UNIXTIME_NANOS',\n    'FROM_UTF8',\n    'GEOMETRIC_MEAN',\n    'GEOMETRY_FROM_HADOOP_SHAPE',\n    'GEOMETRY_INVALID_REASON',\n    'GEOMETRY_NEAREST_POINTS',\n    'GEOMETRY_TO_BING_TILES',\n    'GEOMETRY_UNION',\n    'GEOMETRY_UNION_AGG',\n    'GREATEST',\n    'GREAT_CIRCLE_DISTANCE',\n    'HAMMING_DISTANCE',\n    'HASH_COUNTS',\n    'HISTOGRAM',\n    'HMAC_MD5',\n    'HMAC_SHA1',\n    'HMAC_SHA256',\n    'HMAC_SHA512',\n    'HOUR',\n    'HUMAN_READABLE_SECONDS',\n    'IF',\n    'INDEX',\n    'INFINITY',\n    'INTERSECTION_CARDINALITY',\n    'INVERSE_BETA_CDF',\n    'INVERSE_NORMAL_CDF',\n    'IS_FINITE',\n    'IS_INFINITE',\n    'IS_JSON_SCALAR',\n    'IS_NAN',\n    'JACCARD_INDEX',\n    'JSON_ARRAY_CONTAINS',\n    'JSON_ARRAY_GET',\n    'JSON_ARRAY_LENGTH',\n    'JSON_EXISTS',\n    'JSON_EXTRACT',\n    'JSON_EXTRACT_SCALAR',\n    'JSON_FORMAT',\n    'JSON_PARSE',\n    'JSON_QUERY',\n    'JSON_SIZE',\n    'JSON_VALUE',\n    'KURTOSIS',\n    'LAG',\n    'LAST_DAY_OF_MONTH',\n    'LAST_VALUE',\n    'LEAD',\n    'LEARN_CLASSIFIER',\n    'LEARN_LIBSVM_CLASSIFIER',\n    'LEARN_LIBSVM_REGRESSOR',\n    'LEARN_REGRESSOR',\n    'LEAST',\n    'LENGTH',\n    'LEVENSHTEIN_DISTANCE',\n    'LINE_INTERPOLATE_POINT',\n    'LINE_INTERPOLATE_POINTS',\n    'LINE_LOCATE_POINT',\n    'LISTAGG',\n    'LN',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'LUHN_CHECK',\n    'MAKE_SET_DIGEST',\n    'MAP',\n    'MAP_AGG',\n    'MAP_CONCAT',\n    'MAP_ENTRIES',\n    'MAP_FILTER',\n    'MAP_FROM_ENTRIES',\n    'MAP_KEYS',\n    'MAP_UNION',\n    'MAP_VALUES',\n    'MAP_ZIP_WITH',\n    'MAX',\n    'MAX_BY',\n    'MD5',\n    'MERGE',\n    'MERGE_SET_DIGEST',\n    'MILLISECOND',\n    'MIN',\n    'MINUTE',\n    'MIN_BY',\n    'MOD',\n    'MONTH',\n    'MULTIMAP_AGG',\n    'MULTIMAP_FROM_ENTRIES',\n    'MURMUR3',\n    'NAN',\n    'NGRAMS',\n    'NONE_MATCH',\n    'NORMALIZE',\n    'NORMAL_CDF',\n    'NOW',\n    'NTH_VALUE',\n    'NTILE',\n    'NULLIF',\n    'NUMERIC_HISTOGRAM',\n    'OBJECTID',\n    'OBJECTID_TIMESTAMP',\n    'PARSE_DATA_SIZE',\n    'PARSE_DATETIME',\n    'PARSE_DURATION',\n    'PERCENT_RANK',\n    'PI',\n    'POSITION',\n    'POW',\n    'POWER',\n    'QDIGEST_AGG',\n    'QUARTER',\n    'RADIANS',\n    'RAND',\n    'RANDOM',\n    'RANK',\n    'REDUCE',\n    'REDUCE_AGG',\n    'REGEXP_COUNT',\n    'REGEXP_EXTRACT',\n    'REGEXP_EXTRACT_ALL',\n    'REGEXP_LIKE',\n    'REGEXP_POSITION',\n    'REGEXP_REPLACE',\n    'REGEXP_SPLIT',\n    'REGRESS',\n    'REGR_INTERCEPT',\n    'REGR_SLOPE',\n    'RENDER',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'RGB',\n    'ROUND',\n    'ROW_NUMBER',\n    'RPAD',\n    'RTRIM',\n    'SECOND',\n    'SEQUENCE',\n    'SHA1',\n    'SHA256',\n    'SHA512',\n    'SHUFFLE',\n    'SIGN',\n    'SIMPLIFY_GEOMETRY',\n    'SIN',\n    'SKEWNESS',\n    'SLICE',\n    'SOUNDEX',\n    'SPATIAL_PARTITIONING',\n    'SPATIAL_PARTITIONS',\n    'SPLIT',\n    'SPLIT_PART',\n    'SPLIT_TO_MAP',\n    'SPLIT_TO_MULTIMAP',\n    'SPOOKY_HASH_V2_32',\n    'SPOOKY_HASH_V2_64',\n    'SQRT',\n    'STARTS_WITH',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STRPOS',\n    'ST_AREA',\n    'ST_ASBINARY',\n    'ST_ASTEXT',\n    'ST_BOUNDARY',\n    'ST_BUFFER',\n    'ST_CENTROID',\n    'ST_CONTAINS',\n    'ST_CONVEXHULL',\n    'ST_COORDDIM',\n    'ST_CROSSES',\n    'ST_DIFFERENCE',\n    'ST_DIMENSION',\n    'ST_DISJOINT',\n    'ST_DISTANCE',\n    'ST_ENDPOINT',\n    'ST_ENVELOPE',\n    'ST_ENVELOPEASPTS',\n    'ST_EQUALS',\n    'ST_EXTERIORRING',\n    'ST_GEOMETRIES',\n    'ST_GEOMETRYFROMTEXT',\n    'ST_GEOMETRYN',\n    'ST_GEOMETRYTYPE',\n    'ST_GEOMFROMBINARY',\n    'ST_INTERIORRINGN',\n    'ST_INTERIORRINGS',\n    'ST_INTERSECTION',\n    'ST_INTERSECTS',\n    'ST_ISCLOSED',\n    'ST_ISEMPTY',\n    'ST_ISRING',\n    'ST_ISSIMPLE',\n    'ST_ISVALID',\n    'ST_LENGTH',\n    'ST_LINEFROMTEXT',\n    'ST_LINESTRING',\n    'ST_MULTIPOINT',\n    'ST_NUMGEOMETRIES',\n    'ST_NUMINTERIORRING',\n    'ST_NUMPOINTS',\n    'ST_OVERLAPS',\n    'ST_POINT',\n    'ST_POINTN',\n    'ST_POINTS',\n    'ST_POLYGON',\n    'ST_RELATE',\n    'ST_STARTPOINT',\n    'ST_SYMDIFFERENCE',\n    'ST_TOUCHES',\n    'ST_UNION',\n    'ST_WITHIN',\n    'ST_X',\n    'ST_XMAX',\n    'ST_XMIN',\n    'ST_Y',\n    'ST_YMAX',\n    'ST_YMIN',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUM',\n    'TAN',\n    'TANH',\n    'TDIGEST_AGG',\n    'TIMESTAMP_OBJECTID',\n    'TIMEZONE_HOUR',\n    'TIMEZONE_MINUTE',\n    'TO_BASE',\n    'TO_BASE32',\n    'TO_BASE64',\n    'TO_BASE64URL',\n    'TO_BIG_ENDIAN_32',\n    'TO_BIG_ENDIAN_64',\n    'TO_CHAR',\n    'TO_DATE',\n    'TO_ENCODED_POLYLINE',\n    'TO_GEOJSON_GEOMETRY',\n    'TO_GEOMETRY',\n    'TO_HEX',\n    'TO_IEEE754_32',\n    'TO_IEEE754_64',\n    'TO_ISO8601',\n    'TO_MILLISECONDS',\n    'TO_SPHERICAL_GEOGRAPHY',\n    'TO_TIMESTAMP',\n    'TO_UNIXTIME',\n    'TO_UTF8',\n    'TRANSFORM',\n    'TRANSFORM_KEYS',\n    'TRANSFORM_VALUES',\n    'TRANSLATE',\n    'TRIM',\n    'TRIM_ARRAY',\n    'TRUNCATE',\n    'TRY',\n    'TRY_CAST',\n    'TYPEOF',\n    'UPPER',\n    'URL_DECODE',\n    'URL_ENCODE',\n    'URL_EXTRACT_FRAGMENT',\n    'URL_EXTRACT_HOST',\n    'URL_EXTRACT_PARAMETER',\n    'URL_EXTRACT_PATH',\n    'URL_EXTRACT_PORT',\n    'URL_EXTRACT_PROTOCOL',\n    'URL_EXTRACT_QUERY',\n    'UUID',\n    'VALUES_AT_QUANTILES',\n    'VALUE_AT_QUANTILE',\n    'VARIANCE',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VERSION',\n    'WEEK',\n    'WEEK_OF_YEAR',\n    'WIDTH_BUCKET',\n    'WILSON_INTERVAL_LOWER',\n    'WILSON_INTERVAL_UPPER',\n    'WITH_TIMEZONE',\n    'WORD_STEM',\n    'XXHASH64',\n    'YEAR',\n    'YEAR_OF_WEEK',\n    'YOW',\n    'ZIP',\n    'ZIP_WITH'\n  ],\n  // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-recognition-expressions\n  rowPattern: ['CLASSIFIER', 'FIRST', 'LAST', 'MATCH_NUMBER', 'NEXT', 'PERMUTE', 'PREV']\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L858-L1128\n  all: [\n    'ABSENT',\n    'ADD',\n    'ADMIN',\n    'AFTER',\n    'ALL',\n    'ALTER',\n    'ANALYZE',\n    'AND',\n    'ANY',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'AT',\n    'AUTHORIZATION',\n    'BERNOULLI',\n    'BETWEEN',\n    'BOTH',\n    'BY',\n    'CALL',\n    'CASCADE',\n    'CASE',\n    'CATALOGS',\n    'COLUMN',\n    'COLUMNS',\n    'COMMENT',\n    'COMMIT',\n    'COMMITTED',\n    'CONDITIONAL',\n    'CONSTRAINT',\n    'COPARTITION',\n    'CREATE',\n    'CROSS',\n    'CUBE',\n    'CURRENT',\n    'CURRENT_PATH',\n    'CURRENT_ROLE',\n    'DATA',\n    'DEALLOCATE',\n    'DEFAULT',\n    'DEFINE',\n    'DEFINER',\n    'DELETE',\n    'DENY',\n    'DESC',\n    'DESCRIBE',\n    'DESCRIPTOR',\n    'DISTINCT',\n    'DISTRIBUTED',\n    'DOUBLE',\n    'DROP',\n    'ELSE',\n    'EMPTY',\n    'ENCODING',\n    'END',\n    'ERROR',\n    'ESCAPE',\n    'EXCEPT',\n    'EXCLUDING',\n    'EXECUTE',\n    'EXISTS',\n    'EXPLAIN',\n    'FALSE',\n    'FETCH',\n    'FINAL',\n    'FIRST',\n    'FOLLOWING',\n    'FOR',\n    'FROM',\n    'FULL',\n    'FUNCTIONS',\n    'GRANT',\n    'GRANTED',\n    'GRANTS',\n    'GRAPHVIZ',\n    'GROUP',\n    'GROUPING',\n    'GROUPS',\n    'HAVING',\n    'IGNORE',\n    'IN',\n    'INCLUDING',\n    'INITIAL',\n    'INNER',\n    'INPUT',\n    'INSERT',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'INVOKER',\n    'IO',\n    'IS',\n    'ISOLATION',\n    'JOIN',\n    'JSON',\n    'JSON_ARRAY',\n    'JSON_OBJECT',\n    'KEEP',\n    'KEY',\n    'KEYS',\n    'LAST',\n    'LATERAL',\n    'LEADING',\n    'LEFT',\n    'LEVEL',\n    'LIKE',\n    'LIMIT',\n    'LOCAL',\n    'LOGICAL',\n    'MATCH',\n    'MATCHED',\n    'MATCHES',\n    'MATCH_RECOGNIZE',\n    'MATERIALIZED',\n    'MEASURES',\n    'NATURAL',\n    'NEXT',\n    'NFC',\n    'NFD',\n    'NFKC',\n    'NFKD',\n    'NO',\n    'NONE',\n    'NOT',\n    'NULL',\n    'NULLS',\n    'OBJECT',\n    'OF',\n    'OFFSET',\n    'OMIT',\n    'ON',\n    'ONE',\n    'ONLY',\n    'OPTION',\n    'OR',\n    'ORDER',\n    'ORDINALITY',\n    'OUTER',\n    'OUTPUT',\n    'OVER',\n    'OVERFLOW',\n    'PARTITION',\n    'PARTITIONS',\n    'PASSING',\n    'PAST',\n    'PATH',\n    'PATTERN',\n    'PER',\n    'PERMUTE',\n    'PRECEDING',\n    'PRECISION',\n    'PREPARE',\n    'PRIVILEGES',\n    'PROPERTIES',\n    'PRUNE',\n    'QUOTES',\n    'RANGE',\n    'READ',\n    'RECURSIVE',\n    'REFRESH',\n    'RENAME',\n    'REPEATABLE',\n    'RESET',\n    'RESPECT',\n    'RESTRICT',\n    'RETURNING',\n    'REVOKE',\n    'RIGHT',\n    'ROLE',\n    'ROLES',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROW',\n    'ROWS',\n    'RUNNING',\n    'SCALAR',\n    'SCHEMA',\n    'SCHEMAS',\n    'SECURITY',\n    'SEEK',\n    'SELECT',\n    'SERIALIZABLE',\n    'SESSION',\n    'SET',\n    'SETS',\n    'SHOW',\n    'SKIP',\n    'SOME',\n    'START',\n    'STATS',\n    'STRING',\n    'SUBSET',\n    'SYSTEM',\n    'TABLE',\n    'TABLES',\n    'TABLESAMPLE',\n    'TEXT',\n    'THEN',\n    'TIES',\n    'TIME',\n    'TIMESTAMP',\n    'TO',\n    'TRAILING',\n    'TRANSACTION',\n    'TRUE',\n    'TYPE',\n    'UESCAPE',\n    'UNBOUNDED',\n    'UNCOMMITTED',\n    'UNCONDITIONAL',\n    'UNION',\n    'UNIQUE',\n    'UNKNOWN',\n    'UNMATCHED',\n    'UNNEST',\n    'UPDATE',\n    'USE',\n    'USER',\n    'USING',\n    'UTF16',\n    'UTF32',\n    'UTF8',\n    'VALIDATE',\n    'VALUE',\n    'VALUES',\n    'VERBOSE',\n    'VIEW',\n    'WHEN',\n    'WHERE',\n    'WINDOW',\n    'WITH',\n    'WITHIN',\n    'WITHOUT',\n    'WORK',\n    'WRAPPER',\n    'WRITE',\n    'ZONE'\n  ],\n  // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168\n  // or https://trino.io/docs/current/language/types.html\n  types: [\n    'BIGINT',\n    'INT',\n    'INTEGER',\n    'SMALLINT',\n    'TINYINT',\n    'BOOLEAN',\n    'DATE',\n    'DECIMAL',\n    'REAL',\n    'DOUBLE',\n    'HYPERLOGLOG',\n    'QDIGEST',\n    'TDIGEST',\n    'P4HYPERLOGLOG',\n    'INTERVAL',\n    'TIMESTAMP',\n    'TIME',\n    'VARBINARY',\n    'VARCHAR',\n    'CHAR',\n    'ROW',\n    'ARRAY',\n    'MAP',\n    'JSON',\n    'JSON2016',\n    'IPADDRESS',\n    'GEOMETRY',\n    'UUID',\n    'SETDIGEST',\n    'JONIREGEXP',\n    'RE2JREGEXP',\n    'LIKEPATTERN',\n    'COLOR',\n    'CODEPOINTS',\n    'FUNCTION',\n    'JSONPATH'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './trino.functions.js';\nimport { keywords } from './trino.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L41\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE] [MATERIALIZED] VIEW',\n  'CREATE TABLE [IF NOT EXISTS]',\n  // MATCH_RECOGNIZE\n  'MATCH_RECOGNIZE',\n  'MEASURES',\n  'ONE ROW PER MATCH',\n  'ALL ROWS PER MATCH',\n  'AFTER MATCH',\n  'PATTERN',\n  'SUBSET',\n  'DEFINE'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'ADD COLUMN [IF NOT EXISTS]',\n  'DROP COLUMN [IF EXISTS]',\n  'RENAME COLUMN [IF EXISTS]',\n  'RENAME TO',\n  'SET AUTHORIZATION [USER | ROLE]',\n  'SET PROPERTIES',\n  'EXECUTE',\n  // - truncate:\n  'TRUNCATE TABLE',\n\n  // other\n  'ALTER SCHEMA',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER VIEW',\n  'CREATE SCHEMA',\n  'CREATE ROLE',\n  'DROP SCHEMA',\n  'DROP MATERIALIZED VIEW',\n  'DROP VIEW',\n  'DROP ROLE',\n  // Auxiliary\n  'EXPLAIN',\n  'ANALYZE',\n  'EXPLAIN ANALYZE',\n  'EXPLAIN ANALYZE VERBOSE',\n  'USE',\n\n  'COMMENT ON TABLE',\n  'COMMENT ON COLUMN',\n  'DESCRIBE INPUT',\n  'DESCRIBE OUTPUT',\n\n  'REFRESH MATERIALIZED VIEW',\n  'RESET SESSION',\n  'SET SESSION',\n  'SET PATH',\n  'SET TIME ZONE',\n\n  'SHOW GRANTS',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE SCHEMA',\n  'SHOW CREATE VIEW',\n  'SHOW CREATE MATERIALIZED VIEW',\n  'SHOW TABLES',\n  'SHOW SCHEMAS',\n  'SHOW CATALOGS',\n  'SHOW COLUMNS',\n  'SHOW STATS FOR',\n  'SHOW ROLES',\n  'SHOW CURRENT ROLES',\n  'SHOW ROLE GRANTS',\n  'SHOW FUNCTIONS',\n  'SHOW SESSION'\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L231-L235\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L288-L291\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]'\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L299-L313\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN'\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE | GROUPS} BETWEEN']);\n\nexport const trino: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    // Trino also supports {- ... -} parenthesis.\n    // The formatting of these currently works out as a result of { and -\n    // not getting a space added in-between.\n    // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-syntax\n    extraParens: ['[]', '{}'],\n    // https://trino.io/docs/current/language/types.html#string\n    // https://trino.io/docs/current/language/types.html#varbinary\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['U&'] },\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true }\n    ],\n    // https://trino.io/docs/current/language/reserved.html\n    identTypes: ['\"\"-qq'],\n    paramTypes: { positional: true },\n    operators: [\n      '%',\n      '->',\n      ':',\n      '||',\n      // Row pattern syntax\n      '|',\n      '^',\n      '$'\n      // '?', conflicts with positional placeholders\n    ]\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15\n  aggregate: [\n    'APPROX_COUNT_DISTINCT',\n    'AVG',\n    'CHECKSUM_AGG',\n    'COUNT',\n    'COUNT_BIG',\n    'GROUPING',\n    'GROUPING_ID',\n    'MAX',\n    'MIN',\n    'STDEV',\n    'STDEVP',\n    'SUM',\n    'VAR',\n    'VARP'\n  ],\n  analytic: [\n    'CUME_DIST',\n    'FIRST_VALUE',\n    'LAG',\n    'LAST_VALUE',\n    'LEAD',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PERCENT_RANK',\n    'Collation - COLLATIONPROPERTY',\n    'Collation - TERTIARY_WEIGHTS'\n  ],\n  configuration: [\n    '@@DBTS',\n    '@@LANGID',\n    '@@LANGUAGE',\n    '@@LOCK_TIMEOUT',\n    '@@MAX_CONNECTIONS',\n    '@@MAX_PRECISION',\n    '@@NESTLEVEL',\n    '@@OPTIONS',\n    '@@REMSERVER',\n    '@@SERVERNAME',\n    '@@SERVICENAME',\n    '@@SPID',\n    '@@TEXTSIZE',\n    '@@VERSION'\n  ],\n  conversion: ['CAST', 'CONVERT', 'PARSE', 'TRY_CAST', 'TRY_CONVERT', 'TRY_PARSE'],\n  cryptographic: [\n    'ASYMKEY_ID',\n    'ASYMKEYPROPERTY',\n    'CERTPROPERTY',\n    'CERT_ID',\n    'CRYPT_GEN_RANDOM',\n    'DECRYPTBYASYMKEY',\n    'DECRYPTBYCERT',\n    'DECRYPTBYKEY',\n    'DECRYPTBYKEYAUTOASYMKEY',\n    'DECRYPTBYKEYAUTOCERT',\n    'DECRYPTBYPASSPHRASE',\n    'ENCRYPTBYASYMKEY',\n    'ENCRYPTBYCERT',\n    'ENCRYPTBYKEY',\n    'ENCRYPTBYPASSPHRASE',\n    'HASHBYTES',\n    'IS_OBJECTSIGNED',\n    'KEY_GUID',\n    'KEY_ID',\n    'KEY_NAME',\n    'SIGNBYASYMKEY',\n    'SIGNBYCERT',\n    'SYMKEYPROPERTY',\n    'VERIFYSIGNEDBYCERT',\n    'VERIFYSIGNEDBYASYMKEY'\n  ],\n  cursor: ['@@CURSOR_ROWS', '@@FETCH_STATUS', 'CURSOR_STATUS'],\n  dataType: ['DATALENGTH', 'IDENT_CURRENT', 'IDENT_INCR', 'IDENT_SEED', 'IDENTITY', 'SQL_VARIANT_PROPERTY'],\n  datetime: [\n    '@@DATEFIRST',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_TIMEZONE',\n    'CURRENT_TIMEZONE_ID',\n    'DATEADD',\n    'DATEDIFF',\n    'DATEDIFF_BIG',\n    'DATEFROMPARTS',\n    'DATENAME',\n    'DATEPART',\n    'DATETIME2FROMPARTS',\n    'DATETIMEFROMPARTS',\n    'DATETIMEOFFSETFROMPARTS',\n    'DAY',\n    'EOMONTH',\n    'GETDATE',\n    'GETUTCDATE',\n    'ISDATE',\n    'MONTH',\n    'SMALLDATETIMEFROMPARTS',\n    'SWITCHOFFSET',\n    'SYSDATETIME',\n    'SYSDATETIMEOFFSET',\n    'SYSUTCDATETIME',\n    'TIMEFROMPARTS',\n    'TODATETIMEOFFSET',\n    'YEAR',\n    'JSON',\n    'ISJSON',\n    'JSON_VALUE',\n    'JSON_QUERY',\n    'JSON_MODIFY'\n  ],\n  mathematical: [\n    'ABS',\n    'ACOS',\n    'ASIN',\n    'ATAN',\n    'ATN2',\n    'CEILING',\n    'COS',\n    'COT',\n    'DEGREES',\n    'EXP',\n    'FLOOR',\n    'LOG',\n    'LOG10',\n    'PI',\n    'POWER',\n    'RADIANS',\n    'RAND',\n    'ROUND',\n    'SIGN',\n    'SIN',\n    'SQRT',\n    'SQUARE',\n    'TAN',\n    'CHOOSE',\n    'GREATEST',\n    'IIF',\n    'LEAST'\n  ],\n  metadata: [\n    '@@PROCID',\n    'APP_NAME',\n    'APPLOCK_MODE',\n    'APPLOCK_TEST',\n    'ASSEMBLYPROPERTY',\n    'COL_LENGTH',\n    'COL_NAME',\n    'COLUMNPROPERTY',\n    'DATABASEPROPERTYEX',\n    'DB_ID',\n    'DB_NAME',\n    'FILE_ID',\n    'FILE_IDEX',\n    'FILE_NAME',\n    'FILEGROUP_ID',\n    'FILEGROUP_NAME',\n    'FILEGROUPPROPERTY',\n    'FILEPROPERTY',\n    'FILEPROPERTYEX',\n    'FULLTEXTCATALOGPROPERTY',\n    'FULLTEXTSERVICEPROPERTY',\n    'INDEX_COL',\n    'INDEXKEY_PROPERTY',\n    'INDEXPROPERTY',\n    'NEXT VALUE FOR',\n    'OBJECT_DEFINITION',\n    'OBJECT_ID',\n    'OBJECT_NAME',\n    'OBJECT_SCHEMA_NAME',\n    'OBJECTPROPERTY',\n    'OBJECTPROPERTYEX',\n    'ORIGINAL_DB_NAME',\n    'PARSENAME',\n    'SCHEMA_ID',\n    'SCHEMA_NAME',\n    'SCOPE_IDENTITY',\n    'SERVERPROPERTY',\n    'STATS_DATE',\n    'TYPE_ID',\n    'TYPE_NAME',\n    'TYPEPROPERTY'\n  ],\n  ranking: ['DENSE_RANK', 'NTILE', 'RANK', 'ROW_NUMBER', 'PUBLISHINGSERVERNAME'],\n  security: [\n    'CERTENCODED',\n    'CERTPRIVATEKEY',\n    'CURRENT_USER',\n    'DATABASE_PRINCIPAL_ID',\n    'HAS_DBACCESS',\n    'HAS_PERMS_BY_NAME',\n    'IS_MEMBER',\n    'IS_ROLEMEMBER',\n    'IS_SRVROLEMEMBER',\n    'LOGINPROPERTY',\n    'ORIGINAL_LOGIN',\n    'PERMISSIONS',\n    'PWDENCRYPT',\n    'PWDCOMPARE',\n    'SESSION_USER',\n    'SESSIONPROPERTY',\n    'SUSER_ID',\n    'SUSER_NAME',\n    'SUSER_SID',\n    'SUSER_SNAME',\n    'SYSTEM_USER',\n    'USER',\n    'USER_ID',\n    'USER_NAME'\n  ],\n  string: [\n    'ASCII',\n    'CHAR',\n    'CHARINDEX',\n    'CONCAT',\n    'CONCAT_WS',\n    'DIFFERENCE',\n    'FORMAT',\n    'LEFT',\n    'LEN',\n    'LOWER',\n    'LTRIM',\n    'NCHAR',\n    'PATINDEX',\n    'QUOTENAME',\n    'REPLACE',\n    'REPLICATE',\n    'REVERSE',\n    'RIGHT',\n    'RTRIM',\n    'SOUNDEX',\n    'SPACE',\n    'STR',\n    'STRING_AGG',\n    'STRING_ESCAPE',\n    'STUFF',\n    'SUBSTRING',\n    'TRANSLATE',\n    'TRIM',\n    'UNICODE',\n    'UPPER'\n  ],\n  system: [\n    '$PARTITION',\n    '@@ERROR',\n    '@@IDENTITY',\n    '@@PACK_RECEIVED',\n    '@@ROWCOUNT',\n    '@@TRANCOUNT',\n    'BINARY_CHECKSUM',\n    'CHECKSUM',\n    'COMPRESS',\n    'CONNECTIONPROPERTY',\n    'CONTEXT_INFO',\n    'CURRENT_REQUEST_ID',\n    'CURRENT_TRANSACTION_ID',\n    'DECOMPRESS',\n    'ERROR_LINE',\n    'ERROR_MESSAGE',\n    'ERROR_NUMBER',\n    'ERROR_PROCEDURE',\n    'ERROR_SEVERITY',\n    'ERROR_STATE',\n    'FORMATMESSAGE',\n    'GET_FILESTREAM_TRANSACTION_CONTEXT',\n    'GETANSINULL',\n    'HOST_ID',\n    'HOST_NAME',\n    'ISNULL',\n    'ISNUMERIC',\n    'MIN_ACTIVE_ROWVERSION',\n    'NEWID',\n    'NEWSEQUENTIALID',\n    'ROWCOUNT_BIG',\n    'SESSION_CONTEXT',\n    'XACT_STATE'\n  ],\n  statistical: [\n    '@@CONNECTIONS',\n    '@@CPU_BUSY',\n    '@@IDLE',\n    '@@IO_BUSY',\n    '@@PACK_SENT',\n    '@@PACKET_ERRORS',\n    '@@TIMETICKS',\n    '@@TOTAL_ERRORS',\n    '@@TOTAL_READ',\n    '@@TOTAL_WRITE',\n    'TEXTPTR',\n    'TEXTVALID'\n  ],\n  trigger: ['COLUMNS_UPDATED', 'EVENTDATA', 'TRIGGER_NESTLEVEL', 'UPDATE'],\n  // Shorthand functions to use in place of CASE expression\n  caseAbbrev: ['COALESCE', 'NULLIF'],\n  // Parameterized types\n  // https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15\n  dataTypes: [\n    'DECIMAL',\n    'NUMERIC',\n    'FLOAT',\n    'REAL',\n    'DATETIME2',\n    'DATETIMEOFFSET',\n    'TIME',\n    'CHAR',\n    'VARCHAR',\n    'NCHAR',\n    'NVARCHAR',\n    'BINARY',\n    'VARBINARY'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15\n  standard: [\n    'ADD',\n    'ALL',\n    'ALTER',\n    'AND',\n    'ANY',\n    'AS',\n    'ASC',\n    'AUTHORIZATION',\n    'BACKUP',\n    'BEGIN',\n    'BETWEEN',\n    'BREAK',\n    'BROWSE',\n    'BULK',\n    'BY',\n    'CASCADE',\n    'CHECK',\n    'CHECKPOINT',\n    'CLOSE',\n    'CLUSTERED',\n    'COALESCE',\n    'COLLATE',\n    'COLUMN',\n    'COMMIT',\n    'COMPUTE',\n    'CONSTRAINT',\n    'CONTAINS',\n    'CONTAINSTABLE',\n    'CONTINUE',\n    'CONVERT',\n    'CREATE',\n    'CROSS',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURSOR',\n    'DATABASE',\n    'DBCC',\n    'DEALLOCATE',\n    'DECLARE',\n    'DEFAULT',\n    'DELETE',\n    'DENY',\n    'DESC',\n    'DISK',\n    'DISTINCT',\n    'DISTRIBUTED',\n    'DOUBLE',\n    'DROP',\n    'DUMP',\n    'ERRLVL',\n    'ESCAPE',\n    'EXEC',\n    'EXECUTE',\n    'EXISTS',\n    'EXIT',\n    'EXTERNAL',\n    'FETCH',\n    'FILE',\n    'FILLFACTOR',\n    'FOR',\n    'FOREIGN',\n    'FREETEXT',\n    'FREETEXTTABLE',\n    'FROM',\n    'FULL',\n    'FUNCTION',\n    'GOTO',\n    'GRANT',\n    'GROUP',\n    'HAVING',\n    'HOLDLOCK',\n    'IDENTITY',\n    'IDENTITYCOL',\n    'IDENTITY_INSERT',\n    'IF',\n    'IN',\n    'INDEX',\n    'INNER',\n    'INSERT',\n    'INTERSECT',\n    'INTO',\n    'IS',\n    'JOIN',\n    'KEY',\n    'KILL',\n    'LEFT',\n    'LIKE',\n    'LINENO',\n    'LOAD',\n    'MERGE',\n    'NATIONAL',\n    'NOCHECK',\n    'NONCLUSTERED',\n    'NOT',\n    'NULL',\n    'NULLIF',\n    'OF',\n    'OFF',\n    'OFFSETS',\n    'ON',\n    'OPEN',\n    'OPENDATASOURCE',\n    'OPENQUERY',\n    'OPENROWSET',\n    'OPENXML',\n    'OPTION',\n    'OR',\n    'ORDER',\n    'OUTER',\n    'OVER',\n    'PERCENT',\n    'PIVOT',\n    'PLAN',\n    'PRECISION',\n    'PRIMARY',\n    'PRINT',\n    'PROC',\n    'PROCEDURE',\n    'PUBLIC',\n    'RAISERROR',\n    'READ',\n    'READTEXT',\n    'RECONFIGURE',\n    'REFERENCES',\n    'REPLICATION',\n    'RESTORE',\n    'RESTRICT',\n    'RETURN',\n    'REVERT',\n    'REVOKE',\n    'RIGHT',\n    'ROLLBACK',\n    'ROWCOUNT',\n    'ROWGUIDCOL',\n    'RULE',\n    'SAVE',\n    'SCHEMA',\n    'SECURITYAUDIT',\n    'SELECT',\n    'SEMANTICKEYPHRASETABLE',\n    'SEMANTICSIMILARITYDETAILSTABLE',\n    'SEMANTICSIMILARITYTABLE',\n    'SESSION_USER',\n    'SET',\n    'SETUSER',\n    'SHUTDOWN',\n    'SOME',\n    'STATISTICS',\n    'SYSTEM_USER',\n    'TABLE',\n    'TABLESAMPLE',\n    'TEXTSIZE',\n    'THEN',\n    'TO',\n    'TOP',\n    'TRAN',\n    'TRANSACTION',\n    'TRIGGER',\n    'TRUNCATE',\n    'TRY_CONVERT',\n    'TSEQUAL',\n    'UNION',\n    'UNIQUE',\n    'UNPIVOT',\n    'UPDATE',\n    'UPDATETEXT',\n    'USE',\n    'USER',\n    'VALUES',\n    'VARYING',\n    'VIEW',\n    'WAITFOR',\n    'WHERE',\n    'WHILE',\n    'WITH',\n    'WITHIN GROUP',\n    'WRITETEXT'\n  ],\n  odbc: [\n    'ABSOLUTE',\n    'ACTION',\n    'ADA',\n    'ADD',\n    'ALL',\n    'ALLOCATE',\n    'ALTER',\n    'AND',\n    'ANY',\n    'ARE',\n    'AS',\n    'ASC',\n    'ASSERTION',\n    'AT',\n    'AUTHORIZATION',\n    'AVG',\n    'BEGIN',\n    'BETWEEN',\n    'BIT',\n    'BIT_LENGTH',\n    'BOTH',\n    'BY',\n    'CASCADE',\n    'CASCADED',\n    'CAST',\n    'CATALOG',\n    'CHAR',\n    'CHARACTER',\n    'CHARACTER_LENGTH',\n    'CHAR_LENGTH',\n    'CHECK',\n    'CLOSE',\n    'COALESCE',\n    'COLLATE',\n    'COLLATION',\n    'COLUMN',\n    'COMMIT',\n    'CONNECT',\n    'CONNECTION',\n    'CONSTRAINT',\n    'CONSTRAINTS',\n    'CONTINUE',\n    'CONVERT',\n    'CORRESPONDING',\n    'COUNT',\n    'CREATE',\n    'CROSS',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURSOR',\n    'DATE',\n    'DAY',\n    'DEALLOCATE',\n    'DEC',\n    'DECIMAL',\n    'DECLARE',\n    'DEFAULT',\n    'DEFERRABLE',\n    'DEFERRED',\n    'DELETE',\n    'DESC',\n    'DESCRIBE',\n    'DESCRIPTOR',\n    'DIAGNOSTICS',\n    'DISCONNECT',\n    'DISTINCT',\n    'DOMAIN',\n    'DOUBLE',\n    'DROP',\n    'END-EXEC',\n    'ESCAPE',\n    'EXCEPTION',\n    'EXEC',\n    'EXECUTE',\n    'EXISTS',\n    'EXTERNAL',\n    'EXTRACT',\n    'FALSE',\n    'FETCH',\n    'FIRST',\n    'FLOAT',\n    'FOR',\n    'FOREIGN',\n    'FORTRAN',\n    'FOUND',\n    'FROM',\n    'FULL',\n    'GET',\n    'GLOBAL',\n    'GO',\n    'GOTO',\n    'GRANT',\n    'GROUP',\n    'HAVING',\n    'HOUR',\n    'IDENTITY',\n    'IMMEDIATE',\n    'IN',\n    'INCLUDE',\n    'INDEX',\n    'INDICATOR',\n    'INITIALLY',\n    'INNER',\n    'INPUT',\n    'INSENSITIVE',\n    'INSERT',\n    'INT',\n    'INTEGER',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'ISOLATION',\n    'JOIN',\n    'KEY',\n    'LANGUAGE',\n    'LAST',\n    'LEADING',\n    'LEFT',\n    'LEVEL',\n    'LIKE',\n    'LOCAL',\n    'LOWER',\n    'MATCH',\n    'MAX',\n    'MIN',\n    'MINUTE',\n    'MODULE',\n    'MONTH',\n    'NAMES',\n    'NATIONAL',\n    'NATURAL',\n    'NCHAR',\n    'NEXT',\n    'NO',\n    'NONE',\n    'NOT',\n    'NULL',\n    'NULLIF',\n    'NUMERIC',\n    'OCTET_LENGTH',\n    'OF',\n    'ONLY',\n    'OPEN',\n    'OPTION',\n    'OR',\n    'ORDER',\n    'OUTER',\n    'OUTPUT',\n    'OVERLAPS',\n    'PAD',\n    'PARTIAL',\n    'PASCAL',\n    'POSITION',\n    'PRECISION',\n    'PREPARE',\n    'PRESERVE',\n    'PRIMARY',\n    'PRIOR',\n    'PRIVILEGES',\n    'PROCEDURE',\n    'PUBLIC',\n    'READ',\n    'REAL',\n    'REFERENCES',\n    'RELATIVE',\n    'RESTRICT',\n    'REVOKE',\n    'RIGHT',\n    'ROLLBACK',\n    'ROWS',\n    'SCHEMA',\n    'SCROLL',\n    'SECOND',\n    'SECTION',\n    'SELECT',\n    'SESSION',\n    'SESSION_USER',\n    'SET',\n    'SIZE',\n    'SMALLINT',\n    'SOME',\n    'SPACE',\n    'SQL',\n    'SQLCA',\n    'SQLCODE',\n    'SQLERROR',\n    'SQLSTATE',\n    'SQLWARNING',\n    'SUBSTRING',\n    'SUM',\n    'SYSTEM_USER',\n    'TABLE',\n    'TEMPORARY',\n    'TIME',\n    'TIMESTAMP',\n    'TIMEZONE_HOUR',\n    'TIMEZONE_MINUTE',\n    'TO',\n    'TRAILING',\n    'TRANSACTION',\n    'TRANSLATE',\n    'TRANSLATION',\n    'TRIM',\n    'TRUE',\n    'UNION',\n    'UNIQUE',\n    'UNKNOWN',\n    'UPDATE',\n    'UPPER',\n    'USAGE',\n    'USER',\n    'VALUE',\n    'VALUES',\n    'VARCHAR',\n    'VARYING',\n    'VIEW',\n    'WHENEVER',\n    'WHERE',\n    'WITH',\n    'WORK',\n    'WRITE',\n    'YEAR',\n    'ZONE'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './transactsql.functions.js';\nimport { keywords } from './transactsql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [BY TARGET | BY SOURCE] [THEN]',\n  'UPDATE SET',\n  // Data definition\n  'CREATE [OR ALTER] [MATERIALIZED] VIEW',\n  'CREATE TABLE'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD',\n  'DROP COLUMN [IF EXISTS]',\n  'ALTER COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15\n  'ADD SENSITIVITY CLASSIFICATION',\n  'ADD SIGNATURE',\n  'AGGREGATE',\n  'ANSI_DEFAULTS',\n  'ANSI_NULLS',\n  'ANSI_NULL_DFLT_OFF',\n  'ANSI_NULL_DFLT_ON',\n  'ANSI_PADDING',\n  'ANSI_WARNINGS',\n  'APPLICATION ROLE',\n  'ARITHABORT',\n  'ARITHIGNORE',\n  'ASSEMBLY',\n  'ASYMMETRIC KEY',\n  'AUTHORIZATION',\n  'AVAILABILITY GROUP',\n  'BACKUP',\n  'BACKUP CERTIFICATE',\n  'BACKUP MASTER KEY',\n  'BACKUP SERVICE MASTER KEY',\n  'BEGIN CONVERSATION TIMER',\n  'BEGIN DIALOG CONVERSATION',\n  'BROKER PRIORITY',\n  'BULK INSERT',\n  'CERTIFICATE',\n  'CLOSE MASTER KEY',\n  'CLOSE SYMMETRIC KEY',\n  'COLLATE',\n  'COLUMN ENCRYPTION KEY',\n  'COLUMN MASTER KEY',\n  'COLUMNSTORE INDEX',\n  'CONCAT_NULL_YIELDS_NULL',\n  'CONTEXT_INFO',\n  'CONTRACT',\n  'CREDENTIAL',\n  'CRYPTOGRAPHIC PROVIDER',\n  'CURSOR_CLOSE_ON_COMMIT',\n  'DATABASE',\n  'DATABASE AUDIT SPECIFICATION',\n  'DATABASE ENCRYPTION KEY',\n  'DATABASE HADR',\n  'DATABASE SCOPED CONFIGURATION',\n  'DATABASE SCOPED CREDENTIAL',\n  'DATABASE SET',\n  'DATEFIRST',\n  'DATEFORMAT',\n  'DEADLOCK_PRIORITY',\n  'DENY',\n  'DENY XML',\n  'DISABLE TRIGGER',\n  'ENABLE TRIGGER',\n  'END CONVERSATION',\n  'ENDPOINT',\n  'EVENT NOTIFICATION',\n  'EVENT SESSION',\n  'EXECUTE AS',\n  'EXTERNAL DATA SOURCE',\n  'EXTERNAL FILE FORMAT',\n  'EXTERNAL LANGUAGE',\n  'EXTERNAL LIBRARY',\n  'EXTERNAL RESOURCE POOL',\n  'EXTERNAL TABLE',\n  'FIPS_FLAGGER',\n  'FMTONLY',\n  'FORCEPLAN',\n  'FULLTEXT CATALOG',\n  'FULLTEXT INDEX',\n  'FULLTEXT STOPLIST',\n  'FUNCTION',\n  'GET CONVERSATION GROUP',\n  'GET_TRANSMISSION_STATUS',\n  'GRANT',\n  'GRANT XML',\n  'IDENTITY_INSERT',\n  'IMPLICIT_TRANSACTIONS',\n  'INDEX',\n  'LANGUAGE',\n  'LOCK_TIMEOUT',\n  'LOGIN',\n  'MASTER KEY',\n  'MESSAGE TYPE',\n  'MOVE CONVERSATION',\n  'NOCOUNT',\n  'NOEXEC',\n  'NUMERIC_ROUNDABORT',\n  'OFFSETS',\n  'OPEN MASTER KEY',\n  'OPEN SYMMETRIC KEY',\n  'PARSEONLY',\n  'PARTITION FUNCTION',\n  'PARTITION SCHEME',\n  'PROCEDURE',\n  'QUERY_GOVERNOR_COST_LIMIT',\n  'QUEUE',\n  'QUOTED_IDENTIFIER',\n  'RECEIVE',\n  'REMOTE SERVICE BINDING',\n  'REMOTE_PROC_TRANSACTIONS',\n  'RESOURCE GOVERNOR',\n  'RESOURCE POOL',\n  'RESTORE',\n  'RESTORE FILELISTONLY',\n  'RESTORE HEADERONLY',\n  'RESTORE LABELONLY',\n  'RESTORE MASTER KEY',\n  'RESTORE REWINDONLY',\n  'RESTORE SERVICE MASTER KEY',\n  'RESTORE VERIFYONLY',\n  'REVERT',\n  'REVOKE',\n  'REVOKE XML',\n  'ROLE',\n  'ROUTE',\n  'ROWCOUNT',\n  'RULE',\n  'SCHEMA',\n  'SEARCH PROPERTY LIST',\n  'SECURITY POLICY',\n  'SELECTIVE XML INDEX',\n  'SEND',\n  'SENSITIVITY CLASSIFICATION',\n  'SEQUENCE',\n  'SERVER AUDIT',\n  'SERVER AUDIT SPECIFICATION',\n  'SERVER CONFIGURATION',\n  'SERVER ROLE',\n  'SERVICE',\n  'SERVICE MASTER KEY',\n  'SETUSER',\n  'SHOWPLAN_ALL',\n  'SHOWPLAN_TEXT',\n  'SHOWPLAN_XML',\n  'SIGNATURE',\n  'SPATIAL INDEX',\n  'STATISTICS',\n  'STATISTICS IO',\n  'STATISTICS PROFILE',\n  'STATISTICS TIME',\n  'STATISTICS XML',\n  'SYMMETRIC KEY',\n  'SYNONYM',\n  'TABLE',\n  'TABLE IDENTITY',\n  'TEXTSIZE',\n  'TRANSACTION ISOLATION LEVEL',\n  'TRIGGER',\n  'TYPE',\n  'UPDATE STATISTICS',\n  'USER',\n  'WORKLOAD GROUP',\n  'XACT_ABORT',\n  'XML INDEX',\n  'XML SCHEMA COLLECTION'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  // non-standard joins\n  '{CROSS | OUTER} APPLY'\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE} BETWEEN'\n]);\n\n// https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15\nexport const transactsql: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    nestedBlockComments: true,\n    stringTypes: [{ quote: \"''-qq\", prefixes: ['N'] }],\n    identTypes: [`\"\"-qq`, '[]'],\n    identChars: { first: '#@', rest: '#@$' },\n    paramTypes: { named: ['@'], quoted: ['@'] },\n    operators: ['%', '&', '|', '^', '~', '!<', '!>', '+=', '-=', '*=', '/=', '%=', '|=', '&=', '^=', '::']\n    // TODO: Support for money constants\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/restricted-keywords/list-of-restricted-keywords.html\n  all: [\n    'ABORT',\n    'ABSOLUTE',\n    'ACCESS',\n    'ACCESSIBLE',\n    'ACCOUNT',\n    'ACTION',\n    'ACTIVE',\n    'ADD',\n    'ADMIN',\n    'AFTER',\n    'AGAINST',\n    'AGGREGATE',\n    'AGGREGATES',\n    'AGGREGATOR',\n    'AGGREGATOR_ID',\n    'AGGREGATOR_PLAN_HASH',\n    'AGGREGATORS',\n    'ALGORITHM',\n    'ALL',\n    'ALSO',\n    'ALTER',\n    'ALWAYS',\n    'ANALYZE',\n    'AND',\n    'ANY',\n    'ARGHISTORY',\n    'ARRANGE',\n    'ARRANGEMENT',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'ASCII',\n    'ASENSITIVE',\n    'ASM',\n    'ASSERTION',\n    'ASSIGNMENT',\n    'AST',\n    'ASYMMETRIC',\n    'ASYNC',\n    'AT',\n    'ATTACH',\n    'ATTRIBUTE',\n    'AUTHORIZATION',\n    'AUTO',\n    'AUTO_INCREMENT',\n    'AUTO_REPROVISION',\n    'AUTOSTATS',\n    'AUTOSTATS_CARDINALITY_MODE',\n    'AUTOSTATS_ENABLED',\n    'AUTOSTATS_HISTOGRAM_MODE',\n    'AUTOSTATS_SAMPLING',\n    'AVAILABILITY',\n    'AVG',\n    'AVG_ROW_LENGTH',\n    'AVRO',\n    'AZURE',\n    'BACKGROUND',\n    '_BACKGROUND_THREADS_FOR_CLEANUP',\n    'BACKUP',\n    'BACKUP_HISTORY',\n    'BACKUP_ID',\n    'BACKWARD',\n    'BATCH',\n    'BATCHES',\n    'BATCH_INTERVAL',\n    '_BATCH_SIZE_LIMIT',\n    'BEFORE',\n    'BEGIN',\n    'BETWEEN',\n    'BIGINT',\n    'BINARY',\n    '_BINARY',\n    'BIT',\n    'BLOB',\n    'BOOL',\n    'BOOLEAN',\n    'BOOTSTRAP',\n    'BOTH',\n    '_BT',\n    'BTREE',\n    'BUCKET_COUNT',\n    'BUCKETS',\n    'BY',\n    'BYTE',\n    'BYTE_LENGTH',\n    'CACHE',\n    'CALL',\n    'CALL_FOR_PIPELINE',\n    'CALLED',\n    'CAPTURE',\n    'CASCADE',\n    'CASCADED',\n    'CASE',\n    'CATALOG',\n    'CHAIN',\n    'CHANGE',\n    'CHAR',\n    'CHARACTER',\n    'CHARACTERISTICS',\n    'CHARSET',\n    'CHECK',\n    'CHECKPOINT',\n    '_CHECK_CAN_CONNECT',\n    '_CHECK_CONSISTENCY',\n    'CHECKSUM',\n    '_CHECKSUM',\n    'CLASS',\n    'CLEAR',\n    'CLIENT',\n    'CLIENT_FOUND_ROWS',\n    'CLOSE',\n    'CLUSTER',\n    'CLUSTERED',\n    'CNF',\n    'COALESCE',\n    'COLLATE',\n    'COLLATION',\n    'COLUMN',\n    'COLUMNAR',\n    'COLUMNS',\n    'COLUMNSTORE',\n    'COLUMNSTORE_SEGMENT_ROWS',\n    'COMMENT',\n    'COMMENTS',\n    'COMMIT',\n    'COMMITTED',\n    '_COMMIT_LOG_TAIL',\n    'COMPACT',\n    'COMPILE',\n    'COMPRESSED',\n    'COMPRESSION',\n    'CONCURRENT',\n    'CONCURRENTLY',\n    'CONDITION',\n    'CONFIGURATION',\n    'CONNECTION',\n    'CONNECTIONS',\n    'CONFIG',\n    'CONSTRAINT',\n    'CONTAINS',\n    'CONTENT',\n    'CONTINUE',\n    '_CONTINUE_REPLAY',\n    'CONVERSION',\n    'CONVERT',\n    'COPY',\n    '_CORE',\n    'COST',\n    'CREATE',\n    'CREDENTIALS',\n    'CROSS',\n    'CUBE',\n    'CSV',\n    'CUME_DIST',\n    'CURRENT',\n    'CURRENT_CATALOG',\n    'CURRENT_DATE',\n    'CURRENT_SCHEMA',\n    'CURRENT_SECURITY_GROUPS',\n    'CURRENT_SECURITY_ROLES',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURSOR',\n    'CYCLE',\n    'DATA',\n    'DATABASE',\n    'DATABASES',\n    'DATE',\n    'DATETIME',\n    'DAY',\n    'DAY_HOUR',\n    'DAY_MICROSECOND',\n    'DAY_MINUTE',\n    'DAY_SECOND',\n    'DEALLOCATE',\n    'DEC',\n    'DECIMAL',\n    'DECLARE',\n    'DEFAULT',\n    'DEFAULTS',\n    'DEFERRABLE',\n    'DEFERRED',\n    'DEFINED',\n    'DEFINER',\n    'DELAYED',\n    'DELAY_KEY_WRITE',\n    'DELETE',\n    'DELIMITER',\n    'DELIMITERS',\n    'DENSE_RANK',\n    'DESC',\n    'DESCRIBE',\n    'DETACH',\n    'DETERMINISTIC',\n    'DICTIONARY',\n    'DIFFERENTIAL',\n    'DIRECTORY',\n    'DISABLE',\n    'DISCARD',\n    '_DISCONNECT',\n    'DISK',\n    'DISTINCT',\n    'DISTINCTROW',\n    'DISTRIBUTED_JOINS',\n    'DIV',\n    'DO',\n    'DOCUMENT',\n    'DOMAIN',\n    'DOUBLE',\n    'DROP',\n    '_DROP_PROFILE',\n    'DUAL',\n    'DUMP',\n    'DUPLICATE',\n    'DURABILITY',\n    'DYNAMIC',\n    'EARLIEST',\n    'EACH',\n    'ECHO',\n    'ELECTION',\n    'ELSE',\n    'ELSEIF',\n    'ENABLE',\n    'ENCLOSED',\n    'ENCODING',\n    'ENCRYPTED',\n    'END',\n    'ENGINE',\n    'ENGINES',\n    'ENUM',\n    'ERRORS',\n    'ESCAPE',\n    'ESCAPED',\n    'ESTIMATE',\n    'EVENT',\n    'EVENTS',\n    'EXCEPT',\n    'EXCLUDE',\n    'EXCLUDING',\n    'EXCLUSIVE',\n    'EXECUTE',\n    'EXISTS',\n    'EXIT',\n    'EXPLAIN',\n    'EXTENDED',\n    'EXTENSION',\n    'EXTERNAL',\n    'EXTERNAL_HOST',\n    'EXTERNAL_PORT',\n    'EXTRACTOR',\n    'EXTRACTORS',\n    'EXTRA_JOIN',\n    '_FAILOVER',\n    'FAILED_LOGIN_ATTEMPTS',\n    'FAILURE',\n    'FALSE',\n    'FAMILY',\n    'FAULT',\n    'FETCH',\n    'FIELDS',\n    'FILE',\n    'FILES',\n    'FILL',\n    'FIX_ALTER',\n    'FIXED',\n    'FLOAT',\n    'FLOAT4',\n    'FLOAT8',\n    'FLUSH',\n    'FOLLOWING',\n    'FOR',\n    'FORCE',\n    'FORCE_COMPILED_MODE',\n    'FORCE_INTERPRETER_MODE',\n    'FOREGROUND',\n    'FOREIGN',\n    'FORMAT',\n    'FORWARD',\n    'FREEZE',\n    'FROM',\n    'FS',\n    '_FSYNC',\n    'FULL',\n    'FULLTEXT',\n    'FUNCTION',\n    'FUNCTIONS',\n    'GC',\n    'GCS',\n    'GET_FORMAT',\n    '_GC',\n    '_GCX',\n    'GENERATE',\n    'GEOGRAPHY',\n    'GEOGRAPHYPOINT',\n    'GEOMETRY',\n    'GEOMETRYPOINT',\n    'GLOBAL',\n    '_GLOBAL_VERSION_TIMESTAMP',\n    'GRANT',\n    'GRANTED',\n    'GRANTS',\n    'GROUP',\n    'GROUPING',\n    'GROUPS',\n    'GZIP',\n    'HANDLE',\n    'HANDLER',\n    'HARD_CPU_LIMIT_PERCENTAGE',\n    'HASH',\n    'HAS_TEMP_TABLES',\n    'HAVING',\n    'HDFS',\n    'HEADER',\n    'HEARTBEAT_NO_LOGGING',\n    'HIGH_PRIORITY',\n    'HISTOGRAM',\n    'HOLD',\n    'HOLDING',\n    'HOST',\n    'HOSTS',\n    'HOUR',\n    'HOUR_MICROSECOND',\n    'HOUR_MINUTE',\n    'HOUR_SECOND',\n    'IDENTIFIED',\n    'IDENTITY',\n    'IF',\n    'IGNORE',\n    'ILIKE',\n    'IMMEDIATE',\n    'IMMUTABLE',\n    'IMPLICIT',\n    'IMPORT',\n    'IN',\n    'INCLUDING',\n    'INCREMENT',\n    'INCREMENTAL',\n    'INDEX',\n    'INDEXES',\n    'INFILE',\n    'INHERIT',\n    'INHERITS',\n    '_INIT_PROFILE',\n    'INIT',\n    'INITIALIZE',\n    'INITIALLY',\n    'INJECT',\n    'INLINE',\n    'INNER',\n    'INOUT',\n    'INPUT',\n    'INSENSITIVE',\n    'INSERT',\n    'INSERT_METHOD',\n    'INSTANCE',\n    'INSTEAD',\n    'IN',\n    'INT',\n    'INT1',\n    'INT2',\n    'INT3',\n    'INT4',\n    'INT8',\n    'INTEGER',\n    '_INTERNAL_DYNAMIC_TYPECAST',\n    'INTERPRETER_MODE',\n    'INTERSECT',\n    'INTERVAL',\n    'INTO',\n    'INVOKER',\n    'ISOLATION',\n    'ITERATE',\n    'JOIN',\n    'JSON',\n    'KAFKA',\n    'KEY',\n    'KEY_BLOCK_SIZE',\n    'KEYS',\n    'KILL',\n    'KILLALL',\n    'LABEL',\n    'LAG',\n    'LANGUAGE',\n    'LARGE',\n    'LAST',\n    'LAST_VALUE',\n    'LATERAL',\n    'LATEST',\n    'LC_COLLATE',\n    'LC_CTYPE',\n    'LEAD',\n    'LEADING',\n    'LEAF',\n    'LEAKPROOF',\n    'LEAVE',\n    'LEAVES',\n    'LEFT',\n    'LEVEL',\n    'LICENSE',\n    'LIKE',\n    'LIMIT',\n    'LINES',\n    'LISTEN',\n    'LLVM',\n    'LOADDATA_WHERE',\n    'LOAD',\n    'LOCAL',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOCATION',\n    'LOCK',\n    'LONG',\n    'LONGBLOB',\n    'LONGTEXT',\n    'LOOP',\n    'LOW_PRIORITY',\n    '_LS',\n    'LZ4',\n    'MANAGEMENT',\n    '_MANAGEMENT_THREAD',\n    'MAPPING',\n    'MASTER',\n    'MATCH',\n    'MATERIALIZED',\n    'MAXVALUE',\n    'MAX_CONCURRENCY',\n    'MAX_ERRORS',\n    'MAX_PARTITIONS_PER_BATCH',\n    'MAX_QUEUE_DEPTH',\n    'MAX_RETRIES_PER_BATCH_PARTITION',\n    'MAX_ROWS',\n    'MBC',\n    'MPL',\n    'MEDIUMBLOB',\n    'MEDIUMINT',\n    'MEDIUMTEXT',\n    'MEMBER',\n    'MEMORY',\n    'MEMORY_PERCENTAGE',\n    '_MEMSQL_TABLE_ID_LOOKUP',\n    'MEMSQL',\n    'MEMSQL_DESERIALIZE',\n    'MEMSQL_IMITATING_KAFKA',\n    'MEMSQL_SERIALIZE',\n    'MERGE',\n    'METADATA',\n    'MICROSECOND',\n    'MIDDLEINT',\n    'MIN_ROWS',\n    'MINUS',\n    'MINUTE_MICROSECOND',\n    'MINUTE_SECOND',\n    'MINVALUE',\n    'MOD',\n    'MODE',\n    'MODEL',\n    'MODIFIES',\n    'MODIFY',\n    'MONTH',\n    'MOVE',\n    'MPL',\n    'NAMES',\n    'NAMED',\n    'NAMESPACE',\n    'NATIONAL',\n    'NATURAL',\n    'NCHAR',\n    'NEXT',\n    'NO',\n    'NODE',\n    'NONE',\n    'NO_QUERY_REWRITE',\n    'NOPARAM',\n    'NOT',\n    'NOTHING',\n    'NOTIFY',\n    'NOWAIT',\n    'NO_WRITE_TO_BINLOG',\n    'NO_QUERY_REWRITE',\n    'NORELY',\n    'NTH_VALUE',\n    'NTILE',\n    'NULL',\n    'NULLCOLS',\n    'NULLS',\n    'NUMERIC',\n    'NVARCHAR',\n    'OBJECT',\n    'OF',\n    'OFF',\n    'OFFLINE',\n    'OFFSET',\n    'OFFSETS',\n    'OIDS',\n    'ON',\n    'ONLINE',\n    'ONLY',\n    'OPEN',\n    'OPERATOR',\n    'OPTIMIZATION',\n    'OPTIMIZE',\n    'OPTIMIZER',\n    'OPTIMIZER_STATE',\n    'OPTION',\n    'OPTIONS',\n    'OPTIONALLY',\n    'OR',\n    'ORDER',\n    'ORDERED_SERIALIZE',\n    'ORPHAN',\n    'OUT',\n    'OUT_OF_ORDER',\n    'OUTER',\n    'OUTFILE',\n    'OVER',\n    'OVERLAPS',\n    'OVERLAY',\n    'OWNED',\n    'OWNER',\n    'PACK_KEYS',\n    'PAIRED',\n    'PARSER',\n    'PARQUET',\n    'PARTIAL',\n    'PARTITION',\n    'PARTITION_ID',\n    'PARTITIONING',\n    'PARTITIONS',\n    'PASSING',\n    'PASSWORD',\n    'PASSWORD_LOCK_TIME',\n    'PAUSE',\n    '_PAUSE_REPLAY',\n    'PERIODIC',\n    'PERSISTED',\n    'PIPELINE',\n    'PIPELINES',\n    'PLACING',\n    'PLAN',\n    'PLANS',\n    'PLANCACHE',\n    'PLUGINS',\n    'POOL',\n    'POOLS',\n    'PORT',\n    'PRECEDING',\n    'PRECISION',\n    'PREPARE',\n    'PRESERVE',\n    'PRIMARY',\n    'PRIOR',\n    'PRIVILEGES',\n    'PROCEDURAL',\n    'PROCEDURE',\n    'PROCEDURES',\n    'PROCESS',\n    'PROCESSLIST',\n    'PROFILE',\n    'PROFILES',\n    'PROGRAM',\n    'PROMOTE',\n    'PROXY',\n    'PURGE',\n    'QUARTER',\n    'QUERIES',\n    'QUERY',\n    'QUERY_TIMEOUT',\n    'QUEUE',\n    'RANGE',\n    'RANK',\n    'READ',\n    '_READ',\n    'READS',\n    'REAL',\n    'REASSIGN',\n    'REBALANCE',\n    'RECHECK',\n    'RECORD',\n    'RECURSIVE',\n    'REDUNDANCY',\n    'REDUNDANT',\n    'REF',\n    'REFERENCE',\n    'REFERENCES',\n    'REFRESH',\n    'REGEXP',\n    'REINDEX',\n    'RELATIVE',\n    'RELEASE',\n    'RELOAD',\n    'RELY',\n    'REMOTE',\n    'REMOVE',\n    'RENAME',\n    'REPAIR',\n    '_REPAIR_TABLE',\n    'REPEAT',\n    'REPEATABLE',\n    '_REPL',\n    '_REPROVISIONING',\n    'REPLACE',\n    'REPLICA',\n    'REPLICATE',\n    'REPLICATING',\n    'REPLICATION',\n    'REQUIRE',\n    'RESOURCE',\n    'RESOURCE_POOL',\n    'RESET',\n    'RESTART',\n    'RESTORE',\n    'RESTRICT',\n    'RESULT',\n    '_RESURRECT',\n    'RETRY',\n    'RETURN',\n    'RETURNING',\n    'RETURNS',\n    'REVERSE',\n    'RG_POOL',\n    'REVOKE',\n    'RIGHT',\n    'RIGHT_ANTI_JOIN',\n    'RIGHT_SEMI_JOIN',\n    'RIGHT_STRAIGHT_JOIN',\n    'RLIKE',\n    'ROLES',\n    'ROLLBACK',\n    'ROLLUP',\n    'ROUTINE',\n    'ROW',\n    'ROW_COUNT',\n    'ROW_FORMAT',\n    'ROW_NUMBER',\n    'ROWS',\n    'ROWSTORE',\n    'RULE',\n    '_RPC',\n    'RUNNING',\n    'S3',\n    'SAFE',\n    'SAVE',\n    'SAVEPOINT',\n    'SCALAR',\n    'SCHEMA',\n    'SCHEMAS',\n    'SCHEMA_BINDING',\n    'SCROLL',\n    'SEARCH',\n    'SECOND',\n    'SECOND_MICROSECOND',\n    'SECURITY',\n    'SELECT',\n    'SEMI_JOIN',\n    '_SEND_THREADS',\n    'SENSITIVE',\n    'SEPARATOR',\n    'SEQUENCE',\n    'SEQUENCES',\n    'SERIAL',\n    'SERIALIZABLE',\n    'SERIES',\n    'SERVICE_USER',\n    'SERVER',\n    'SESSION',\n    'SESSION_USER',\n    'SET',\n    'SETOF',\n    'SECURITY_LISTS_INTERSECT',\n    'SHA',\n    'SHARD',\n    'SHARDED',\n    'SHARDED_ID',\n    'SHARE',\n    'SHOW',\n    'SHUTDOWN',\n    'SIGNAL',\n    'SIGNED',\n    'SIMILAR',\n    'SIMPLE',\n    'SITE',\n    'SKIP',\n    'SKIPPED_BATCHES',\n    '__SLEEP',\n    'SMALLINT',\n    'SNAPSHOT',\n    '_SNAPSHOT',\n    '_SNAPSHOTS',\n    'SOFT_CPU_LIMIT_PERCENTAGE',\n    'SOME',\n    'SONAME',\n    'SPARSE',\n    'SPATIAL',\n    'SPATIAL_CHECK_INDEX',\n    'SPECIFIC',\n    'SQL',\n    'SQL_BIG_RESULT',\n    'SQL_BUFFER_RESULT',\n    'SQL_CACHE',\n    'SQL_CALC_FOUND_ROWS',\n    'SQLEXCEPTION',\n    'SQL_MODE',\n    'SQL_NO_CACHE',\n    'SQL_NO_LOGGING',\n    'SQL_SMALL_RESULT',\n    'SQLSTATE',\n    'SQLWARNING',\n    'STDIN',\n    'STDOUT',\n    'STOP',\n    'STORAGE',\n    'STRAIGHT_JOIN',\n    'STRICT',\n    'STRING',\n    'STRIP',\n    'SUCCESS',\n    'SUPER',\n    'SYMMETRIC',\n    'SYNC_SNAPSHOT',\n    'SYNC',\n    '_SYNC',\n    '_SYNC2',\n    '_SYNC_PARTITIONS',\n    '_SYNC_SNAPSHOT',\n    'SYNCHRONIZE',\n    'SYSID',\n    'SYSTEM',\n    'TABLE',\n    'TABLE_CHECKSUM',\n    'TABLES',\n    'TABLESPACE',\n    'TAGS',\n    'TARGET_SIZE',\n    'TASK',\n    'TEMP',\n    'TEMPLATE',\n    'TEMPORARY',\n    'TEMPTABLE',\n    '_TERM_BUMP',\n    'TERMINATE',\n    'TERMINATED',\n    'TEXT',\n    'THEN',\n    'TIME',\n    'TIMEOUT',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TIMEZONE',\n    'TINYBLOB',\n    'TINYINT',\n    'TINYTEXT',\n    'TO',\n    'TRACELOGS',\n    'TRADITIONAL',\n    'TRAILING',\n    'TRANSFORM',\n    'TRANSACTION',\n    '_TRANSACTIONS_EXPERIMENTAL',\n    'TREAT',\n    'TRIGGER',\n    'TRIGGERS',\n    'TRUE',\n    'TRUNC',\n    'TRUNCATE',\n    'TRUSTED',\n    'TWO_PHASE',\n    '_TWOPCID',\n    'TYPE',\n    'TYPES',\n    'UNBOUNDED',\n    'UNCOMMITTED',\n    'UNDEFINED',\n    'UNDO',\n    'UNENCRYPTED',\n    'UNENFORCED',\n    'UNHOLD',\n    'UNICODE',\n    'UNION',\n    'UNIQUE',\n    '_UNITTEST',\n    'UNKNOWN',\n    'UNLISTEN',\n    '_UNLOAD',\n    'UNLOCK',\n    'UNLOGGED',\n    'UNPIVOT',\n    'UNSIGNED',\n    'UNTIL',\n    'UPDATE',\n    'UPGRADE',\n    'USAGE',\n    'USE',\n    'USER',\n    'USERS',\n    'USING',\n    'UTC_DATE',\n    'UTC_TIME',\n    'UTC_TIMESTAMP',\n    '_UTF8',\n    'VACUUM',\n    'VALID',\n    'VALIDATE',\n    'VALIDATOR',\n    'VALUE',\n    'VALUES',\n    'VARBINARY',\n    'VARCHAR',\n    'VARCHARACTER',\n    'VARIABLES',\n    'VARIADIC',\n    'VARYING',\n    'VERBOSE',\n    'VIEW',\n    'VOID',\n    'VOLATILE',\n    'VOTING',\n    'WAIT',\n    '_WAKE',\n    'WARNINGS',\n    'WEEK',\n    'WHEN',\n    'WHERE',\n    'WHILE',\n    'WHITESPACE',\n    'WINDOW',\n    'WITH',\n    'WITHOUT',\n    'WITHIN',\n    '_WM_HEARTBEAT',\n    'WORK',\n    'WORKLOAD',\n    'WRAPPER',\n    'WRITE',\n    'XACT_ID',\n    'XOR',\n    'YEAR',\n    'YEAR_MONTH',\n    'YES',\n    'ZEROFILL',\n    'ZONE'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/vector-functions/vector-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/window-functions/window-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/string-functions/string-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/conditional-functions/conditional-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/numeric-functions/numeric-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/geospatial-functions/geospatial-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/json-functions/json-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/information-functions/information-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/aggregate-functions/aggregate-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/time-series-functions/time-series-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/identifier-generation-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/date-and-time-functions/date-and-time-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/distinct-count-estimation-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/full-text-search-functions/full-text-search-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/regular-expression-functions.html\n  all: [\n    'ABS',\n    'ACOS',\n    'ADDDATE',\n    'ADDTIME',\n    'AES_DECRYPT',\n    'AES_ENCRYPT',\n    'ANY_VALUE',\n    'APPROX_COUNT_DISTINCT',\n    'APPROX_COUNT_DISTINCT_ACCUMULATE',\n    'APPROX_COUNT_DISTINCT_COMBINE',\n    'APPROX_COUNT_DISTINCT_ESTIMATE',\n    'APPROX_GEOGRAPHY_INTERSECTS',\n    'APPROX_PERCENTILE',\n    'ASCII',\n    'ASIN',\n    'ATAN',\n    'ATAN2',\n    'AVG',\n    'BIN',\n    'BINARY',\n    'BIT_AND',\n    'BIT_COUNT',\n    'BIT_OR',\n    'BIT_XOR',\n    'CAST',\n    'CEIL',\n    'CEILING',\n    'CHAR',\n    'CHARACTER_LENGTH',\n    'CHAR_LENGTH',\n    'CHARSET',\n    'COALESCE',\n    'COERCIBILITY',\n    'COLLATION',\n    'COLLECT',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONNECTION_ID',\n    'CONV',\n    'CONVERT',\n    'CONVERT_TZ',\n    'COS',\n    'COT',\n    'COUNT',\n    'CUME_DIST',\n    'CURDATE',\n    'CURRENT_DATE',\n    'CURRENT_ROLE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'CURTIME',\n    'DATABASE',\n    'DATE',\n    'DATE_ADD',\n    'DATEDIFF',\n    'DATE_FORMAT',\n    'DATE_SUB',\n    'DATE_TRUNC',\n    'DAY',\n    'DAYNAME',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFYEAR',\n    'DECODE',\n    'DEFAULT',\n    'DEGREES',\n    'DENSE_RANK',\n    'DIV',\n    'DOT_PRODUCT',\n    'ELT',\n    'EUCLIDEAN_DISTANCE',\n    'EXP',\n    'EXTRACT',\n    'FIELD',\n    'FIRST',\n    'FIRST_VALUE',\n    'FLOOR',\n    'FORMAT',\n    'FOUND_ROWS',\n    'FROM_BASE64',\n    'FROM_DAYS',\n    'FROM_UNIXTIME',\n    'GEOGRAPHY_AREA',\n    'GEOGRAPHY_CONTAINS',\n    'GEOGRAPHY_DISTANCE',\n    'GEOGRAPHY_INTERSECTS',\n    'GEOGRAPHY_LATITUDE',\n    'GEOGRAPHY_LENGTH',\n    'GEOGRAPHY_LONGITUDE',\n    'GEOGRAPHY_POINT',\n    'GEOGRAPHY_WITHIN_DISTANCE',\n    'GEOMETRY_AREA',\n    'GEOMETRY_CONTAINS',\n    'GEOMETRY_DISTANCE',\n    'GEOMETRY_FILTER',\n    'GEOMETRY_INTERSECTS',\n    'GEOMETRY_LENGTH',\n    'GEOMETRY_POINT',\n    'GEOMETRY_WITHIN_DISTANCE',\n    'GEOMETRY_X',\n    'GEOMETRY_Y',\n    'GREATEST',\n    'GROUPING',\n    'GROUP_CONCAT',\n    'HEX',\n    'HIGHLIGHT',\n    'HOUR',\n    'ICU_VERSION',\n    'IF',\n    'IFNULL',\n    'INET_ATON',\n    'INET_NTOA',\n    'INET6_ATON',\n    'INET6_NTOA',\n    'INITCAP',\n    'INSERT',\n    'INSTR',\n    'INTERVAL',\n    'IS',\n    'IS NULL',\n    'JSON_AGG',\n    'JSON_ARRAY_CONTAINS_DOUBLE',\n    'JSON_ARRAY_CONTAINS_JSON',\n    'JSON_ARRAY_CONTAINS_STRING',\n    'JSON_ARRAY_PUSH_DOUBLE',\n    'JSON_ARRAY_PUSH_JSON',\n    'JSON_ARRAY_PUSH_STRING',\n    'JSON_DELETE_KEY',\n    'JSON_EXTRACT_DOUBLE',\n    'JSON_EXTRACT_JSON',\n    'JSON_EXTRACT_STRING',\n    'JSON_EXTRACT_BIGINT',\n    'JSON_GET_TYPE',\n    'JSON_LENGTH',\n    'JSON_SET_DOUBLE',\n    'JSON_SET_JSON',\n    'JSON_SET_STRING',\n    'JSON_SPLICE_DOUBLE',\n    'JSON_SPLICE_JSON',\n    'JSON_SPLICE_STRING',\n    'LAG',\n    'LAST_DAY',\n    'LAST_VALUE',\n    'LCASE',\n    'LEAD',\n    'LEAST',\n    'LEFT',\n    'LENGTH',\n    'LIKE',\n    'LN',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOCATE',\n    'LOG',\n    'LOG10',\n    'LOG2',\n    'LPAD',\n    'LTRIM',\n    'MATCH',\n    'MAX',\n    'MD5',\n    'MEDIAN',\n    'MICROSECOND',\n    'MIN',\n    'MINUTE',\n    'MOD',\n    'MONTH',\n    'MONTHNAME',\n    'MONTHS_BETWEEN',\n    'NOT',\n    'NOW',\n    'NTH_VALUE',\n    'NTILE',\n    'NULLIF',\n    'OCTET_LENGTH',\n    'PERCENT_RANK',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PI',\n    'PIVOT',\n    'POSITION',\n    'POW',\n    'POWER',\n    'QUARTER',\n    'QUOTE',\n    'RADIANS',\n    'RAND',\n    'RANK',\n    'REGEXP',\n    'REPEAT',\n    'REPLACE',\n    'REVERSE',\n    'RIGHT',\n    'RLIKE',\n    'ROUND',\n    'ROW_COUNT',\n    'ROW_NUMBER',\n    'RPAD',\n    'RTRIM',\n    'SCALAR',\n    'SCHEMA',\n    'SEC_TO_TIME',\n    'SHA1',\n    'SHA2',\n    'SIGMOID',\n    'SIGN',\n    'SIN',\n    'SLEEP',\n    'SPLIT',\n    'SOUNDEX',\n    'SOUNDS LIKE',\n    'SOURCE_POS_WAIT',\n    'SPACE',\n    'SQRT',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STR_TO_DATE',\n    'SUBDATE',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUBSTRING_INDEX',\n    'SUM',\n    'SYS_GUID',\n    'TAN',\n    'TIME',\n    'TIMEDIFF',\n    'TIME_BUCKET',\n    'TIME_FORMAT',\n    'TIMESTAMP',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TIME_TO_SEC',\n    'TO_BASE64',\n    'TO_CHAR',\n    'TO_DAYS',\n    'TO_JSON',\n    'TO_NUMBER',\n    'TO_SECONDS',\n    'TO_TIMESTAMP',\n    'TRIM',\n    'TRUNC',\n    'TRUNCATE',\n    'UCASE',\n    'UNHEX',\n    'UNIX_TIMESTAMP',\n    'UPDATEXML',\n    'UPPER',\n    'USER',\n    'UTC_DATE',\n    'UTC_TIME',\n    'UTC_TIMESTAMP',\n    'UUID',\n    'VALUES',\n    'VARIANCE',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VECTOR_SUB',\n    'VERSION',\n    'WEEK',\n    'WEEKDAY',\n    'WEEKOFYEAR',\n    'YEAR',\n    // Data types with parameters\n    // https://docs.singlestore.com/managed-service/en/reference/sql-reference/data-types.html\n    'BIT',\n    'TINYINT',\n    'SMALLINT',\n    'MEDIUMINT',\n    'INT',\n    'INTEGER',\n    'BIGINT',\n    'DECIMAL',\n    'DEC',\n    'NUMERIC',\n    'FIXED',\n    'FLOAT',\n    'DOUBLE',\n    'DOUBLE PRECISION',\n    'REAL',\n    'DATETIME',\n    'TIMESTAMP',\n    'TIME',\n    'YEAR',\n    'CHAR',\n    'NATIONAL CHAR',\n    'VARCHAR',\n    'NATIONAL VARCHAR',\n    'BINARY',\n    'VARBINARY',\n    'BLOB',\n    'TEXT',\n    'ENUM'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './singlestoredb.keywords.js';\nimport { functions } from './singlestoredb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [IGNORE] [INTO]',\n  'VALUES',\n  'REPLACE [INTO]',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE VIEW',\n  'CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [TEMPORARY] PROCEDURE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [EXTERNAL] FUNCTION'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER [ONLINE] TABLE',\n  'ADD [COLUMN]',\n  'ADD [UNIQUE] {INDEX | KEY}',\n  'DROP [COLUMN]',\n  'MODIFY [COLUMN]',\n  'CHANGE',\n  'RENAME [TO | AS]',\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference.html\n  'ADD AGGREGATOR',\n  'ADD LEAF',\n  'AGGREGATOR SET AS MASTER',\n  'ALTER DATABASE',\n  'ALTER PIPELINE',\n  'ALTER RESOURCE POOL',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE TABLE',\n  'ATTACH DATABASE',\n  'ATTACH LEAF',\n  'ATTACH LEAF ALL',\n  'BACKUP DATABASE',\n  'BINLOG',\n  'BOOTSTRAP AGGREGATOR',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE',\n  'CHANGE MASTER TO',\n  'CHANGE REPLICATION FILTER',\n  'CHANGE REPLICATION SOURCE TO',\n  'CHECK BLOB CHECKSUM',\n  'CHECK TABLE',\n  'CHECKSUM TABLE',\n  'CLEAR ORPHAN DATABASES',\n  'CLONE',\n  'COMMIT',\n  'CREATE DATABASE',\n  'CREATE GROUP',\n  'CREATE INDEX',\n  'CREATE LINK',\n  'CREATE MILESTONE',\n  'CREATE PIPELINE',\n  'CREATE RESOURCE POOL',\n  'CREATE ROLE',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DETACH DATABASE',\n  'DETACH PIPELINE',\n  'DO',\n  'DROP DATABASE',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP LINK',\n  'DROP PIPELINE',\n  'DROP PROCEDURE',\n  'DROP RESOURCE POOL',\n  'DROP ROLE',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'FORCE',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'KILL CONNECTION',\n  'KILLALL QUERIES',\n  'LOAD DATA',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML',\n  'LOCK INSTANCE FOR BACKUP',\n  'LOCK TABLES',\n  'MASTER_POS_WAIT',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'REBALANCE PARTITIONS',\n  'RELEASE SAVEPOINT',\n  'REMOVE AGGREGATOR',\n  'REMOVE LEAF',\n  'REPAIR TABLE',\n  'REPLACE',\n  'REPLICATE DATABASE',\n  'RESET',\n  'RESET MASTER',\n  'RESET PERSIST',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESTART',\n  'RESTORE DATABASE',\n  'RESTORE REDUNDANCY',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET RESOURCE GROUP',\n  'SET ROLE',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW CHARACTER SET',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PIPELINE',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PLUGINS',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA STATUS',\n  'SHOW REPLICAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW STATUS',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHUTDOWN',\n  'SNAPSHOT DATABASE',\n  'SOURCE_POS_WAIT',\n  'START GROUP_REPLICATION',\n  'START PIPELINE',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP GROUP_REPLICATION',\n  'STOP PIPELINE',\n  'STOP REPLICA',\n  'STOP REPLICATING',\n  'STOP SLAVE',\n  'TEST PIPELINE',\n  'UNLOCK INSTANCE',\n  'UNLOCK TABLES',\n  'USE',\n  'XA',\n  // flow control\n  'ITERATE',\n  'LEAVE',\n  'LOOP',\n  'REPEAT',\n  'RETURN',\n  'WHILE'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]', 'EXCEPT', 'INTERSECT', 'MINUS']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN'\n]);\n\nconst reservedPhrases = expandPhrases(['ON DELETE', 'ON UPDATE', 'CHARACTER SET', '{ROWS | RANGE} BETWEEN']);\n\nexport const singlestoredb: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    // TODO: support _binary\"some string\" prefix\n    stringTypes: ['\"\"-qq-bs', \"''-qq-bs\", { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true }],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [{ regex: '@@?[A-Za-z0-9_$]+' }, { quote: '``', prefixes: ['@'], requirePrefix: true }],\n    lineCommentTypes: ['--', '#'],\n    operators: [':=', '&', '|', '^', '~', '<<', '>>', '<=>', '&&', '||'],\n    postProcess\n  },\n  formatOptions: {\n    onelineClauses\n  }\n};\n\nfunction postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n    if (isToken.SET(token) && nextToken.text === '(') {\n      // This is SET datatype, not SET statement\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n    return token;\n  });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://docs.snowflake.com/en/sql-reference-functions.html\n  //\n  // https://docs.snowflake.com/en/sql-reference/functions-all.html\n  // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n  // 2. split all lines that contain ',' or '/' into multiple lines\n  // 3. remove all '— Deprecated' parts from the strings\n  // 4. delete all strings that end with '<object_type>', they are already covered in the list\n  // 5. remove all strings that contain '[', they are operators not functions\n  // 6. fix all values that contain '*'\n  // 7. delete operatos ':', '::', '||'\n  //\n  // Steps 1-5 can be combined by the following script in the developer console:\n  // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n  //   .map(x => x.split(x.includes(',') ? ',' : '/')).flat().map(x => x.trim()) // Step 2\n  //   .map(x => x.replace('— Deprecated', '')) // Step 3\n  //   .filter(x => !x.endsWith('<object_type>')) // Step 4\n  //   .filter(x => !x.includes('[')) // Step 5\n  all: [\n    'ABS',\n    'ACOS',\n    'ACOSH',\n    'ADD_MONTHS',\n    'ALL_USER_NAMES',\n    'ANY_VALUE',\n    'APPROX_COUNT_DISTINCT',\n    'APPROX_PERCENTILE',\n    'APPROX_PERCENTILE_ACCUMULATE',\n    'APPROX_PERCENTILE_COMBINE',\n    'APPROX_PERCENTILE_ESTIMATE',\n    'APPROX_TOP_K',\n    'APPROX_TOP_K_ACCUMULATE',\n    'APPROX_TOP_K_COMBINE',\n    'APPROX_TOP_K_ESTIMATE',\n    'APPROXIMATE_JACCARD_INDEX',\n    'APPROXIMATE_SIMILARITY',\n    'ARRAY_AGG',\n    'ARRAY_APPEND',\n    'ARRAY_CAT',\n    'ARRAY_COMPACT',\n    'ARRAY_CONSTRUCT',\n    'ARRAY_CONSTRUCT_COMPACT',\n    'ARRAY_CONTAINS',\n    'ARRAY_INSERT',\n    'ARRAY_INTERSECTION',\n    'ARRAY_POSITION',\n    'ARRAY_PREPEND',\n    'ARRAY_SIZE',\n    'ARRAY_SLICE',\n    'ARRAY_TO_STRING',\n    'ARRAY_UNION_AGG',\n    'ARRAY_UNIQUE_AGG',\n    'ARRAYS_OVERLAP',\n    'AS_ARRAY',\n    'AS_BINARY',\n    'AS_BOOLEAN',\n    'AS_CHAR',\n    'AS_VARCHAR',\n    'AS_DATE',\n    'AS_DECIMAL',\n    'AS_NUMBER',\n    'AS_DOUBLE',\n    'AS_REAL',\n    'AS_INTEGER',\n    'AS_OBJECT',\n    'AS_TIME',\n    'AS_TIMESTAMP_LTZ',\n    'AS_TIMESTAMP_NTZ',\n    'AS_TIMESTAMP_TZ',\n    'ASCII',\n    'ASIN',\n    'ASINH',\n    'ATAN',\n    'ATAN2',\n    'ATANH',\n    'AUTO_REFRESH_REGISTRATION_HISTORY',\n    'AUTOMATIC_CLUSTERING_HISTORY',\n    'AVG',\n    'BASE64_DECODE_BINARY',\n    'BASE64_DECODE_STRING',\n    'BASE64_ENCODE',\n    'BIT_LENGTH',\n    'BITAND',\n    'BITAND_AGG',\n    'BITMAP_BIT_POSITION',\n    'BITMAP_BUCKET_NUMBER',\n    'BITMAP_CONSTRUCT_AGG',\n    'BITMAP_COUNT',\n    'BITMAP_OR_AGG',\n    'BITNOT',\n    'BITOR',\n    'BITOR_AGG',\n    'BITSHIFTLEFT',\n    'BITSHIFTRIGHT',\n    'BITXOR',\n    'BITXOR_AGG',\n    'BOOLAND',\n    'BOOLAND_AGG',\n    'BOOLNOT',\n    'BOOLOR',\n    'BOOLOR_AGG',\n    'BOOLXOR',\n    'BOOLXOR_AGG',\n    'BUILD_SCOPED_FILE_URL',\n    'BUILD_STAGE_FILE_URL',\n    'CASE',\n    'CAST',\n    'CBRT',\n    'CEIL',\n    'CHARINDEX',\n    'CHECK_JSON',\n    'CHECK_XML',\n    'CHR',\n    'CHAR',\n    'COALESCE',\n    'COLLATE',\n    'COLLATION',\n    'COMPLETE_TASK_GRAPHS',\n    'COMPRESS',\n    'CONCAT',\n    'CONCAT_WS',\n    'CONDITIONAL_CHANGE_EVENT',\n    'CONDITIONAL_TRUE_EVENT',\n    'CONTAINS',\n    'CONVERT_TIMEZONE',\n    'COPY_HISTORY',\n    'CORR',\n    'COS',\n    'COSH',\n    'COT',\n    'COUNT',\n    'COUNT_IF',\n    'COVAR_POP',\n    'COVAR_SAMP',\n    'CUME_DIST',\n    'CURRENT_ACCOUNT',\n    'CURRENT_AVAILABLE_ROLES',\n    'CURRENT_CLIENT',\n    'CURRENT_DATABASE',\n    'CURRENT_DATE',\n    'CURRENT_IP_ADDRESS',\n    'CURRENT_REGION',\n    'CURRENT_ROLE',\n    'CURRENT_SCHEMA',\n    'CURRENT_SCHEMAS',\n    'CURRENT_SECONDARY_ROLES',\n    'CURRENT_SESSION',\n    'CURRENT_STATEMENT',\n    'CURRENT_TASK_GRAPHS',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_TRANSACTION',\n    'CURRENT_USER',\n    'CURRENT_VERSION',\n    'CURRENT_WAREHOUSE',\n    'DATA_TRANSFER_HISTORY',\n    'DATABASE_REFRESH_HISTORY',\n    'DATABASE_REFRESH_PROGRESS',\n    'DATABASE_REFRESH_PROGRESS_BY_JOB',\n    'DATABASE_STORAGE_USAGE_HISTORY',\n    'DATE_FROM_PARTS',\n    'DATE_PART',\n    'DATE_TRUNC',\n    'DATEADD',\n    'DATEDIFF',\n    'DAYNAME',\n    'DECODE',\n    'DECOMPRESS_BINARY',\n    'DECOMPRESS_STRING',\n    'DECRYPT',\n    'DECRYPT_RAW',\n    'DEGREES',\n    'DENSE_RANK',\n    'DIV0',\n    'EDITDISTANCE',\n    'ENCRYPT',\n    'ENCRYPT_RAW',\n    'ENDSWITH',\n    'EQUAL_NULL',\n    'EXP',\n    'EXPLAIN_JSON',\n    'EXTERNAL_FUNCTIONS_HISTORY',\n    'EXTERNAL_TABLE_FILES',\n    'EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY',\n    'EXTRACT',\n    'EXTRACT_SEMANTIC_CATEGORIES',\n    'FACTORIAL',\n    'FIRST_VALUE',\n    'FLATTEN',\n    'FLOOR',\n    'GENERATE_COLUMN_DESCRIPTION',\n    'GENERATOR',\n    'GET',\n    'GET_ABSOLUTE_PATH',\n    'GET_DDL',\n    'GET_IGNORE_CASE',\n    'GET_OBJECT_REFERENCES',\n    'GET_PATH',\n    'GET_PRESIGNED_URL',\n    'GET_RELATIVE_PATH',\n    'GET_STAGE_LOCATION',\n    'GETBIT',\n    'GREATEST',\n    'GROUPING',\n    'GROUPING_ID',\n    'HASH',\n    'HASH_AGG',\n    'HAVERSINE',\n    'HEX_DECODE_BINARY',\n    'HEX_DECODE_STRING',\n    'HEX_ENCODE',\n    'HLL',\n    'HLL_ACCUMULATE',\n    'HLL_COMBINE',\n    'HLL_ESTIMATE',\n    'HLL_EXPORT',\n    'HLL_IMPORT',\n    'HOUR',\n    'MINUTE',\n    'SECOND',\n    'IFF',\n    'IFNULL',\n    'ILIKE',\n    'ILIKE ANY',\n    'INFER_SCHEMA',\n    'INITCAP',\n    'INSERT',\n    'INVOKER_ROLE',\n    'INVOKER_SHARE',\n    'IS_ARRAY',\n    'IS_BINARY',\n    'IS_BOOLEAN',\n    'IS_CHAR',\n    'IS_VARCHAR',\n    'IS_DATE',\n    'IS_DATE_VALUE',\n    'IS_DECIMAL',\n    'IS_DOUBLE',\n    'IS_REAL',\n    'IS_GRANTED_TO_INVOKER_ROLE',\n    'IS_INTEGER',\n    'IS_NULL_VALUE',\n    'IS_OBJECT',\n    'IS_ROLE_IN_SESSION',\n    'IS_TIME',\n    'IS_TIMESTAMP_LTZ',\n    'IS_TIMESTAMP_NTZ',\n    'IS_TIMESTAMP_TZ',\n    'JAROWINKLER_SIMILARITY',\n    'JSON_EXTRACT_PATH_TEXT',\n    'KURTOSIS',\n    'LAG',\n    'LAST_DAY',\n    'LAST_QUERY_ID',\n    'LAST_TRANSACTION',\n    'LAST_VALUE',\n    'LEAD',\n    'LEAST',\n    'LEFT',\n    'LENGTH',\n    'LEN',\n    'LIKE',\n    'LIKE ALL',\n    'LIKE ANY',\n    'LISTAGG',\n    'LN',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'LOG',\n    'LOGIN_HISTORY',\n    'LOGIN_HISTORY_BY_USER',\n    'LOWER',\n    'LPAD',\n    'LTRIM',\n    'MATERIALIZED_VIEW_REFRESH_HISTORY',\n    'MD5',\n    'MD5_HEX',\n    'MD5_BINARY',\n    'MD5_NUMBER — Obsoleted',\n    'MD5_NUMBER_LOWER64',\n    'MD5_NUMBER_UPPER64',\n    'MEDIAN',\n    'MIN',\n    'MAX',\n    'MINHASH',\n    'MINHASH_COMBINE',\n    'MOD',\n    'MODE',\n    'MONTHNAME',\n    'MONTHS_BETWEEN',\n    'NEXT_DAY',\n    'NORMAL',\n    'NTH_VALUE',\n    'NTILE',\n    'NULLIF',\n    'NULLIFZERO',\n    'NVL',\n    'NVL2',\n    'OBJECT_AGG',\n    'OBJECT_CONSTRUCT',\n    'OBJECT_CONSTRUCT_KEEP_NULL',\n    'OBJECT_DELETE',\n    'OBJECT_INSERT',\n    'OBJECT_KEYS',\n    'OBJECT_PICK',\n    'OCTET_LENGTH',\n    'PARSE_IP',\n    'PARSE_JSON',\n    'PARSE_URL',\n    'PARSE_XML',\n    'PERCENT_RANK',\n    'PERCENTILE_CONT',\n    'PERCENTILE_DISC',\n    'PI',\n    'PIPE_USAGE_HISTORY',\n    'POLICY_CONTEXT',\n    'POLICY_REFERENCES',\n    'POSITION',\n    'POW',\n    'POWER',\n    'PREVIOUS_DAY',\n    'QUERY_ACCELERATION_HISTORY',\n    'QUERY_HISTORY',\n    'QUERY_HISTORY_BY_SESSION',\n    'QUERY_HISTORY_BY_USER',\n    'QUERY_HISTORY_BY_WAREHOUSE',\n    'RADIANS',\n    'RANDOM',\n    'RANDSTR',\n    'RANK',\n    'RATIO_TO_REPORT',\n    'REGEXP',\n    'REGEXP_COUNT',\n    'REGEXP_INSTR',\n    'REGEXP_LIKE',\n    'REGEXP_REPLACE',\n    'REGEXP_SUBSTR',\n    'REGEXP_SUBSTR_ALL',\n    'REGR_AVGX',\n    'REGR_AVGY',\n    'REGR_COUNT',\n    'REGR_INTERCEPT',\n    'REGR_R2',\n    'REGR_SLOPE',\n    'REGR_SXX',\n    'REGR_SXY',\n    'REGR_SYY',\n    'REGR_VALX',\n    'REGR_VALY',\n    'REPEAT',\n    'REPLACE',\n    'REPLICATION_GROUP_REFRESH_HISTORY',\n    'REPLICATION_GROUP_REFRESH_PROGRESS',\n    'REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB',\n    'REPLICATION_GROUP_USAGE_HISTORY',\n    'REPLICATION_USAGE_HISTORY',\n    'REST_EVENT_HISTORY',\n    'RESULT_SCAN',\n    'REVERSE',\n    'RIGHT',\n    'RLIKE',\n    'ROUND',\n    'ROW_NUMBER',\n    'RPAD',\n    'RTRIM',\n    'RTRIMMED_LENGTH',\n    'SEARCH_OPTIMIZATION_HISTORY',\n    'SEQ1',\n    'SEQ2',\n    'SEQ4',\n    'SEQ8',\n    'SERVERLESS_TASK_HISTORY',\n    'SHA1',\n    'SHA1_HEX',\n    'SHA1_BINARY',\n    'SHA2',\n    'SHA2_HEX',\n    'SHA2_BINARY',\n    'SIGN',\n    'SIN',\n    'SINH',\n    'SKEW',\n    'SOUNDEX',\n    'SPACE',\n    'SPLIT',\n    'SPLIT_PART',\n    'SPLIT_TO_TABLE',\n    'SQRT',\n    'SQUARE',\n    'ST_AREA',\n    'ST_ASEWKB',\n    'ST_ASEWKT',\n    'ST_ASGEOJSON',\n    'ST_ASWKB',\n    'ST_ASBINARY',\n    'ST_ASWKT',\n    'ST_ASTEXT',\n    'ST_AZIMUTH',\n    'ST_CENTROID',\n    'ST_COLLECT',\n    'ST_CONTAINS',\n    'ST_COVEREDBY',\n    'ST_COVERS',\n    'ST_DIFFERENCE',\n    'ST_DIMENSION',\n    'ST_DISJOINT',\n    'ST_DISTANCE',\n    'ST_DWITHIN',\n    'ST_ENDPOINT',\n    'ST_ENVELOPE',\n    'ST_GEOGFROMGEOHASH',\n    'ST_GEOGPOINTFROMGEOHASH',\n    'ST_GEOGRAPHYFROMWKB',\n    'ST_GEOGRAPHYFROMWKT',\n    'ST_GEOHASH',\n    'ST_GEOMETRYFROMWKB',\n    'ST_GEOMETRYFROMWKT',\n    'ST_HAUSDORFFDISTANCE',\n    'ST_INTERSECTION',\n    'ST_INTERSECTS',\n    'ST_LENGTH',\n    'ST_MAKEGEOMPOINT',\n    'ST_GEOM_POINT',\n    'ST_MAKELINE',\n    'ST_MAKEPOINT',\n    'ST_POINT',\n    'ST_MAKEPOLYGON',\n    'ST_POLYGON',\n    'ST_NPOINTS',\n    'ST_NUMPOINTS',\n    'ST_PERIMETER',\n    'ST_POINTN',\n    'ST_SETSRID',\n    'ST_SIMPLIFY',\n    'ST_SRID',\n    'ST_STARTPOINT',\n    'ST_SYMDIFFERENCE',\n    'ST_UNION',\n    'ST_WITHIN',\n    'ST_X',\n    'ST_XMAX',\n    'ST_XMIN',\n    'ST_Y',\n    'ST_YMAX',\n    'ST_YMIN',\n    'STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY',\n    'STAGE_STORAGE_USAGE_HISTORY',\n    'STARTSWITH',\n    'STDDEV',\n    'STDDEV_POP',\n    'STDDEV_SAMP',\n    'STRIP_NULL_VALUE',\n    'STRTOK',\n    'STRTOK_SPLIT_TO_TABLE',\n    'STRTOK_TO_ARRAY',\n    'SUBSTR',\n    'SUBSTRING',\n    'SUM',\n    'SYSDATE',\n    'SYSTEM$ABORT_SESSION',\n    'SYSTEM$ABORT_TRANSACTION',\n    'SYSTEM$AUTHORIZE_PRIVATELINK',\n    'SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS',\n    'SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS',\n    'SYSTEM$CANCEL_ALL_QUERIES',\n    'SYSTEM$CANCEL_QUERY',\n    'SYSTEM$CLUSTERING_DEPTH',\n    'SYSTEM$CLUSTERING_INFORMATION',\n    'SYSTEM$CLUSTERING_RATIO ',\n    'SYSTEM$CURRENT_USER_TASK_NAME',\n    'SYSTEM$DATABASE_REFRESH_HISTORY ',\n    'SYSTEM$DATABASE_REFRESH_PROGRESS',\n    'SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB ',\n    'SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE',\n    'SYSTEM$DISABLE_DATABASE_REPLICATION',\n    'SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE',\n    'SYSTEM$ESTIMATE_QUERY_ACCELERATION',\n    'SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS',\n    'SYSTEM$EXPLAIN_JSON_TO_TEXT',\n    'SYSTEM$EXPLAIN_PLAN_JSON',\n    'SYSTEM$EXTERNAL_TABLE_PIPE_STATUS',\n    'SYSTEM$GENERATE_SAML_CSR',\n    'SYSTEM$GENERATE_SCIM_ACCESS_TOKEN',\n    'SYSTEM$GET_AWS_SNS_IAM_POLICY',\n    'SYSTEM$GET_PREDECESSOR_RETURN_VALUE',\n    'SYSTEM$GET_PRIVATELINK',\n    'SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS',\n    'SYSTEM$GET_PRIVATELINK_CONFIG',\n    'SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO',\n    'SYSTEM$GET_TAG',\n    'SYSTEM$GET_TAG_ALLOWED_VALUES',\n    'SYSTEM$GET_TAG_ON_CURRENT_COLUMN',\n    'SYSTEM$GET_TAG_ON_CURRENT_TABLE',\n    'SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER',\n    'SYSTEM$LAST_CHANGE_COMMIT_TIME',\n    'SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME',\n    'SYSTEM$MIGRATE_SAML_IDP_REGISTRATION',\n    'SYSTEM$PIPE_FORCE_RESUME',\n    'SYSTEM$PIPE_STATUS',\n    'SYSTEM$REVOKE_PRIVATELINK',\n    'SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS',\n    'SYSTEM$SET_RETURN_VALUE',\n    'SYSTEM$SHOW_OAUTH_CLIENT_SECRETS',\n    'SYSTEM$STREAM_GET_TABLE_TIMESTAMP',\n    'SYSTEM$STREAM_HAS_DATA',\n    'SYSTEM$TASK_DEPENDENTS_ENABLE',\n    'SYSTEM$TYPEOF',\n    'SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS',\n    'SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN',\n    'SYSTEM$WAIT',\n    'SYSTEM$WHITELIST',\n    'SYSTEM$WHITELIST_PRIVATELINK',\n    'TAG_REFERENCES',\n    'TAG_REFERENCES_ALL_COLUMNS',\n    'TAG_REFERENCES_WITH_LINEAGE',\n    'TAN',\n    'TANH',\n    'TASK_DEPENDENTS',\n    'TASK_HISTORY',\n    'TIME_FROM_PARTS',\n    'TIME_SLICE',\n    'TIMEADD',\n    'TIMEDIFF',\n    'TIMESTAMP_FROM_PARTS',\n    'TIMESTAMPADD',\n    'TIMESTAMPDIFF',\n    'TO_ARRAY',\n    'TO_BINARY',\n    'TO_BOOLEAN',\n    'TO_CHAR',\n    'TO_VARCHAR',\n    'TO_DATE',\n    'DATE',\n    'TO_DECIMAL',\n    'TO_NUMBER',\n    'TO_NUMERIC',\n    'TO_DOUBLE',\n    'TO_GEOGRAPHY',\n    'TO_GEOMETRY',\n    'TO_JSON',\n    'TO_OBJECT',\n    'TO_TIME',\n    'TIME',\n    'TO_TIMESTAMP',\n    'TO_TIMESTAMP_LTZ',\n    'TO_TIMESTAMP_NTZ',\n    'TO_TIMESTAMP_TZ',\n    'TO_VARIANT',\n    'TO_XML',\n    'TRANSLATE',\n    'TRIM',\n    'TRUNCATE',\n    'TRUNC',\n    'TRUNC',\n    'TRY_BASE64_DECODE_BINARY',\n    'TRY_BASE64_DECODE_STRING',\n    'TRY_CAST',\n    'TRY_HEX_DECODE_BINARY',\n    'TRY_HEX_DECODE_STRING',\n    'TRY_PARSE_JSON',\n    'TRY_TO_BINARY',\n    'TRY_TO_BOOLEAN',\n    'TRY_TO_DATE',\n    'TRY_TO_DECIMAL',\n    'TRY_TO_NUMBER',\n    'TRY_TO_NUMERIC',\n    'TRY_TO_DOUBLE',\n    'TRY_TO_GEOGRAPHY',\n    'TRY_TO_GEOMETRY',\n    'TRY_TO_TIME',\n    'TRY_TO_TIMESTAMP',\n    'TRY_TO_TIMESTAMP_LTZ',\n    'TRY_TO_TIMESTAMP_NTZ',\n    'TRY_TO_TIMESTAMP_TZ',\n    'TYPEOF',\n    'UNICODE',\n    'UNIFORM',\n    'UPPER',\n    'UUID_STRING',\n    'VALIDATE',\n    'VALIDATE_PIPE_LOAD',\n    'VAR_POP',\n    'VAR_SAMP',\n    'VARIANCE',\n    'VARIANCE_SAMP',\n    'VARIANCE_POP',\n    'WAREHOUSE_LOAD_HISTORY',\n    'WAREHOUSE_METERING_HISTORY',\n    'WIDTH_BUCKET',\n    'XMLGET',\n    'YEAR',\n    'YEAROFWEEK',\n    'YEAROFWEEKISO',\n    'DAY',\n    'DAYOFMONTH',\n    'DAYOFWEEK',\n    'DAYOFWEEKISO',\n    'DAYOFYEAR',\n    'WEEK',\n    'WEEK',\n    'WEEKOFYEAR',\n    'WEEKISO',\n    'MONTH',\n    'QUARTER',\n    'ZEROIFNULL',\n    'ZIPF'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  // https://docs.snowflake.com/en/sql-reference/reserved-keywords.html\n  //\n  // run in console on this page: $x('//tbody/tr/*[1]/p/text()').map(x => x.nodeValue)\n  all: [\n    'ACCOUNT',\n    'ALL',\n    'ALTER',\n    'AND',\n    'ANY',\n    'AS',\n    'BETWEEN',\n    'BY',\n    'CASE',\n    'CAST',\n    'CHECK',\n    'COLUMN',\n    'CONNECT',\n    'CONNECTION',\n    'CONSTRAINT',\n    'CREATE',\n    'CROSS',\n    'CURRENT',\n    'CURRENT_DATE',\n    'CURRENT_TIME',\n    'CURRENT_TIMESTAMP',\n    'CURRENT_USER',\n    'DATABASE',\n    'DELETE',\n    'DISTINCT',\n    'DROP',\n    'ELSE',\n    'EXISTS',\n    'FALSE',\n    'FOLLOWING',\n    'FOR',\n    'FROM',\n    'FULL',\n    'GRANT',\n    'GROUP',\n    'GSCLUSTER',\n    'HAVING',\n    'ILIKE',\n    'IN',\n    'INCREMENT',\n    'INNER',\n    'INSERT',\n    'INTERSECT',\n    'INTO',\n    'IS',\n    'ISSUE',\n    'JOIN',\n    'LATERAL',\n    'LEFT',\n    'LIKE',\n    'LOCALTIME',\n    'LOCALTIMESTAMP',\n    'MINUS',\n    'NATURAL',\n    'NOT',\n    'NULL',\n    'OF',\n    'ON',\n    'OR',\n    'ORDER',\n    'ORGANIZATION',\n    'QUALIFY',\n    'REGEXP',\n    'REVOKE',\n    'RIGHT',\n    'RLIKE',\n    'ROW',\n    'ROWS',\n    'SAMPLE',\n    'SCHEMA',\n    'SELECT',\n    'SET',\n    'SOME',\n    'START',\n    'TABLE',\n    'TABLESAMPLE',\n    'THEN',\n    'TO',\n    'TRIGGER',\n    'TRUE',\n    'TRY_CAST',\n    'UNION',\n    'UNIQUE',\n    'UPDATE',\n    'USING',\n    'VALUES',\n    'VIEW',\n    'WHEN',\n    'WHENEVER',\n    'WHERE',\n    'WITH'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './snowflake.functions.js';\nimport { keywords } from './snowflake.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH [FIRST | NEXT]',\n  // Data manipulation\n  // - insert:\n  'INSERT [OVERWRITE] [ALL INTO | INTO | ALL | FIRST]',\n  '{THEN | ELSE} INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // Data definition\n  // - view\n  'CREATE [OR REPLACE] [SECURE] [RECURSIVE] VIEW [IF NOT EXISTS]',\n  // - create/drop/merge table\n  'CREATE [OR REPLACE] [VOLATILE] TABLE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [LOCAL | GLOBAL] {TEMP|TEMPORARY} TABLE [IF NOT EXISTS]',\n  'CLUSTER BY',\n  '[WITH] {MASKING POLICY | TAG | ROW ACCESS POLICY}',\n  'COPY GRANTS',\n  'USING TEMPLATE',\n  'MERGE INTO',\n  'WHEN MATCHED [AND]',\n  'THEN {UPDATE SET | DELETE}',\n  'WHEN NOT MATCHED THEN INSERT'\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'RENAME TO',\n  'SWAP WITH',\n  '[SUSPEND | RESUME] RECLUSTER',\n  'DROP CLUSTERING KEY',\n  'ADD [COLUMN]',\n  'RENAME COLUMN',\n  '{ALTER | MODIFY} [COLUMN]',\n  'DROP [COLUMN]',\n  '{ADD | ALTER | MODIFY | DROP} [CONSTRAINT]',\n  'RENAME CONSTRAINT',\n  '{ADD | DROP} SEARCH OPTIMIZATION',\n  '{SET | UNSET} TAG', // Actually TAG is optional, but that conflicts with UPDATE..SET statement\n  '{ADD | DROP} ROW ACCESS POLICY',\n  'DROP ALL ROW ACCESS POLICIES',\n  '{SET | DROP} DEFAULT', // for alter column\n  '{SET | DROP} NOT NULL', // for alter column\n  '[SET DATA] TYPE', // for alter column\n  '[UNSET] COMMENT', // for alter column\n  '{SET | UNSET} MASKING POLICY', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE] [IF EXISTS]',\n  // other\n  // https://docs.snowflake.com/en/sql-reference/sql-all.html\n  //\n  // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n  // 2. delete all lines that contain a sting like '(.*)', they are already covered in the list\n  // 3. delete all lines that contain a sting like '<.*>', they are already covered in the list\n  // 4. delete all lines that contain '…', they are part of a regex statement that can't be covered here\n  // 5. Manually add 'COPY INTO'\n  // 6. Remove all lines that are already in `reservedClauses`\n  //\n  // Steps 1-4 can be combined by the following script in the developer console:\n  // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n  //   filter(x => !x.match(/\\(.*\\)/) && !x.match(/…/) && !x.match(/<.*>/)) // Step 2-4\n  'ALTER ACCOUNT',\n  'ALTER API INTEGRATION',\n  'ALTER CONNECTION',\n  'ALTER DATABASE',\n  'ALTER EXTERNAL TABLE',\n  'ALTER FAILOVER GROUP',\n  'ALTER FILE FORMAT',\n  'ALTER FUNCTION',\n  'ALTER INTEGRATION',\n  'ALTER MASKING POLICY',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER NETWORK POLICY',\n  'ALTER NOTIFICATION INTEGRATION',\n  'ALTER PIPE',\n  'ALTER PROCEDURE',\n  'ALTER REPLICATION GROUP',\n  'ALTER RESOURCE MONITOR',\n  'ALTER ROLE',\n  'ALTER ROW ACCESS POLICY',\n  'ALTER SCHEMA',\n  'ALTER SECURITY INTEGRATION',\n  'ALTER SEQUENCE',\n  'ALTER SESSION',\n  'ALTER SESSION POLICY',\n  'ALTER SHARE',\n  'ALTER STAGE',\n  'ALTER STORAGE INTEGRATION',\n  'ALTER STREAM',\n  'ALTER TAG',\n  'ALTER TASK',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ALTER WAREHOUSE',\n  'BEGIN',\n  'CALL',\n  'COMMIT',\n  'COPY INTO',\n  'CREATE ACCOUNT',\n  'CREATE API INTEGRATION',\n  'CREATE CONNECTION',\n  'CREATE DATABASE',\n  'CREATE EXTERNAL FUNCTION',\n  'CREATE EXTERNAL TABLE',\n  'CREATE FAILOVER GROUP',\n  'CREATE FILE FORMAT',\n  'CREATE FUNCTION',\n  'CREATE INTEGRATION',\n  'CREATE MANAGED ACCOUNT',\n  'CREATE MASKING POLICY',\n  'CREATE MATERIALIZED VIEW',\n  'CREATE NETWORK POLICY',\n  'CREATE NOTIFICATION INTEGRATION',\n  'CREATE PIPE',\n  'CREATE PROCEDURE',\n  'CREATE REPLICATION GROUP',\n  'CREATE RESOURCE MONITOR',\n  'CREATE ROLE',\n  'CREATE ROW ACCESS POLICY',\n  'CREATE SCHEMA',\n  'CREATE SECURITY INTEGRATION',\n  'CREATE SEQUENCE',\n  'CREATE SESSION POLICY',\n  'CREATE SHARE',\n  'CREATE STAGE',\n  'CREATE STORAGE INTEGRATION',\n  'CREATE STREAM',\n  'CREATE TAG',\n  'CREATE TASK',\n  'CREATE USER',\n  'CREATE WAREHOUSE',\n  'DELETE',\n  'DESCRIBE DATABASE',\n  'DESCRIBE EXTERNAL TABLE',\n  'DESCRIBE FILE FORMAT',\n  'DESCRIBE FUNCTION',\n  'DESCRIBE INTEGRATION',\n  'DESCRIBE MASKING POLICY',\n  'DESCRIBE MATERIALIZED VIEW',\n  'DESCRIBE NETWORK POLICY',\n  'DESCRIBE PIPE',\n  'DESCRIBE PROCEDURE',\n  'DESCRIBE RESULT',\n  'DESCRIBE ROW ACCESS POLICY',\n  'DESCRIBE SCHEMA',\n  'DESCRIBE SEQUENCE',\n  'DESCRIBE SESSION POLICY',\n  'DESCRIBE SHARE',\n  'DESCRIBE STAGE',\n  'DESCRIBE STREAM',\n  'DESCRIBE TABLE',\n  'DESCRIBE TASK',\n  'DESCRIBE TRANSACTION',\n  'DESCRIBE USER',\n  'DESCRIBE VIEW',\n  'DESCRIBE WAREHOUSE',\n  'DROP CONNECTION',\n  'DROP DATABASE',\n  'DROP EXTERNAL TABLE',\n  'DROP FAILOVER GROUP',\n  'DROP FILE FORMAT',\n  'DROP FUNCTION',\n  'DROP INTEGRATION',\n  'DROP MANAGED ACCOUNT',\n  'DROP MASKING POLICY',\n  'DROP MATERIALIZED VIEW',\n  'DROP NETWORK POLICY',\n  'DROP PIPE',\n  'DROP PROCEDURE',\n  'DROP REPLICATION GROUP',\n  'DROP RESOURCE MONITOR',\n  'DROP ROLE',\n  'DROP ROW ACCESS POLICY',\n  'DROP SCHEMA',\n  'DROP SEQUENCE',\n  'DROP SESSION POLICY',\n  'DROP SHARE',\n  'DROP STAGE',\n  'DROP STREAM',\n  'DROP TAG',\n  'DROP TASK',\n  'DROP USER',\n  'DROP VIEW',\n  'DROP WAREHOUSE',\n  'EXECUTE IMMEDIATE',\n  'EXECUTE TASK',\n  'EXPLAIN',\n  'GET',\n  'GRANT OWNERSHIP',\n  'GRANT ROLE',\n  'INSERT',\n  'LIST',\n  'MERGE',\n  'PUT',\n  'REMOVE',\n  'REVOKE ROLE',\n  'ROLLBACK',\n  'SHOW COLUMNS',\n  'SHOW CONNECTIONS',\n  'SHOW DATABASES',\n  'SHOW DATABASES IN FAILOVER GROUP',\n  'SHOW DATABASES IN REPLICATION GROUP',\n  'SHOW DELEGATED AUTHORIZATIONS',\n  'SHOW EXTERNAL FUNCTIONS',\n  'SHOW EXTERNAL TABLES',\n  'SHOW FAILOVER GROUPS',\n  'SHOW FILE FORMATS',\n  'SHOW FUNCTIONS',\n  'SHOW GLOBAL ACCOUNTS',\n  'SHOW GRANTS',\n  'SHOW INTEGRATIONS',\n  'SHOW LOCKS',\n  'SHOW MANAGED ACCOUNTS',\n  'SHOW MASKING POLICIES',\n  'SHOW MATERIALIZED VIEWS',\n  'SHOW NETWORK POLICIES',\n  'SHOW OBJECTS',\n  'SHOW ORGANIZATION ACCOUNTS',\n  'SHOW PARAMETERS',\n  'SHOW PIPES',\n  'SHOW PRIMARY KEYS',\n  'SHOW PROCEDURES',\n  'SHOW REGIONS',\n  'SHOW REPLICATION ACCOUNTS',\n  'SHOW REPLICATION DATABASES',\n  'SHOW REPLICATION GROUPS',\n  'SHOW RESOURCE MONITORS',\n  'SHOW ROLES',\n  'SHOW ROW ACCESS POLICIES',\n  'SHOW SCHEMAS',\n  'SHOW SEQUENCES',\n  'SHOW SESSION POLICIES',\n  'SHOW SHARES',\n  'SHOW SHARES IN FAILOVER GROUP',\n  'SHOW SHARES IN REPLICATION GROUP',\n  'SHOW STAGES',\n  'SHOW STREAMS',\n  'SHOW TABLES',\n  'SHOW TAGS',\n  'SHOW TASKS',\n  'SHOW TRANSACTIONS',\n  'SHOW USER FUNCTIONS',\n  'SHOW USERS',\n  'SHOW VARIABLES',\n  'SHOW VIEWS',\n  'SHOW WAREHOUSES',\n  'TRUNCATE MATERIALIZED VIEW',\n  'UNDROP DATABASE',\n  'UNDROP SCHEMA',\n  'UNDROP TABLE',\n  'UNDROP TAG',\n  'UNSET',\n  'USE DATABASE',\n  'USE ROLE',\n  'USE SCHEMA',\n  'USE SECONDARY ROLES',\n  'USE WAREHOUSE'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'MINUS', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  '[INNER] JOIN',\n  '[NATURAL] {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{CROSS | NATURAL} JOIN'\n]);\n\nconst reservedPhrases = expandPhrases([\n  '{ROWS | RANGE} BETWEEN',\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]'\n]);\n\nexport const snowflake: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    stringTypes: ['$$', `''-qq-bs`],\n    identTypes: ['\"\"-qq'],\n    variableTypes: [\n      // for accessing columns at certain positons in the table\n      { regex: '[$][1-9]\\\\d*' },\n      // identifier style syntax\n      { regex: '[$][_a-zA-Z][_a-zA-Z0-9$]*' }\n    ],\n    extraParens: ['[]'],\n    identChars: { rest: '$' },\n    lineCommentTypes: ['--', '//'],\n    operators: [\n      // Modulo\n      '%',\n      // Type cast\n      '::',\n      // String concat\n      '||',\n      // Get Path\n      ':',\n      // Generators: https://docs.snowflake.com/en/sql-reference/functions/generator.html#generator\n      '=>'\n    ]\n  },\n  formatOptions: {\n    alwaysDenseOperators: [':', '::'],\n    onelineClauses\n  }\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n  // https://clickhouse.com/docs/en/sql-reference/functions/arithmetic-functions\n  arithmetic: [\n    'PLUS',\n    'MINUS',\n    'MULTIPLY',\n    'DIVIDE',\n    'INTDIV',\n    'INTDIVORZERO',\n    'MODULO',\n    'MODULOORZERO',\n    'NEGATE',\n    'ABS',\n    'GCD',\n    'LCM',\n    'MAX2',\n    'MIN2'\n  ],\n  // https://clickhouse.com/docs/en/sql-reference/functions/array-functions\n  arrays: [\n    'EMPTY',\n    'NOTEMPTY',\n    'LENGTH',\n    'EMPTYARRAYUINT8',\n    'EMPTYARRAYUINT16',\n    'EMPTYARRAYUINT32',\n    'EMPTYARRAYUINT64',\n    'EMPTYARRAYINT8',\n    'EMPTYARRAYINT16',\n    'EMPTYARRAYINT32',\n    'EMPTYARRAYINT64',\n    'EMPTYARRAYFLOAT32',\n    'EMPTYARRAYFLOAT64',\n    'EMPTYARRAYDATE',\n    'EMPTYARRAYDATETIME',\n    'EMPTYARRAYSTRING',\n    'EMPTYARRAYTOSINGLE',\n    'RANGE',\n    'ARRAY',\n    'ARRAYCONCAT',\n    'ARRAYELEMENT',\n    'HAS',\n    'HASALL',\n    'HASANY',\n    'HASSUBSTR',\n    'INDEXOF',\n    'ARRAYCOUNT',\n    'COUNTEQUAL',\n    'ARRAYENUMERATE',\n    'ARRAYENUMERATEUNIQ',\n    'ARRAYPOPBACK',\n    'ARRAYPOPFRONT',\n    'ARRAYPUSHBACK',\n    'ARRAYPUSHFRONT',\n    'ARRAYRESIZE',\n    'ARRAYSLICE',\n    'ARRAYSORT',\n    'ARRAYREVERSESORT',\n    'ARRAYUNIQ',\n    'ARRAYJOIN',\n    'ARRAYDIFFERENCE',\n    'ARRAYDISTINCT',\n    'ARRAYENUMERATEDENSE',\n    'ARRAYINTERSECT',\n    'ARRAYREDUCE',\n    'ARRAYREDUCEINRANGES',\n    'ARRAYREVERSE',\n    'REVERSE',\n    'FLATTEN',\n    'ARRAYCOMPACT',\n    'ARRAYZIP',\n    'ARRAYAUC',\n    'ARRAYMAP',\n    'ARRAYFILTER',\n    'ARRAYFILL',\n    'ARRAYREVERSEFILL',\n    'ARRAYSPLIT',\n    'ARRAYREVERSESPLIT',\n    'ARRAYEXISTS',\n    'ARRAYALL',\n    'ARRAYFIRST',\n    'ARRAYLAST',\n    'ARRAYFIRSTINDEX',\n    'ARRAYLASTINDEX',\n    'ARRAYMIN',\n    'ARRAYMAX',\n    'ARRAYSUM',\n    'ARRAYAVG',\n    'ARRAYCUMSUM',\n    'ARRAYCUMSUMNONNEGATIVE',\n    'ARRAYPRODUCT'\n  ],\n  // https://clickhouse.com/docs/en/sql-reference/functions/comparison-functions\n  comparison: ['EQUALS', 'NOTEQUALS', 'LESS', 'GREATER', 'LESSOREQUALS', 'GREATEROREQUALS'],\n  conversion: [\n    'TOINT8',\n    'TOINT16',\n    'TOINT32',\n    'TOINT64',\n    'TOINT128',\n    'TOINT256',\n    'TOINT8ORZERO',\n    'TOINT16ORZERO',\n    'TOINT32ORZERO',\n    'TOINT64ORZERO',\n    'TOINT128ORZERO',\n    'TOINT256ORZERO',\n    'TOINT8ORNULL',\n    'TOINT16ORNULL',\n    'TOINT32ORNULL',\n    'TOINT64ORNULL',\n    'TOINT128ORNULL',\n    'TOINT256ORNULL',\n    'TOINT8ORDEFAULT',\n    'TOINT16ORDEFAULT',\n    'TOINT32ORDEFAULT',\n    'TOINT64ORDEFAULT',\n    'TOINT128ORDEFAULT',\n    'TOINT256ORDEFAULT',\n    'TOUINT8',\n    'TOUINT16',\n    'TOUINT32',\n    'TOUINT64',\n    'TOUINT256',\n    'TOUINT8ORZERO',\n    'TOUINT16ORZERO',\n    'TOUINT32ORZERO',\n    'TOUINT64ORZERO',\n    'TOUINT256ORZERO',\n    'TOUINT8ORNULL',\n    'TOUINT16ORNULL',\n    'TOUINT32ORNULL',\n    'TOUINT64ORNULL',\n    'TOUINT256ORNULL',\n    'TOUINT8ORDEFAULT',\n    'TOUINT16ORDEFAULT',\n    'TOUINT32ORDEFAULT',\n    'TOUINT64ORDEFAULT',\n    'TOUINT256ORDEFAULT',\n    'TOFLOAT32',\n    'TOFLOAT64',\n    'TOFLOAT32ORZERO',\n    'TOFLOAT64ORZERO',\n    'TOFLOAT32ORNULL',\n    'TOFLOAT64ORNULL',\n    'TOFLOAT32ORDEFAULT',\n    'TOFLOAT64ORDEFAULT',\n    'TODATE',\n    'TODATEORZERO',\n    'TODATEORNULL',\n    'TODATEORDEFAULT',\n    'TODATETIME',\n    'TODATETIMEORZERO',\n    'TODATETIMEORNULL',\n    'TODATETIMEORDEFAULT',\n    'TODATE32',\n    'TODATE32ORZERO',\n    'TODATE32ORNULL',\n    'TODATE32ORDEFAULT',\n    'TODECIMAL32',\n    'TODECIMAL64',\n    'TODECIMAL128',\n    'TODECIMAL256',\n    'TODECIMAL32ORNULL',\n    'TODECIMAL64ORNULL',\n    'TODECIMAL128ORNULL',\n    'TODECIMAL256ORNULL',\n    'TODECIMAL32ORZERO',\n    'TODECIMAL64ORZERO',\n    'TODECIMAL128ORZERO',\n    'TODECIMAL256ORZERO',\n    'TODECIMAL32ORDEFAULT',\n    'TODECIMAL64ORDEFAULT',\n    'TODECIMAL128ORDEFAULT',\n    'TODECIMAL256ORDEFAULT',\n    'TOSTRING',\n    'TOFIXEDSTRING',\n    'TOSTRINGCUTTOZERO',\n    'REINTERPRETASUINT8',\n    'REINTERPRETASUINT16',\n    'REINTERPRETASUINT32',\n    'REINTERPRETASUINT64',\n    'REINTERPRETASINT8',\n    'REINTERPRETASINT16',\n    'REINTERPRETASINT32',\n    'REINTERPRETASINT64',\n    'REINTERPRETASFLOAT32',\n    'REINTERPRETASFLOAT64',\n    'REINTERPRETASDATE',\n    'REINTERPRETASDATETIME',\n    'REINTERPRETASSTRING',\n    'REINTERPRETASFIXEDSTRING',\n    'REINTERPRETASUUID',\n    'REINTERPRET',\n    'CAST',\n    'ACCURATECAST',\n    'ACCURATECASTORNULL',\n    'ACCURATECASTORDEFAULT',\n    'TOINTERVALYEAR',\n    'TOINTERVALQUARTER',\n    'TOINTERVALMONTH',\n    'TOINTERVALWEEK',\n    'TOINTERVALDAY',\n    'TOINTERVALHOUR',\n    'TOINTERVALMINUTE',\n    'TOINTERVALSECOND',\n    'PARSEDATETIMEBESTEFFORT',\n    'PARSEDATETIMEBESTEFFORTUS',\n    'PARSEDATETIME32BESTEFFORT',\n    'PARSEDATETIME64BESTEFFORT',\n    'PARSEDATETIMEBESTEFFORTORNULL',\n    'PARSEDATETIMEBESTEFFORTUSORNULL',\n    'PARSEDATETIME32BESTEFFORTORNULL',\n    'PARSEDATETIME64BESTEFFORTORNULL',\n    'PARSEDATETIMEBESTEFFORTORZERO',\n    'PARSEDATETIMEBESTEFFORTUSORZERO',\n    'PARSEDATETIME32BESTEFFORTORZERO',\n    'PARSEDATETIME64BESTEFFORTORZERO',\n    'TOLOWCARDINALITY',\n    'TOUNIXTIMESTAMP64MILLI',\n    'TOUNIXTIMESTAMP64MICRO',\n    'TOUNIXTIMESTAMP64NANO',\n    'FROMUNIXTIMESTAMP64MILLI',\n    'FROMUNIXTIMESTAMP64MICRO',\n    'FROMUNIXTIMESTAMP64NANO',\n    'FORMATROW',\n    'FORMATROWNONEWLINE',\n    'SNOWFLAKETODATETIME',\n    'SNOWFLAKETODATETIME64',\n    'DATETIMETOSNOWFLAKE',\n    'DATETIME64TOSNOWFLAKE'\n  ],\n  date: [\n    'TIMEZONE',\n    'TOTIMEZONE',\n    'TIMEZONEOF',\n    'TIMEZONEOFFSET',\n    'TOYEAR',\n    'TOQUARTER',\n    'TOMONTH',\n    'TODAYOFYEAR',\n    'TODAYOFMONTH',\n    'TODAYOFWEEK',\n    'TOHOUR',\n    'TOMINUTE',\n    'TOSECOND',\n    'TOUNIXTIMESTAMP',\n    'TOSTARTOFYEAR',\n    'TOSTARTOFISOYEAR',\n    'TOSTARTOFQUARTER',\n    'TOSTARTOFMONTH',\n    'TOMONDAY',\n    'TOSTARTOFWEEK',\n    'TOSTARTOFDAY',\n    'TOSTARTOFHOUR',\n    'TOSTARTOFMINUTE',\n    'TOSTARTOFSECOND',\n    'TOSTARTOFFIVEMINUTES',\n    'TOSTARTOFTENMINUTES',\n    'TOSTARTOFFIFTEENMINUTES',\n    'TOSTARTOFINTERVAL',\n    'TOTIME',\n    'TORELATIVEYEARNUM',\n    'TORELATIVEQUARTERNUM',\n    'TORELATIVEMONTHNUM',\n    'TORELATIVEWEEKNUM',\n    'TORELATIVEDAYNUM',\n    'TORELATIVEHOURNUM',\n    'TORELATIVEMINUTENUM',\n    'TORELATIVESECONDNUM',\n    'TOISOYEAR',\n    'TOISOWEEK',\n    'TOWEEK',\n    'TOYEARWEEK',\n    'DATE_TRUNC',\n    'DATE_ADD',\n    'DATE_DIFF',\n    'DATE_SUB',\n    'TIMESTAMP_ADD',\n    'TIMESTAMP_SUB',\n    'NOW',\n    'TODAY',\n    'YESTERDAY',\n    'TIMESLOT',\n    'TOYYYYMM',\n    'TOYYYYMMDD',\n    'TOYYYYMMDDHHMMSS',\n    'ADDYEARS',\n    'ADDMONTHS',\n    'ADDWEEKS',\n    'ADDDAYS',\n    'ADDHOURS',\n    'ADDMINUTES',\n    'ADDSECONDS',\n    'ADDQUARTERS',\n    'SUBTRACTYEARS',\n    'SUBTRACTMONTHS',\n    'SUBTRACTWEEKS',\n    'SUBTRACTDAYS',\n    'SUBTRACTHOURS',\n    'SUBTRACTMINUTES',\n    'SUBTRACTSECONDS',\n    'SUBTRACTQUARTERS',\n    'TIMESLOTS',\n    'FORMATDATETIME',\n    'DATENAME',\n    'FROM_UNIXTIME',\n    'TOMODIFIEDJULIANDAY',\n    'TOMODIFIEDJULIANDAYORNULL',\n    'FROMMODIFIEDJULIANDAY',\n    'FROMMODIFIEDJULIANDAYORNULL'\n  ],\n  // https://clickhouse.com/docs/en/sql-reference/functions/string-functions\n  string: [\n    'LENGTHUTF8',\n    'CHAR_LENGTH',\n    'CHARACTER_LENGTH',\n    'LEFTPAD',\n    'LEFTPADUTF8',\n    'RIGHTPAD',\n    'RIGHTPADUTF8',\n    'LOWER',\n    'LCASE',\n    'UPPER',\n    'UCASE',\n    'LOWERUTF8',\n    'UPPERUTF8',\n    'ISVALIDUTF8',\n    'TOVALIDUTF8',\n    'REPEAT',\n    'REVERSE',\n    'REVERSEUTF8',\n    'FORMAT',\n    'CONCAT',\n    'CONCATASSUMEINJECTIVE',\n    'SUBSTRING',\n    'MID',\n    'SUBSTR',\n    'SUBSTRINGUTF8',\n    'APPENDTRAILINGCHARIFABSENT',\n    'CONVERTCHARSET',\n    'BASE64ENCODE',\n    'BASE64DECODE',\n    'TRYBASE64DECODE',\n    'ENDSWITH',\n    'STARTSWITH',\n    'TRIM',\n    'TRIMLEFT',\n    'TRIMRIGHT',\n    'TRIMBOTH',\n    'CRC32',\n    'CRC32IEEE',\n    'CRC64',\n    'NORMALIZEQUERY',\n    'NORMALIZEDQUERYHASH',\n    'NORMALIZEUTF8NFC',\n    'NORMALIZEUTF8NFD',\n    'NORMALIZEUTF8NFKC',\n    'NORMALIZEUTF8NFKD',\n    'ENCODEXMLCOMPONENT',\n    'DECODEXMLCOMPONENT',\n    'EXTRACTTEXTFROMHTML',\n    // for searching in strings\n    'POSITION',\n    'POSITIONCASEINSENSITIVE',\n    'POSITIONUTF8',\n    'POSITIONCASEINSENSITIVEUTF8',\n    'MULTISEARCHALLPOSITIONS',\n    'MULTISEARCHALLPOSITIONSUTF8',\n    'MULTISEARCHFIRSTPOSITION',\n    'MULTISEARCHFIRSTINDEX',\n    'MULTISEARCHANY',\n    'MATCH',\n    'MULTIMATCHANY',\n    'MULTIMATCHANYINDEX',\n    'MULTIMATCHALLINDICES',\n    'MULTIFUZZYMATCHANY',\n    'MULTIFUZZYMATCHANYINDEX',\n    'MULTIFUZZYMATCHALLINDICES',\n    'EXTRACT',\n    'EXTRACTALL',\n    'EXTRACTALLGROUPSHORIZONTAL',\n    'EXTRACTALLGROUPSVERTICAL',\n    'LIKE',\n    'NOTLIKE',\n    'ILIKE',\n    'NGRAMDISTANCE',\n    'NGRAMDISTANCECASEINSENSITIVE',\n    'NGRAMDISTANCEUTF8',\n    'NGRAMDISTANCECASEINSENSITIVEUTF8',\n    'NGRAMSEARCH',\n    'COUNTSUBSTRINGS',\n    'COUNTSUBSTRINGSCASEINSENSITIVE',\n    'COUNTSUBSTRINGSCASEINSENSITIVEUTF8',\n    'COUNTMATCHES',\n    // FOR REPLACE IN STRING\n    'REPLACEONE',\n    'REPLACEALL',\n    'REPLACE',\n    'REPLACEREGEXPONE',\n    'REPLACEREGEXPALL',\n    'REGEXPQUOTEMETA'\n  ],\n  conditional: ['IF', 'MULTIIF'],\n  match: [\n    'E',\n    'PI',\n    'EXP',\n    'LOG',\n    'LN',\n    'EXP2',\n    'LOG2',\n    'EXP10',\n    'LOG10',\n    'SQRT',\n    'CBRT',\n    'ERF',\n    'ERFC',\n    'LGAMMA',\n    'TGAMMA',\n    'SIN',\n    'COS',\n    'TAN',\n    'ASIN',\n    'ACOS',\n    'ATAN',\n    'POW',\n    'POWER',\n    'INTEXP2',\n    'INTEXP10',\n    'COSH',\n    'ACOSH',\n    'SINH',\n    'ASINH',\n    'ATANH',\n    'ATAN2',\n    'HYPOT',\n    'LOG1P',\n    'SIGN',\n    'DEGREES',\n    'RADIANS',\n    'FLOOR',\n    'CEIL',\n    'CEILING',\n    'TRUNC',\n    'TRUNCATE',\n    'ROUND',\n    'ROUNDBANKERS',\n    'ROUNDTOEXP2',\n    'ROUNDDURATION',\n    'ROUNDAGE',\n    'ROUNDDOWN',\n    'MAP',\n    'MAPADD',\n    'MAPSUBTRACT',\n    'MAPPOPULATESERIES',\n    'MAPCONTAINS',\n    'MAPKEYS',\n    'MAPVALUES',\n    'MAPCONTAINSKEYLIKE',\n    'MAPEXTRACTKEYLIKE',\n    'MAPAPPLY',\n    'MAPFILTER',\n    'MAPUPDATE'\n  ],\n  other: [\n    'FILE',\n    'SPLITBYCHAR',\n    'SPLITBYSTRING',\n    'SPLITBYREGEXP',\n    'SPLITBYWHITESPACE',\n    'SPLITBYNONALPHA',\n    'ARRAYSTRINGCONCAT',\n    'ALPHATOKENS',\n    'EXTRACTALLGROUPS',\n    'NGRAMS',\n    'TOKENS',\n    'BITAND',\n    'BITOR',\n    'BITXOR',\n    'BITNOT',\n    'BITSHIFTLEFT',\n    'BITSHIFTRIGHT',\n    'BITROTATELEFT',\n    'BITROTATERIGHT',\n    'BITSLICE',\n    'BITTEST',\n    'BITTESTALL',\n    'BITTESTANY',\n    'BITCOUNT',\n    'BITHAMMINGDISTANCE',\n    'BITMAPBUILD',\n    'BITMAPTOARRAY',\n    'BITMAPSUBSETINRANGE',\n    'BITMAPSUBSETLIMIT',\n    'SUBBITMAP',\n    'BITMAPCONTAINS',\n    'BITMAPHASANY',\n    'BITMAPHASALL',\n    'BITMAPCARDINALITY',\n    'BITMAPMIN',\n    'BITMAPMAX',\n    'BITMAPTRANSFORM',\n    'BITMAPAND',\n    'BITMAPOR',\n    'BITMAPXOR',\n    'BITMAPANDNOT',\n    'BITMAPANDCARDINALITY',\n    'BITMAPORCARDINALITY',\n    'BITMAPXORCARDINALITY',\n    'BITMAPANDNOTCARDINALITY',\n    'HALFMD5',\n    'MD4',\n    'MD5',\n    'SIPHASH64',\n    'SIPHASH128',\n    'CITYHASH64',\n    'INTHASH32',\n    'INTHASH64',\n    'SHA1',\n    'SHA224',\n    'SHA256',\n    'SHA512',\n    'BLAKE3',\n    'URLHASH',\n    'FARMFINGERPRINT64',\n    'FARMHASH64',\n    'JAVAHASH',\n    'JAVAHASHUTF16LE',\n    'HIVEHASH',\n    'METROHASH64',\n    'JUMPCONSISTENTHASH',\n    'MURMURHASH2_32',\n    'MURMURHASH2_64',\n    'GCCMURMURHASH',\n    'MURMURHASH3_32',\n    'MURMURHASH3_64',\n    'MURMURHASH3_128',\n    'XXHASH32',\n    'XXHASH32',\n    'NGRAMSIMHASH',\n    'NGRAMSIMHASHCASEINSENSITIVE',\n    'NGRAMSIMHASHUTF8',\n    'NGRAMSIMHASHCASEINSENSITIVEUTF8',\n    'WORDSHINGLESIMHASH',\n    'WORDSHINGLESIMHASHCASEINSENSITIVE',\n    'WORDSHINGLESIMHASHUTF8',\n    'WORDSHINGLESIMHASHCASEINSENSITIVEUTF8',\n    'NGRAMMINHASH',\n    'NGRAMMINHASHCASEINSENSITIVE',\n    'NGRAMMINHASHUTF8',\n    'NGRAMMINHASHCASEINSENSITIVEUTF8',\n    'NGRAMMINHASHARG',\n    'NGRAMMINHASHARGCASEINSENSITIVE',\n    'NGRAMMINHASHARGUTF8',\n    'NGRAMMINHASHARGCASEINSENSITIVEUTF8',\n    'WORDSHINGLEMINHASH',\n    'WORDSHINGLEMINHASHCASEINSENSITIVE',\n    'WORDSHINGLEMINHASHUTF8',\n    'WORDSHINGLEMINHASHCASEINSENSITIVEUTF8',\n    'WORDSHINGLEMINHASHARG',\n    'WORDSHINGLEMINHASHARGCASEINSENSITIVE',\n    'WORDSHINGLEMINHASHARGUTF8',\n    'WORDSHINGLEMINHASHARGCASEINSENSITIVEUTF8',\n    'RAND',\n    'RAND32',\n    'RAND64',\n    'RANDCONSTANT',\n    'RANDOMSTRING',\n    'RANDOMFIXEDSTRING',\n    'RANDOMPRINTABLEASCII',\n    'RANDOMSTRINGUTF8',\n    'FUZZBITS',\n    'CHAR',\n    'HEX',\n    'UNHEX',\n    'BIN',\n    'UNBIN',\n    'UUIDSTRINGTONUM',\n    'UUIDNUMTOSTRING',\n    'BITMASKTOLIST',\n    'BITMASKTOARRAY',\n    'BITPOSITIONSTOARRAY',\n    'GENERATEUUIDV4',\n    'EMPTY',\n    'NOTEMPTY',\n    'TOUUID',\n    'TOUUIDORNULL',\n    'TOUUIDORZERO',\n    'UUIDSTRINGTONUM',\n    'UUIDNUMTOSTRING',\n    'SERVERUUID',\n    'PROTOCOL',\n    'DOMAIN',\n    'DOMAINWITHOUTWWW',\n    'TOPLEVELDOMAIN',\n    'FIRSTSIGNIFICANTSUBDOMAIN',\n    'CUTTOFIRSTSIGNIFICANTSUBDOMAIN',\n    'CUTTOFIRSTSIGNIFICANTSUBDOMAINWITHWWW',\n    'CUTTOFIRSTSIGNIFICANTSUBDOMAINCUSTOM',\n    'CUTTOFIRSTSIGNIFICANTSUBDOMAINCUSTOMWITHWWW',\n    'FIRSTSIGNIFICANTSUBDOMAINCUSTOM',\n    'PORT',\n    'PATH',\n    'PATHFULL',\n    'QUERYSTRING',\n    'FRAGMENT',\n    'QUERYSTRINGANDFRAGMENT',\n    'EXTRACTURLPARAMETER',\n    'EXTRACTURLPARAMETERS',\n    'EXTRACTURLPARAMETERNAMES',\n    'URLHIERARCHY',\n    'URLPATHHIERARCHY',\n    'ENCODEURLCOMPONENT',\n    'DECODEURLCOMPONENT',\n    'ENCODEURLFORMCOMPONENT',\n    'DECODEURLFORMCOMPONENT',\n    'NETLOC',\n    'CUTWWW',\n    'CUTQUERYSTRING',\n    'CUTFRAGMENT',\n    'CUTQUERYSTRINGANDFRAGMENT',\n    'CUTURLPARAMETER',\n    'IPV4NUMTOSTRING',\n    'IPV4STRINGTONUM',\n    'IPV4STRINGTONUMORDEFAULT',\n    'IPV4STRINGTONUMORNULL',\n    'IPV4NUMTOSTRINGCLASSC',\n    'IPV6NUMTOSTRING',\n    'IPV6STRINGTONUM',\n    'IPV6STRINGTONUMORDEFAULT',\n    'IPV6STRINGTONUMORNULL',\n    'IPV4TOIPV6',\n    'CUTIPV6',\n    'IPV4CIDRTORANGE',\n    'IPV6CIDRTORANGE',\n    'TOIPV4',\n    'TOIPV4ORDEFAULT',\n    'TOIPV4ORNULL',\n    'TOIPV6',\n    'IPV6STRINGTONUMORDEFAULT',\n    'IPV6STRINGTONUMORNULL',\n    'ISIPV4STRING',\n    'ISIPV6STRING',\n    'ISIPADDRESSINRANGE',\n    'VISITPARAMHAS',\n    'VISITPARAMEXTRACTUINT',\n    'VISITPARAMEXTRACTINT',\n    'VISITPARAMEXTRACTFLOAT',\n    'VISITPARAMEXTRACTBOOL',\n    'VISITPARAMEXTRACTRAW',\n    'VISITPARAMEXTRACTSTRING',\n    'ISVALIDJSON',\n    'JSONHAS',\n    'JSONLENGTH',\n    'JSONTYPE',\n    'JSONEXTRACTUINT',\n    'JSONEXTRACTINT',\n    'JSONEXTRACTFLOAT',\n    'JSONEXTRACTBOOL',\n    'JSONEXTRACTSTRING',\n    'JSONEXTRACT',\n    'JSONEXTRACTKEYSANDVALUES',\n    'JSONEXTRACTKEYS',\n    'JSONEXTRACTRAW',\n    'JSONEXTRACTARRAYRAW',\n    'JSONEXTRACTKEYSANDVALUESRAW',\n    'JSON_EXISTS',\n    'JSON_QUERY',\n    'JSON_VALUE',\n    'TOJSONSTRING',\n    'DICTGET',\n    'DICTGETORDEFAULT',\n    'DICTGETORNULL',\n    'DICTHAS',\n    'DICTGETHIERARCHY',\n    'DICTISIN',\n    'DICTGETCHILDREN',\n    'DICTGETDESCENDANT',\n    'DICTGETINT8',\n    'DICTGETINT16',\n    'DICTGETINT32',\n    'DICTGETINT64',\n    'DICTGETUINT8',\n    'DICTGETUINT16',\n    'DICTGETUINT32',\n    'DICTGETUINT64',\n    'DICTGETFLOAT32',\n    'DICTGETFLOAT64',\n    'DICTGETDATE',\n    'DICTGETDATETIME',\n    'DICTGETUUID',\n    'DICTGETSTRING',\n    'REGIONTOCITY',\n    'REGIONTOAREA',\n    'REGIONTODISTRICT',\n    'REGIONTOCOUNTRY',\n    'REGIONTOCONTINENT',\n    'REGIONTOTOPCONTINENT',\n    'REGIONTOPOPULATION',\n    'REGIONIN',\n    'REGIONHIERARCHY',\n    'REGIONTONAME',\n    'IN',\n    'NOTIN',\n    'GLOBALIN',\n    'GLOBALNOTIN',\n    'ARRAYJOIN',\n    'GREATCIRCLEDISTANCE',\n    'GEODISTANCE',\n    'GREATCIRCLEANGLE',\n    'POINTINELLIPSES',\n    'POINTINPOLYGON',\n    'GEOHASHENCODE',\n    'GEOHASHDECODE',\n    'GEOHASHESINBOX',\n    'H3ISVALID',\n    'H3GETRESOLUTION',\n    'H3EDGEANGLE',\n    'H3EDGELENGTHM',\n    'H3EDGELENGTHKM',\n    'GEOTOH3',\n    'H3TOGEO',\n    'H3TOGEOBOUNDARY',\n    'H3KRING',\n    'H3GETBASECELL',\n    'H3HEXAREAM2',\n    'H3HEXAREAKM2',\n    'H3INDEXESARENEIGHBORS',\n    'H3TOCHILDREN',\n    'H3TOPARENT',\n    'H3TOSTRING',\n    'STRINGTOH3',\n    'H3GETRESOLUTION',\n    'H3ISRESCLASSIII',\n    'H3ISPENTAGON',\n    'H3GETFACES',\n    'H3CELLAREAM2',\n    'H3CELLAREARADS2',\n    'H3TOCENTERCHILD',\n    'H3EXACTEDGELENGTHM',\n    'H3EXACTEDGELENGTHKM',\n    'H3EXACTEDGELENGTHRADS',\n    'H3NUMHEXAGONS',\n    'H3LINE',\n    'H3DISTANCE',\n    'H3HEXRING',\n    'H3GETUNIDIRECTIONALEDGE',\n    'H3UNIDIRECTIONALEDGEISVALID',\n    'H3GETORIGININDEXFROMUNIDIRECTIONALEDGE',\n    'H3GETDESTINATIONINDEXFROMUNIDIRECTIONALEDGE',\n    'H3GETINDEXESFROMUNIDIRECTIONALEDGE',\n    'H3GETUNIDIRECTIONALEDGESFROMHEXAGON',\n    'H3GETUNIDIRECTIONALEDGEBOUNDARY',\n    'GEOTOS2',\n    'S2TOGEO',\n    'S2GETNEIGHBORS',\n    'S2CELLSINTERSECT',\n    'S2CAPCONTAINS',\n    'S2CAPUNION',\n    'S2RECTADD',\n    'S2RECTCONTAINS',\n    'S2RECTUINION',\n    'S2RECTINTERSECTION',\n    'ISNULL',\n    'ISNOTNULL',\n    'IFNULL',\n    'NULLIF',\n    'ASSUMENOTNULL',\n    'TONULLABLE',\n    'COALESCE',\n    'ADDRESSTOLINE',\n    'ADDRESSTOLINEWITHINLINES',\n    'ADDRESSTOSYMBOL',\n    'DEMANGLE',\n    'TID',\n    'LOGTRACE',\n    'TUPLE',\n    'TUPLEELEMENT',\n    'UNTUPLE',\n    'TUPLEHAMMINGDISTANCE',\n    'TUPLETONAMEVALUEPAIRS',\n    'TUPLEPLUS',\n    'TUPLEMINUS',\n    'TUPLEMULTIPLY',\n    'TUPLEDIVIDE',\n    'TUPLENEGATE',\n    'TUPLEMULTIPLYBYNUMBER',\n    'TUPLEDIVIDEBYNUMBER',\n    'DOTPRODUCT',\n    'L1NORM',\n    'L2NORM',\n    'LINFNORM',\n    'LPNORM',\n    'L1DISTANCE',\n    'L2DISTANCE',\n    'LINFDISTANCE',\n    'LPDISTANCE',\n    'L1NORMALIZE',\n    'L2NORMALIZE',\n    'LINFNORMALIZE',\n    'LPNORMALIZE',\n    'COSINEDISTANCE',\n    'ENCRYPT',\n    'AES_ENCRYPT_MYSQL',\n    'DECRYPT',\n    'AES_DECRYPT_MYSQL',\n    'STEM',\n    'LEMMATIZE',\n    'SYNONYMS',\n    'HOSTNAME',\n    'GETMACRO',\n    'FQDN',\n    'BASENAME',\n    'VISIBLEWIDTH',\n    'TOTYPENAME',\n    'BLOCKSIZE',\n    'BYTESIZE',\n    'MATERIALIZE',\n    'IGNORE',\n    'SLEEP',\n    'SLEEPEACHROW',\n    'CURRENTDATABASE',\n    'CURRENTUSER',\n    'ISCONSTANT',\n    'ISFINITE',\n    'ISINFINITE',\n    'IFNOTFINITE',\n    'ISNAN',\n    'HASCOLUMNINTABLE',\n    'BAR',\n    'TRANSFORM',\n    'FORMATREADABLESIZE',\n    'FORMATREADABLEQUANTITY',\n    'FORMATREADABLETIMEDELTA',\n    'LEAST',\n    'GREATEST',\n    'UPTIME',\n    'VERSION',\n    'BUILDID',\n    'BLOCKNUMBER',\n    'ROWNUMBERINBLOCK',\n    'ROWNUMBERINALLBLOCKS',\n    'NEIGHBOR',\n    'RUNNINGDIFFERENCE',\n    'RUNNINGDIFFERENCESTARTINGWITHFIRSTVALUE',\n    'RUNNINGCONCURRENCY',\n    'MACNUMTOSTRING',\n    'MACSTRINGTONUM',\n    'MACSTRINGTOOUI',\n    'GETSIZEOFENUMTYPE',\n    'BLOCKSERIALIZEDSIZE',\n    'TOCOLUMNTYPENAME',\n    'DUMPCOLUMNSTRUCTURE',\n    'DEFAULTVALUEOFARGUMENTTYPE',\n    'DEFAULTVALUEOFTYPENAME',\n    'INDEXHINT',\n    'REPLICATE',\n    'FILESYSTEMAVAILABLE',\n    'FILESYSTEMFREE',\n    'FILESYSTEMCAPACITY',\n    'INITIALIZEAGGREGATION',\n    'FINALIZEAGGREGATION',\n    'RUNNINGACCUMULATE',\n    'JOINGET',\n    'MODELEVALUATE',\n    'THROWIF',\n    'IDENTITY',\n    'RANDOMPRINTABLEASCII',\n    'RANDOMSTRING',\n    'RANDOMFIXEDSTRING',\n    'RANDOMSTRINGUTF8',\n    'GETSETTING',\n    'ISDECIMALOVERFLOW',\n    'COUNTDIGITS',\n    'ERRORCODETONAME',\n    'TCPPORT',\n    'CURRENTPROFILES',\n    'ENABLEDPROFILES',\n    'DEFAULTPROFILES',\n    'CURRENTROLES',\n    'ENABLEDROLES',\n    'DEFAULTROLES',\n    'GETSERVERPORT',\n    'QUERYID',\n    'INITIALQUERYID',\n    'SHARDNUM',\n    'SHARDCOUNT',\n    'GETOSKERNELVERSION',\n    'ZOOKEEPERSESSIONUPTIME',\n    'TUMBLE',\n    'HOP',\n    'TUMBLESTART',\n    'TUMBLEEND',\n    'HOPSTART',\n    'HOPEND'\n  ],\n\n  aggregate: [\n    'COUNT',\n    'MIN',\n    'MAX',\n    'SUM',\n    'AVG',\n    'ANY',\n    'STDDEVPOP',\n    'STDDEVSAMP',\n    'VARPOP',\n    'VARSAMP',\n    'COVARPOP',\n    'COVARSAMP',\n    'ANYHEAVY',\n    'ANYLAST',\n    'ARGMIN',\n    'ARGMAX',\n    'AVGWEIGHTED',\n    'TOPK',\n    'TOPKWEIGHTED',\n    'GROUPARRAY',\n    'GROUPUNIQARRAY',\n    'GROUPARRAYINSERTAT',\n    'GROUPARRAYMOVINGAVG',\n    'GROUPARRAYMOVINGSUM',\n    'GROUPBITAND',\n    'GROUPBITOR',\n    'GROUPBITXOR',\n    'GROUPBITMAP',\n    'GROUPBITMAPAND',\n    'GROUPBITMAPOR',\n    'GROUPBITMAPXOR',\n    'SUMWITHOVERFLOW',\n    'SUMMAP',\n    'MINMAP',\n    'MAXMAP',\n    'SKEWSAMP',\n    'SKEWPOP',\n    'KURTSAMP',\n    'KURTPOP',\n    'UNIQ',\n    'UNIQEXACT',\n    'UNIQCOMBINED',\n    'UNIQCOMBINED64',\n    'UNIQHLL12',\n    'QUANTILE',\n    'QUANTILES',\n    'QUANTILEEXACT',\n    'QUANTILEEXACTLOW',\n    'QUANTILEEXACTHIGH',\n    'QUANTILEEXACTWEIGHTED',\n    'QUANTILETIMING',\n    'QUANTILETIMINGWEIGHTED',\n    'QUANTILEDETERMINISTIC',\n    'QUANTILETDIGEST',\n    'QUANTILETDIGESTWEIGHTED',\n    'QUANTILEBFLOAT16',\n    'QUANTILEBFLOAT16WEIGHTED',\n    'SIMPLELINEARREGRESSION',\n    'STOCHASTICLINEARREGRESSION',\n    'STOCHASTICLOGISTICREGRESSION',\n    'CATEGORICALINFORMATIONVALUE',\n    'HISTOGRAM',\n    'SEQUENCEMATCH',\n    'SEQUENCECOUNT',\n    'WINDOWFUNNEL',\n    'RETENTION',\n    'UNIQUPTO',\n    'SUMMAPFILTERED',\n    'SEQUENCENEXTNODE'\n  ],\n  table: [\n    'FILE',\n    'MERGE',\n    'NUMBERS',\n    'REMOTE',\n    'REMOTESECURE',\n    'URL',\n    'MYSQL',\n    'POSTGRESQL',\n    'JDBC',\n    'ODBC',\n    'HDFS',\n    'S3',\n    'GENERATERANDOM',\n    'CLUSTER',\n    'VIEW',\n    'NULL',\n    'DICTIONARY',\n    'HDFSCLUSTER',\n    'S3CLUSTER',\n    'SQLITE'\n  ],\n  // https://clickhouse.com/docs/zh/sql-reference/window-functions/\n  window: [\n    'LEAD',\n    'LAG',\n    'FIRST_VALUE',\n    'LAST_VALUE',\n    'RANK',\n    'ROW_NUMBER',\n    'DENSE_RANK',\n    'CUME_DIST',\n    'PERCENT_RANK',\n    'NTILE'\n  ]\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n  all: [\n    'ADD',\n    'AGGREGATE',\n    'ALL',\n    'ALLOCATE',\n    'ALTER',\n    'AND',\n    'ANY',\n    'ARRAY',\n    'AS',\n    'ASC',\n    'ATTACH',\n    'ATTRIBUTE',\n    'BETWEEN',\n    'BY',\n    'CASE',\n    'CAST',\n    'CHANGE',\n    'CHECK',\n    'CLEAR',\n    'COLLATE',\n    'COLUMN',\n    'COMMENT',\n    'COMMIT',\n    'COMPACT',\n    'CREATE',\n    'CROSS',\n    'CURRENT',\n    'DATABASE',\n    'DAY',\n    'DEFAULT',\n    'DELETE',\n    'DESC',\n    'DESCRIBE',\n    'DETACH',\n    'DISTINCT',\n    'DROP',\n    'ELSE',\n    'END',\n    'ENGINE',\n    'EXISTS',\n    'EXPLAIN',\n    'EXTENDED',\n    'EXTERNAL',\n    'FETCH',\n    'FIELDS',\n    'FILTER',\n    'FIRST',\n    'FOLLOWING',\n    'FORMAT',\n    'FROM',\n    'FULL',\n    'FUNCTION',\n    'GLOBAL',\n    'GRANT',\n    'GROUP',\n    'HAVING',\n    'IF',\n    'IGNORE',\n    'IN',\n    'INDEX',\n    'INNER',\n    'INSERT',\n    'INT',\n    'INTERVAL',\n    'INTO',\n    'IS',\n    'JOIN',\n    'LAST',\n    'LEFT',\n    'LEVEL',\n    'LIKE',\n    'LIMIT',\n    'LOCAL',\n    'LOG',\n    'MATCH',\n    'MAX',\n    'MIN',\n    'MODIFY',\n    'MONTH',\n    'MOVE',\n    'MATERIALIZED',\n    'NATURAL',\n    'NOT',\n    'NOTHING',\n    'NULL',\n    'NULLS',\n    'OFFSET',\n    'ON',\n    'OPTIMIZE',\n    'OR',\n    'ORDER',\n    'OUTER',\n    'OVER',\n    'PARTITION',\n    'PARTITIONS',\n    'PRECEDING',\n    'PRIMARY',\n    'PROFILE',\n    'PURGE',\n    'RENAME',\n    'REPLACE',\n    'RESET',\n    'RESTRICT',\n    'RIGHT',\n    'ROLLBACK',\n    'ROLLUP',\n    'SAMPLE',\n    'SELECT',\n    'SEMI',\n    'SET',\n    'SHOW',\n    'SOME',\n    'START',\n    'STORAGE',\n    'SUBSTRING',\n    'TABLE',\n    'TEMPORARY',\n    'THEN',\n    'TO',\n    'TONUMBER',\n    'TOP',\n    'TOSTATE',\n    'TOTAL',\n    'TOUInt16',\n    'TOUInt32',\n    'TOUInt64',\n    'TOInt8',\n    'TOInt16',\n    'TOInt32',\n    'TOInt64',\n    'TOFloat32',\n    'TOFloat64',\n    'TRUNCATE',\n    'TRY',\n    'TYPE',\n    'UNION',\n    'UNIQUE',\n    'UPDATE',\n    'USE',\n    'USING',\n    'VALUES',\n    'VARIABLE',\n    'VIEW',\n    'WHERE',\n    'WITH',\n    'WITHIN',\n    'YEAR'\n  ]\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './clickhouse.functions.js';\nimport { keywords } from './clickhouse.keywords.js';\n\n// SELECT 作用域\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// 保留字，带作用域.\nconst reservedClauses = expandPhrases([\n  // queries\n  // 'WITH',\n  'FROM',\n  'WHERE',\n  'PREWHERE', // 条件优先于Where\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'SAMPLE BY',\n  'UNIQUE KEY',\n  'SETTINGS',\n  'LIMIT',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO [TABLE] [FUNCTION]',\n  // Data definition\n  'CREATE DATABASE',\n  'CREATE [OR REPLACE | LIVE | WINDOW] VIEW [IF NOT EXISTS]',\n  'REPLACE TABLE',\n  'CREATE [OR REPLACE] TABLE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] DICTIONARY [IF NOT EXISTS]',\n  'GRANT CREATE'\n]);\n\n// 单行，带作用域\nconst onelineClauses = expandPhrases([\n  // https://clickhouse.com/docs/en/sql-reference/statements/select/sample\n  'SAMPLE',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP {TABLE | DATABASE | DICTIONARY | USER | ROLE | [ROW] POLICY | VIEW | [SETTINGS] PROFILE | QUOTA} [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'RENAME',\n  // - truncate: only table is allowed. refrence https://clickhouse.com/docs/zh/sql-reference/statements/truncate\n  'TRUNCATE TABLE [IF EXISTS]',\n  // other\n  'ALTER',\n  'CREATE',\n  '{DESCRIBE | DESC}',\n  'DROP',\n  'PARTITIONED [BY]',\n  'TBLPROPERTIES'\n  //   'ENGINE',\n  // 'FORMAT'\n]);\n\nconst preserveClauses = expandPhrases([\n  // - update:\n  'SET',\n  'SET [DEFAULT] ROLE',\n  'SHOW',\n  'SHOW CREATE',\n  'WITH'\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]', 'EXCEPT', 'INTERSECT', 'INTO OUTFILE']);\n\n// 支持的Join场景，避免完整的JOIN被意外分隔的很远\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  '{LEFT | RIGHT} SEMI JOIN', // semi join\n  '{LEFT | RIGHT | INNER} ANTI JOIN', // antu join\n  '[LEFT] ARRAY JOIN', // array join\n  '[LEFT] ASOF JOIN' // asof join\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE} BETWEEN']);\n\n// https://clickhouse.com/docs/zh/sql-reference/syntax\nexport const clickhouse: DialectOptions = {\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses, ...preserveClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: ['\"\"-bs', \"''-bs\"],\n    identTypes: ['``'],\n    identChars: { allowFirstCharNumber: true },\n    variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n    operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||']\n  },\n  formatOptions: {\n    onelineClauses,\n    preserveClauses\n  }\n};\n","import { PrefixedQuoteType } from './TokenizerOptions.js';\n\n// Escapes regex special chars\nexport const escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n\nexport const WHITESPACE_REGEX = /\\s+/uy;\n\nexport const patternToRegex = (pattern: string): RegExp => new RegExp(`(?:${pattern})`, 'uy');\n\n// Converts \"ab\" to \"[Aa][Bb]\"\nexport const toCaseInsensitivePattern = (prefix: string): string =>\n  prefix\n    .split('')\n    .map(char => (/ /gu.test(char) ? '\\\\s+' : `[${char.toUpperCase()}${char.toLowerCase()}]`))\n    .join('');\n\nexport const withDashes = (pattern: string): string => pattern + '(?:-' + pattern + ')*';\n\nexport const withDot = (pattern: string): string => pattern + '(?:.' + pattern + ')*';\n\n// Converts [\"a\", \"b\"] to \"(?:[Aa]|[Bb]|)\" or \"(?:[Aa]|[Bb])\" when required = true\nexport const prefixesPattern = ({ prefixes, requirePrefix }: PrefixedQuoteType): string =>\n  `(?:${prefixes.map(toCaseInsensitivePattern).join('|')}${requirePrefix ? '' : '|'})`;\n","/**\n * @file 通用词法定义\n */\n\nimport { sortByLengthDesc } from '../utils.js';\n\nimport { IdentChars, QuoteType, VariableType } from './TokenizerOptions.js';\nimport { escapeRegExp, patternToRegex, prefixesPattern, withDashes, withDot } from './regexUtil.js';\n\n/**\n * Builds a RegExp for valid line comments in a SQL dialect\n * @param {string[]} lineCommentTypes - list of character strings that denote line comments\n */\nexport const lineComment = (lineCommentTypes: string[]) =>\n  new RegExp(`(?:${lineCommentTypes.map(escapeRegExp).join('|')}).*?(?=\\r\\n|\\r|\\n|$)`, 'uy');\n\n/**\n * Builds a RegExp for matching either open- or close-parenthesis patterns\n */\nexport const parenthesis = (kind: 'open' | 'close', extraParens: ('[]' | '{}')[] = []): RegExp => {\n  const index = kind === 'open' ? 0 : 1;\n  const parens = ['()', ...extraParens].map(pair => pair[index]);\n  return patternToRegex(parens.map(escapeRegExp).join('|'));\n};\n\n/**\n * Builds a RegExp containing all operators for a SQL dialect\n */\nexport const operator = (operators: string[]) =>\n  patternToRegex(`${sortByLengthDesc(operators).map(escapeRegExp).join('|')}`);\n\n// Negative lookahead to avoid matching a keyword that's actually part of identifier,\n// which can happen when identifier allows word-boundary characters inside it.\n//\n// For example \"SELECT$ME\" should be tokenized as:\n// - [\"SELECT$ME\"] when $ is allowed inside identifiers\n// - [\"SELECT\", \"$\", \"ME\"] when $ can't be part of identifiers.\nconst rejectIdentCharsPattern = ({ rest, dashes }: IdentChars): string =>\n  rest || dashes ? `(?![${rest || ''}${dashes ? '-' : ''}])` : '';\n\n/**\n * Builds a RegExp for all Reserved Keywords in a SQL dialect\n */\nexport const reservedWord = (reservedKeywords: string[], identChars: IdentChars = {}): RegExp => {\n  if (reservedKeywords.length === 0) {\n    return /^\\b$/u;\n  }\n\n  const avoidIdentChars = rejectIdentCharsPattern(identChars);\n\n  const reservedKeywordsPattern = sortByLengthDesc(reservedKeywords).map(escapeRegExp).join('|').replace(/ /gu, '\\\\s+');\n\n  return new RegExp(`(?:${reservedKeywordsPattern})${avoidIdentChars}\\\\b`, 'iuy');\n};\n\n/**\n * Builds a RegExp for parameter placeholder patterns\n * @param {string[]} paramTypes - list of strings that denote placeholder types\n * @param {string} pattern - string that denotes placeholder pattern\n */\nexport const parameter = (paramTypes: string[], pattern: string): RegExp | undefined => {\n  if (!paramTypes.length) {\n    return undefined;\n  }\n  const typesRegex = paramTypes.map(escapeRegExp).join('|');\n\n  return patternToRegex(`(?:${typesRegex})(?:${pattern})`);\n};\n\nconst buildQStringPatterns = () => {\n  const specialDelimiterMap = {\n    '<': '>',\n    '[': ']',\n    '(': ')',\n    '{': '}'\n  };\n\n  // base pattern for special delimiters, left must correspond with right\n  const singlePattern = \"{left}(?:(?!{right}').)*?{right}\";\n\n  // replace {left} and {right} with delimiters, collect as array\n  const patternList = Object.entries(specialDelimiterMap).map(([left, right]) =>\n    singlePattern.replace(/{left}/g, escapeRegExp(left)).replace(/{right}/g, escapeRegExp(right))\n  );\n\n  const specialDelimiters = escapeRegExp(Object.keys(specialDelimiterMap).join(''));\n  // standard pattern for common delimiters, ignores special delimiters\n  const standardDelimiterPattern = String.raw`(?<tag>[^\\s${specialDelimiters}])(?:(?!\\k<tag>').)*?\\k<tag>`;\n\n  // constructs final pattern by joining all cases\n  const qStringPattern = `[Qq]'(?:${standardDelimiterPattern}|${patternList.join('|')})'`;\n\n  return qStringPattern;\n};\n\n// Regex patterns for all supported quote styles.\n//\n// Most of them have a single escaping-style built in,\n// but \"\" and '' support multiple versions of escapes,\n// which must be selected with suffixes: -qq, -bs, -qq-bs, -raw\nexport const quotePatterns = {\n  // - backtick quoted (using `` to escape)\n  '``': '(?:`[^`]*`)+',\n  // - Transact-SQL square bracket quoted (using ]] to escape)\n  '[]': String.raw`(?:\\[[^\\]]*\\])(?:\\][^\\]]*\\])*`,\n  // double-quoted\n  '\"\"-qq': String.raw`(?:\"[^\"]*\")+`, // with repeated quote escapes\n  '\"\"-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")`, // with backslash escapes\n  '\"\"-qq-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")+`, // with repeated quote or backslash escapes\n  '\"\"-raw': String.raw`(?:\"[^\"]*\")`, // no escaping\n  // single-quoted\n  \"''-qq\": String.raw`(?:'[^']*')+`, // with repeated quote escapes\n  \"''-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')`, // with backslash escapes\n  \"''-qq-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')+`, // with repeated quote or backslash escapes\n  \"''-raw\": String.raw`(?:'[^']*')`, // no escaping\n  // PostgreSQL dollar-quoted\n  $$: String.raw`(?<tag>\\$\\w*\\$)[\\s\\S]*?\\k<tag>`,\n  // BigQuery '''triple-quoted''' (using \\' to escape)\n  \"'''..'''\": String.raw`'''[^\\\\]*?(?:\\\\.[^\\\\]*?)*?'''`,\n  // BigQuery \"\"\"triple-quoted\"\"\" (using \\\" to escape)\n  '\"\"\"..\"\"\"': String.raw`\"\"\"[^\\\\]*?(?:\\\\.[^\\\\]*?)*?\"\"\"`,\n  // Hive and Spark variables: ${name}\n  '{}': String.raw`(?:\\{[^\\}]*\\})`,\n  // Oracle q'' strings: q'<text>' q'|text|' ...\n  \"q''\": buildQStringPatterns()\n};\n\nconst singleQuotePattern = (quoteTypes: QuoteType): string => {\n  if (typeof quoteTypes === 'string') {\n    return quotePatterns[quoteTypes];\n  } else if ('regex' in quoteTypes) {\n    return quoteTypes.regex;\n  } else {\n    return prefixesPattern(quoteTypes) + quotePatterns[quoteTypes.quote];\n  }\n};\n\n/** Builds a RegExp for matching variables */\nexport const variable = (varTypes: VariableType[]): RegExp =>\n  patternToRegex(varTypes.map(varType => ('regex' in varType ? varType.regex : singleQuotePattern(varType))).join('|'));\n\n/** Builds a quote-delimited pattern for matching all given quote types */\nexport const stringPattern = (quoteTypes: QuoteType[]): string => quoteTypes.map(singleQuotePattern).join('|');\n\n/** Builds a RegExp for matching quote-delimited patterns */\nexport const string = (quoteTypes: QuoteType[]): RegExp => patternToRegex(stringPattern(quoteTypes));\n\n/**\n * Builds a RegExp for valid identifiers in a SQL dialect\n */\nexport const identifier = (specialChars: IdentChars = {}): RegExp => patternToRegex(identifierPattern(specialChars));\n\n/**\n * Builds a RegExp string for valid identifiers in a SQL dialect\n */\nexport const identifierPattern = ({ first, rest, dashes, allowFirstCharNumber }: IdentChars = {}): string => {\n  // Unicode letters, diacritical marks and underscore\n  const letter = '\\\\p{Alphabetic}\\\\p{Mark}_';\n  // Numbers 0..9, plus various unicode numbers\n  const number = '\\\\p{Decimal_Number}';\n\n  const firstChars = escapeRegExp(first ?? '');\n  const restChars = escapeRegExp(rest ?? '');\n\n  const pattern = allowFirstCharNumber\n    ? `[${letter}${number}${firstChars}][${letter}${number}${restChars}]*`\n    : `[${letter}${firstChars}][${letter}${number}${restChars}]*`;\n\n  return dashes ? withDashes(pattern) : pattern;\n};\n","/**\n * @file Determines line and column number of character index in source code.\n * @file 工具函数，基于偏移量获取当前行列信息\n * @author 天一\n */\n\nexport function lineColFromIndex(source: string, index: number): LineCol {\n  const lines = source.slice(0, index).split(/\\n/);\n  return { line: lines.length, col: lines[lines.length - 1].length + 1 };\n}\n\nexport interface LineCol {\n  line: number;\n  col: number;\n}\n","import { Token, TokenType } from './token.js';\nimport { lineColFromIndex } from './lineColFromIndex.js';\nimport { WHITESPACE_REGEX } from './regexUtil.js';\n\nexport interface RegExpLike {\n  lastIndex: number;\n  exec(input: string): string[] | null;\n}\n\nexport interface TokenRule {\n  type: TokenType;\n  // Normally a RegExp object.\n  // But to allow for more complex matching logic,\n  // an object can be given that implements a RegExpLike interface.\n  regex: RegExpLike;\n  // Called with the raw string that was matched\n  text?: (rawText: string) => string;\n  key?: (rawText: string) => string;\n}\n\nexport default class TokenizerEngine {\n  private input = ''; // The input SQL string to process\n  private index = 0; // Current position in string\n\n  constructor(private rules: TokenRule[]) {}\n\n  /**\n   * Takes a SQL string and breaks it into tokens.\n   * Each token is an object with type and value.\n   *\n   * @param {string} input - The SQL string\n   * @returns {Token[]} output token stream\n   */\n  public tokenize(input: string): Token[] {\n    this.input = input;\n    this.index = 0;\n    const tokens: Token[] = [];\n    let token: Token | undefined;\n\n    // Keep processing the string until end is reached\n    while (this.index < this.input.length) {\n      // skip any preceding whitespace\n      const precedingWhitespace = this.getWhitespace();\n\n      if (this.index < this.input.length) {\n        // Get the next token and the token type\n        token = this.getNextToken();\n        if (!token) {\n          throw this.createParseError();\n        }\n\n        tokens.push({ ...token, precedingWhitespace });\n      }\n    }\n    return tokens;\n  }\n\n  private createParseError(): Error {\n    const text = this.input.slice(this.index, this.index + 10);\n    const { line, col } = lineColFromIndex(this.input, this.index);\n    return new Error(`Parse error: Unexpected \"${text}\" at line ${line} column ${col}`);\n  }\n\n  private getWhitespace(): string | undefined {\n    WHITESPACE_REGEX.lastIndex = this.index;\n\n    const matches = WHITESPACE_REGEX.exec(this.input);\n    if (matches) {\n      // Advance current position by matched whitespace length\n      this.index += matches[0].length;\n      return matches[0];\n    }\n    return undefined;\n  }\n\n  private getNextToken(): Token | undefined {\n    for (const rule of this.rules) {\n      const token = this.match(rule);\n      if (token) {\n        return token;\n      }\n    }\n    return undefined;\n  }\n\n  // Attempts to match token rule regex at current position in input\n  private match(rule: TokenRule): Token | undefined {\n    rule.regex.lastIndex = this.index;\n    const matches = rule.regex.exec(this.input);\n    if (matches) {\n      const matchedText = matches[0];\n\n      const token: Token = {\n        type: rule.type,\n        raw: matchedText,\n        text: rule.text ? rule.text(matchedText) : matchedText,\n        start: this.index\n      };\n\n      if (rule.key) {\n        token.key = rule.key(matchedText);\n      }\n\n      // Advance current position by matched token length\n      this.index += matchedText.length;\n      return token;\n    }\n    return undefined;\n  }\n}\n","/**\n * @file 支持嵌套多行注释的场景，如 `\\/** aaa \\/** *\\/ *\\/`\n */\n/* eslint-disable no-cond-assign */\nimport { RegExpLike } from './TokenizerEngine.js';\n\nconst START = /\\/\\*/uy; // matches: /*\nconst MIDDLE = /([^/*]|\\*[^/]|\\/[^*])+/uy; // matches text NOT containing /* or */\nconst END = /\\*\\//uy; // matches: */\n\n/**\n * An object mimicking a regular expression,\n * for matching nested block-comments.\n */\nexport class NestedComment implements RegExpLike {\n  public lastIndex: number = 0;\n\n  public exec(input: string): string[] | null {\n    let result = '';\n    let match: string | null;\n    let nestLevel = 0;\n\n    if ((match = this.matchSection(START, input))) {\n      result += match;\n      nestLevel++;\n    } else {\n      return null;\n    }\n\n    while (nestLevel > 0) {\n      if ((match = this.matchSection(START, input))) {\n        result += match;\n        nestLevel++;\n      } else if ((match = this.matchSection(END, input))) {\n        result += match;\n        nestLevel--;\n      } else if ((match = this.matchSection(MIDDLE, input))) {\n        result += match;\n      } else {\n        return null;\n      }\n    }\n\n    return [result];\n  }\n\n  private matchSection(regex: RegExp, input: string): string | null {\n    regex.lastIndex = this.lastIndex;\n    const matches = regex.exec(input);\n    if (matches) {\n      this.lastIndex += matches[0].length;\n    }\n    return matches ? matches[0] : null;\n  }\n}\n","import { Token, TokenType } from './token.js';\nimport * as regex from './regexFactory.js';\nimport { ParamTypes, TokenizerOptions } from './TokenizerOptions.js';\nimport TokenizerEngine, { TokenRule } from './TokenizerEngine.js';\nimport { escapeRegExp, patternToRegex } from './regexUtil.js';\nimport { equalizeWhitespace, Optional } from '../utils.js';\nimport { NestedComment } from './NestedComment.js';\n\ntype OptionalTokenRule = Optional<TokenRule, 'regex'>;\n\nexport default class Tokenizer {\n  private rulesBeforeParams: TokenRule[];\n  private rulesAfterParams: TokenRule[];\n\n  constructor(private cfg: TokenizerOptions) {\n    this.rulesBeforeParams = this.buildRulesBeforeParams(cfg);\n    this.rulesAfterParams = this.buildRulesAfterParams(cfg);\n  }\n\n  public tokenize(input: string, paramTypesOverrides: ParamTypes): Token[] {\n    const rules = [\n      ...this.rulesBeforeParams,\n      ...this.buildParamRules(this.cfg, paramTypesOverrides),\n      ...this.rulesAfterParams\n    ];\n    const tokens = new TokenizerEngine(rules).tokenize(input);\n    return this.cfg.postProcess ? this.cfg.postProcess(tokens) : tokens;\n  }\n\n  // These rules can be cached as they only depend on\n  // the Tokenizer config options specified for each SQL dialect\n  private buildRulesBeforeParams(cfg: TokenizerOptions): TokenRule[] {\n    return this.validRules([\n      {\n        type: TokenType.BLOCK_COMMENT, // 默认不支持嵌套块级注释\n        regex: cfg.nestedBlockComments ? new NestedComment() : /(\\/\\*[^]*?\\*\\/)/uy\n      },\n      {\n        type: TokenType.LINE_COMMENT,\n        regex: regex.lineComment(cfg.lineCommentTypes ?? ['--'])\n      },\n      {\n        type: TokenType.QUOTED_IDENTIFIER,\n        regex: regex.string(cfg.identTypes)\n      },\n      {\n        type: TokenType.NUMBER,\n        regex: /(?:0x[0-9a-fA-F]+|0b[01]+|(?:-\\s*)?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+(?:\\.[0-9]+)?)?)(?!\\w)/uy\n      },\n      // RESERVED_PHRASE is matched before all other keyword tokens\n      // to e.g. prioritize matching \"TIMESTAMP WITH TIME ZONE\" phrase over \"WITH\" clause.\n      {\n        type: TokenType.RESERVED_PHRASE,\n        regex: regex.reservedWord(cfg.reservedPhrases ?? [], cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.CASE,\n        regex: /CASE\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.END,\n        regex: /END\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.BETWEEN,\n        regex: /BETWEEN\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.LIMIT,\n        regex: cfg.reservedClauses.includes('LIMIT') ? /LIMIT\\b/iuy : undefined,\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_CLAUSE,\n        regex: regex.reservedWord(cfg.reservedClauses, cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_SELECT,\n        regex: regex.reservedWord(cfg.reservedSelect, cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_SET_OPERATION,\n        regex: regex.reservedWord(cfg.reservedSetOperations, cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.WHEN,\n        regex: /WHEN\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.ELSE,\n        regex: /ELSE\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.THEN,\n        regex: /THEN\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_JOIN,\n        regex: regex.reservedWord(cfg.reservedJoins, cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.AND,\n        regex: /AND\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.ON,\n        regex: /ON\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.OR,\n        regex: /OR\\b/iuy,\n        text: toCanonical\n      },\n      {\n        type: TokenType.XOR,\n        regex: cfg.supportsXor ? /XOR\\b/iuy : undefined,\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_FUNCTION_NAME,\n        regex: regex.reservedWord(cfg.reservedFunctionNames, cfg.identChars),\n        text: toCanonical\n      },\n      {\n        type: TokenType.RESERVED_KEYWORD,\n        regex: regex.reservedWord(cfg.reservedKeywords, cfg.identChars),\n        text: toCanonical\n      }\n    ]);\n  }\n\n  // These rules can also be cached as they only depend on\n  // the Tokenizer config options specified for each SQL dialect\n  private buildRulesAfterParams(cfg: TokenizerOptions): TokenRule[] {\n    return this.validRules([\n      {\n        type: TokenType.VARIABLE,\n        regex: cfg.variableTypes ? regex.variable(cfg.variableTypes) : undefined\n      },\n      { type: TokenType.STRING, regex: regex.string(cfg.stringTypes) },\n      {\n        type: TokenType.IDENTIFIER,\n        regex: regex.identifier(cfg.identChars)\n      },\n      { type: TokenType.DELIMITER, regex: /[;]/uy },\n      { type: TokenType.COMMA, regex: /[,]/y },\n      {\n        type: TokenType.OPEN_PAREN,\n        regex: regex.parenthesis('open', cfg.extraParens)\n      },\n      {\n        type: TokenType.CLOSE_PAREN,\n        regex: regex.parenthesis('close', cfg.extraParens)\n      },\n      {\n        type: TokenType.OPERATOR,\n        regex: regex.operator([\n          // standard operators\n          '+',\n          '-',\n          '/',\n          '>',\n          '<',\n          '=',\n          '<>',\n          '<=',\n          '>=',\n          '!=',\n          ':', // 三元运算符\n          ...(cfg.operators ?? [])\n        ])\n      },\n      { type: TokenType.ASTERISK, regex: /[*]/uy },\n      { type: TokenType.DOT, regex: /[.]/uy }\n    ]);\n  }\n\n  // These rules can't be blindly cached as the paramTypesOverrides object\n  // can differ on each invocation of the format() function.\n  private buildParamRules(cfg: TokenizerOptions, paramTypesOverrides: ParamTypes): TokenRule[] {\n    // Each dialect has its own default parameter types (if any),\n    // but these can be overriden by the user of the library.\n    const paramTypes = {\n      named: paramTypesOverrides?.named || cfg.paramTypes?.named || [],\n      quoted: paramTypesOverrides?.quoted || cfg.paramTypes?.quoted || [],\n      numbered: paramTypesOverrides?.numbered || cfg.paramTypes?.numbered || [],\n      positional:\n        typeof paramTypesOverrides?.positional === 'boolean'\n          ? paramTypesOverrides.positional\n          : cfg.paramTypes?.positional,\n      custom: paramTypesOverrides?.custom || cfg.paramTypes?.custom || []\n    };\n\n    return this.validRules([\n      {\n        type: TokenType.NAMED_PARAMETER,\n        regex: regex.parameter(paramTypes.named, regex.identifierPattern(cfg.paramChars || cfg.identChars)),\n        key: v => v.slice(1)\n      },\n      {\n        type: TokenType.QUOTED_PARAMETER,\n        regex: regex.parameter(paramTypes.quoted, regex.stringPattern(cfg.identTypes)),\n        key: v =>\n          (({ tokenKey, quoteChar }) => tokenKey.replace(new RegExp(escapeRegExp('\\\\' + quoteChar), 'gu'), quoteChar))({\n            tokenKey: v.slice(2, -1),\n            quoteChar: v.slice(-1)\n          })\n      },\n      {\n        type: TokenType.NUMBERED_PARAMETER,\n        regex: regex.parameter(paramTypes.numbered, '[0-9]+'),\n        key: v => v.slice(1)\n      },\n      {\n        type: TokenType.POSITIONAL_PARAMETER,\n        regex: paramTypes.positional ? /[?]/y : undefined\n      },\n      ...paramTypes.custom.map(\n        (customParam): TokenRule => ({\n          type: TokenType.CUSTOM_PARAMETER,\n          regex: patternToRegex(customParam.regex),\n          key: customParam.key ?? (v => v)\n        })\n      )\n    ]);\n  }\n\n  // filters out rules for token types whose regex is undefined\n  private validRules(rules: OptionalTokenRule[]): TokenRule[] {\n    return rules.filter((rule): rule is TokenRule => Boolean(rule.regex));\n  }\n}\n\n/**\n * Converts keywords (and keyword sequences) to canonical form:\n * - in uppercase\n * - single spaces between words\n */\nconst toCanonical = (v: string) => equalizeWhitespace(v.toUpperCase());\n","/**\n * @file 词典\n * @author 天一\n */\nimport { DialectFormatOptions, ProcessedDialectFormatOptions } from './formatter/ExpressionFormatter.js';\nimport Tokenizer from './lexer/Tokenizer.js';\nimport { TokenizerOptions } from './lexer/TokenizerOptions.js';\n\nexport interface DialectOptions {\n  tokenizerOptions: TokenizerOptions;\n  formatOptions: DialectFormatOptions;\n}\nexport interface Dialect {\n  tokenizer: Tokenizer;\n  formatOptions: ProcessedDialectFormatOptions;\n}\n\nconst cache = new Map<DialectOptions, Dialect>();\n\n/**\n * Factory function for building Dialect objects.\n * When called repeatedly with same options object returns the cached Dialect,\n * to avoid the cost of creating it again.\n *\n * 词法定义初始化，缓存优先\n */\nexport const createDialect = (options: DialectOptions): Dialect => {\n  let dialect = cache.get(options);\n  if (!dialect) {\n    dialect = dialectFromOptions(options);\n    cache.set(options, dialect);\n  }\n  return dialect;\n};\n\nconst dialectFromOptions = (dialectOptions: DialectOptions): Dialect => ({\n  tokenizer: new Tokenizer(dialectOptions.tokenizerOptions), // 创建词法定义\n  formatOptions: processDialectFormatOptions(dialectOptions.formatOptions) // 配置项\n});\n\n/**\n * transfer options， for better refrence performance\n *\n * 配置项格式转换，给一个默认值\n */\nconst processDialectFormatOptions = (options: DialectFormatOptions): ProcessedDialectFormatOptions => ({\n  alwaysDenseOperators: options.alwaysDenseOperators || [],\n  onelineClauses: Object.fromEntries(options.onelineClauses.map(name => [name, true])),\n  preserveClauses: Object.fromEntries((options.preserveClauses ?? []).map(name => [name, true]))\n});\n","import { FormatOptions } from '../FormatOptions.js';\n\n// Utility functions for config options\n\n/**\n * Creates a string to use for one step of indentation.\n */\nexport function indentString(cfg: FormatOptions): string {\n  if (cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight') {\n    return ' '.repeat(8);\n  }\n  if (cfg.useTabs) {\n    return '\\t';\n  }\n  return ' '.repeat(cfg.tabWidth);\n}\n\n/**\n * True when indentStyle is one of the tabular ones.\n */\nexport function isTabularStyle(cfg: FormatOptions): boolean {\n  return cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight';\n}\n","export type ParamItems = { [k: string]: string };\n\n/**\n * Handles placeholder replacement with given params.\n */\nexport default class Params {\n  private params: ParamItems | string[] | undefined;\n  private index: number;\n\n  constructor(params: ParamItems | string[] | undefined) {\n    this.params = params;\n    this.index = 0;\n  }\n\n  /**\n   * Returns param value that matches given placeholder with param key.\n   */\n  public get({ key, text }: { key?: string; text: string }): string {\n    if (!this.params) {\n      return text;\n    }\n\n    if (key) {\n      return (this.params as ParamItems)[key];\n    }\n    return (this.params as string[])[this.index++];\n  }\n\n  /**\n   * Returns index of current positional parameter.\n   */\n  public getPositionalParameterIndex(): number {\n    return this.index;\n  }\n\n  /**\n   * Sets index of current positional parameter.\n   */\n  public setPositionalParameterIndex(i: number) {\n    this.index = i;\n  }\n}\n","/**\n * @file 工具函数，处理词法解析混淆的问题\n */\nimport { isReserved, Token, TokenType } from './token.js';\n\n/**\n * Ensures that no keyword token (RESERVED_*) is preceded by dot (.).\n *\n * Ensures that all RESERVED_FUNCTION_NAME tokens are followed by \"(\".\n * If they're not, converts the token to RESERVED_KEYWORD.\n *\n * When IDENTIFIER and RESERVED_KEYWORD token is followed by \"[\"\n * converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.\n *\n * This is needed to avoid ambiguity in parser which expects function names\n * to always be followed by open-paren, and to distinguish between\n * array accessor `foo[1]` and array literal `[1, 2, 3]`.\n */\nexport function disambiguateTokens(tokens: Token[]): Token[] {\n  return tokens\n    .map(dotKeywordToIdent)\n    .map(funcNameToKeyword)\n    .map(identToArrayIdent)\n    .map(keywordToArrayKeyword)\n    .map(identToFunctionName);\n}\n\nconst dotKeywordToIdent = (token: Token, i: number, tokens: Token[]): Token => {\n  if (isReserved(token.type)) {\n    const prevToken = prevNonCommentToken(tokens, i);\n    const nextToken = nextNonCommentToken(tokens, i);\n    if ((prevToken && prevToken.text === '.') || (nextToken && nextToken.text === '.')) {\n      return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n    }\n  }\n  return token;\n};\n\nconst funcNameToKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.RESERVED_FUNCTION_NAME) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (!nextToken || !isOpenParen(nextToken)) {\n      return { ...token, type: TokenType.RESERVED_KEYWORD };\n    }\n  }\n  return token;\n};\n\nconst identToArrayIdent = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.IDENTIFIER) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (nextToken && isOpenBracket(nextToken)) {\n      return { ...token, type: TokenType.ARRAY_IDENTIFIER };\n    }\n  }\n  return token;\n};\n\nconst keywordToArrayKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.RESERVED_KEYWORD) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (nextToken && isOpenBracket(nextToken)) {\n      return { ...token, type: TokenType.ARRAY_KEYWORD };\n    }\n  }\n  return token;\n};\n\nconst identToFunctionName = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.IDENTIFIER) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    const prevToken = prevNonCommentToken(tokens, i);\n    if (nextToken && isOpenParen(nextToken) && prevToken?.text !== '.') {\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n  }\n  return token;\n};\n\nconst prevNonCommentToken = (tokens: Token[], index: number): Token | undefined =>\n  nextNonCommentToken(tokens, index, -1);\n\nconst nextNonCommentToken = (tokens: Token[], index: number, dir: -1 | 1 = 1): Token | undefined => {\n  let i = 1;\n  while (tokens[index + i * dir] && isComment(tokens[index + i * dir])) {\n    i++;\n  }\n  return tokens[index + i * dir];\n};\n\nconst isOpenParen = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '(';\n\nconst isOpenBracket = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '[';\n\nconst isComment = (t: Token): boolean => t.type === TokenType.BLOCK_COMMENT || t.type === TokenType.LINE_COMMENT;\n","import { lineColFromIndex } from '../lexer/lineColFromIndex.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// Nearly type definitions say that Token must have a value field,\n// which however is wrong.  Instead Nearley expects a text field.\ntype NearleyToken = Token & { value: string };\n\nexport default class LexerAdapter {\n  private index = 0;\n  private tokens: Token[] = [];\n  private input = '';\n\n  constructor(private tokenize: (chunk: string) => Token[]) {}\n\n  reset(chunk: string, _info: any) {\n    this.input = chunk;\n    this.index = 0;\n    this.tokens = this.tokenize(chunk);\n  }\n\n  next(): NearleyToken | undefined {\n    return this.tokens[this.index++] as NearleyToken | undefined;\n  }\n\n  save(): any {}\n\n  formatError(token: NearleyToken) {\n    const { line, col } = lineColFromIndex(this.input, token.start);\n    return `Parse error at token: ${token.text} at line ${line} column ${col}`;\n  }\n\n  has(name: string): boolean {\n    return name in TokenType;\n  }\n}\n","import { TokenType } from '../lexer/token.js';\n\nexport enum NodeType {\n  statement = 'statement',\n  clause = 'clause',\n  set_operation = 'set_operation',\n  function_call = 'function_call',\n  array_subscript = 'array_subscript',\n  property_access = 'property_access',\n  parenthesis = 'parenthesis',\n  between_predicate = 'between_predicate',\n  case_expression = 'case_expression',\n  case_when = 'case_when',\n  case_else = 'case_else',\n  limit_clause = 'limit_clause',\n  all_columns_asterisk = 'all_columns_asterisk',\n  literal = 'literal',\n  identifier = 'identifier',\n  keyword = 'keyword',\n  parameter = 'parameter',\n  operator = 'operator',\n  comma = 'comma',\n  line_comment = 'line_comment',\n  block_comment = 'block_comment'\n}\n\ninterface BaseNode {\n  leadingComments?: CommentNode[];\n  trailingComments?: CommentNode[];\n}\n\nexport interface StatementNode extends BaseNode {\n  type: NodeType.statement;\n  children: AstNode[];\n  hasSemicolon: boolean;\n}\n\nexport interface ClauseNode extends BaseNode {\n  type: NodeType.clause;\n  nameKw: KeywordNode;\n  children: AstNode[];\n}\n\nexport interface SetOperationNode extends BaseNode {\n  type: NodeType.set_operation;\n  nameKw: KeywordNode;\n  children: AstNode[];\n}\n\nexport interface FunctionCallNode extends BaseNode {\n  type: NodeType.function_call;\n  nameKw: KeywordNode;\n  parenthesis: ParenthesisNode;\n}\n\n// <ident>[<expr>]\nexport interface ArraySubscriptNode extends BaseNode {\n  type: NodeType.array_subscript;\n  array: IdentifierNode | KeywordNode;\n  parenthesis: ParenthesisNode;\n}\n\nexport interface ParenthesisNode extends BaseNode {\n  type: NodeType.parenthesis;\n  children: AstNode[];\n  openParen: string;\n  closeParen: string;\n}\n\n// BETWEEN <expr1> AND <expr2>\nexport interface BetweenPredicateNode extends BaseNode {\n  type: NodeType.between_predicate;\n  betweenKw: KeywordNode;\n  expr1: AstNode[];\n  andKw: KeywordNode;\n  expr2: AstNode[];\n}\n\nexport interface CaseExpressionNode extends BaseNode {\n  type: NodeType.case_expression;\n  caseKw: KeywordNode;\n  endKw: KeywordNode;\n  expr: AstNode[];\n  clauses: (CaseWhenNode | CaseElseNode)[];\n}\n\nexport interface CaseWhenNode extends BaseNode {\n  type: NodeType.case_when;\n  whenKw: KeywordNode;\n  thenKw: KeywordNode;\n  condition: AstNode[];\n  result: AstNode[];\n}\n\nexport interface CaseElseNode extends BaseNode {\n  type: NodeType.case_else;\n  elseKw: KeywordNode;\n  result: AstNode[];\n}\n\n// LIMIT <count>\n// LIMIT <offset>, <count>\nexport interface LimitClauseNode extends BaseNode {\n  type: NodeType.limit_clause;\n  limitKw: KeywordNode;\n  count: AstNode[];\n  offset?: AstNode[];\n}\n\n// The \"*\" operator used in SELECT *\nexport interface AllColumnsAsteriskNode extends BaseNode {\n  type: NodeType.all_columns_asterisk;\n}\n\nexport interface LiteralNode extends BaseNode {\n  type: NodeType.literal;\n  text: string;\n}\n\nexport interface PropertyAccessNode extends BaseNode {\n  type: NodeType.property_access;\n  object: AstNode;\n  property: IdentifierNode | ArraySubscriptNode | AllColumnsAsteriskNode;\n}\n\nexport interface IdentifierNode extends BaseNode {\n  type: NodeType.identifier;\n  text: string;\n}\n\nexport interface KeywordNode extends BaseNode {\n  type: NodeType.keyword;\n  tokenType: TokenType;\n  text: string;\n  raw: string;\n}\n\nexport interface ParameterNode extends BaseNode {\n  type: NodeType.parameter;\n  key?: string;\n  text: string;\n}\n\nexport interface OperatorNode extends BaseNode {\n  type: NodeType.operator;\n  text: string;\n}\n\nexport interface CommaNode extends BaseNode {\n  type: NodeType.comma;\n}\n\nexport interface LineCommentNode extends BaseNode {\n  type: NodeType.line_comment;\n  text: string;\n  precedingWhitespace: string;\n}\n\nexport interface BlockCommentNode extends BaseNode {\n  type: NodeType.block_comment;\n  text: string;\n  precedingWhitespace: string;\n}\n\nexport type CommentNode = LineCommentNode | BlockCommentNode;\n\nexport type AstNode =\n  | ClauseNode\n  | SetOperationNode\n  | FunctionCallNode\n  | ArraySubscriptNode\n  | PropertyAccessNode\n  | ParenthesisNode\n  | BetweenPredicateNode\n  | CaseExpressionNode\n  | CaseWhenNode\n  | CaseElseNode\n  | LimitClauseNode\n  | AllColumnsAsteriskNode\n  | LiteralNode\n  | IdentifierNode\n  | KeywordNode\n  | ParameterNode\n  | OperatorNode\n  | CommaNode\n  | LineCommentNode\n  | BlockCommentNode;\n","// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n// Bypasses TS6133. Allow declared but unused functions.\n// @ts-ignore\nfunction id(d: any[]): any { return d[0]; }\ndeclare var DELIMITER: any;\ndeclare var EOF: any;\ndeclare var LIMIT: any;\ndeclare var COMMA: any;\ndeclare var RESERVED_SELECT: any;\ndeclare var ASTERISK: any;\ndeclare var RESERVED_CLAUSE: any;\ndeclare var RESERVED_SET_OPERATION: any;\ndeclare var ARRAY_IDENTIFIER: any;\ndeclare var ARRAY_KEYWORD: any;\ndeclare var RESERVED_FUNCTION_NAME: any;\ndeclare var DOT: any;\ndeclare var BETWEEN: any;\ndeclare var AND: any;\ndeclare var CASE: any;\ndeclare var END: any;\ndeclare var WHEN: any;\ndeclare var THEN: any;\ndeclare var ELSE: any;\ndeclare var OPERATOR: any;\ndeclare var IDENTIFIER: any;\ndeclare var QUOTED_IDENTIFIER: any;\ndeclare var VARIABLE: any;\ndeclare var NAMED_PARAMETER: any;\ndeclare var QUOTED_PARAMETER: any;\ndeclare var NUMBERED_PARAMETER: any;\ndeclare var POSITIONAL_PARAMETER: any;\ndeclare var CUSTOM_PARAMETER: any;\ndeclare var NUMBER: any;\ndeclare var STRING: any;\ndeclare var RESERVED_KEYWORD: any;\ndeclare var RESERVED_PHRASE: any;\ndeclare var RESERVED_JOIN: any;\ndeclare var OR: any;\ndeclare var ON: any;\ndeclare var XOR: any;\ndeclare var LINE_COMMENT: any;\ndeclare var BLOCK_COMMENT: any;\n\nimport LexerAdapter from './LexerAdapter.js';\nimport { NodeType, AstNode, CommentNode, KeywordNode } from './ast.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// The lexer here is only to provide the has() method,\n// that's used inside the generated grammar definition.\n// A proper lexer gets passed to Nearley Parser constructor.\nconst lexer = new LexerAdapter(chunk => []);\n\n// Used for unwrapping grammar rules like:\n//\n//   rule -> ( foo | bar | baz )\n//\n// which otherwise produce single element nested inside two arrays\nconst unwrap = <T>([[el]]: T[][]): T => el;\n\nconst toKeywordNode = (token: Token): KeywordNode => ({\n  type: NodeType.keyword,\n  tokenType: token.type,\n  text: token.text,\n  raw: token.raw,\n});\n\ninterface CommentAttachments {\n  leading?: CommentNode[];\n  trailing?: CommentNode[];\n}\n\nconst addComments = (node: AstNode, { leading, trailing }: CommentAttachments): AstNode => {\n  if (leading?.length) {\n    node = { ...node, leadingComments: leading };\n  }\n  if (trailing?.length) {\n    node = { ...node, trailingComments: trailing };\n  }\n  return node;\n};\n\nconst addCommentsToArray = (nodes: AstNode[], { leading, trailing }: CommentAttachments): AstNode[] => {\n  if (leading?.length) {\n    const [first, ...rest] = nodes;\n    nodes = [addComments(first, { leading }), ...rest];\n  }\n  if (trailing?.length) {\n    const lead = nodes.slice(0, -1);\n    const last = nodes[nodes.length-1];\n    nodes = [...lead, addComments(last, { trailing })];\n  }\n  return nodes;\n};\n\n\ninterface NearleyToken {\n  value: any;\n  [key: string]: any;\n};\n\ninterface NearleyLexer {\n  reset: (chunk: string, info: any) => void;\n  next: () => NearleyToken | undefined;\n  save: () => any;\n  formatError: (token: never) => string;\n  has: (tokenType: string) => boolean;\n};\n\ninterface NearleyRule {\n  name: string;\n  symbols: NearleySymbol[];\n  postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n};\n\ntype NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n\ninterface Grammar {\n  Lexer: NearleyLexer | undefined;\n  ParserRules: NearleyRule[];\n  ParserStart: string;\n};\n\nconst grammar: Grammar = {\n  Lexer: lexer,\n  ParserRules: [\n    {\"name\": \"main$ebnf$1\", \"symbols\": []},\n    {\"name\": \"main$ebnf$1\", \"symbols\": [\"main$ebnf$1\", \"statement\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"main\", \"symbols\": [\"main$ebnf$1\"], \"postprocess\": \n        ([statements]) => {\n          const last = statements[statements.length - 1];\n          if (last && !last.hasSemicolon) {\n            // we have fully parsed the whole file\n            // discard the last statement when it's empty\n            return last.children.length > 0 ? statements : statements.slice(0, -1);\n          } else {\n            // parsing still in progress, do nothing\n            return statements;\n          }\n        }\n        },\n    {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"DELIMITER\") ? {type: \"DELIMITER\"} : DELIMITER)]},\n    {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"EOF\") ? {type: \"EOF\"} : EOF)]},\n    {\"name\": \"statement\", \"symbols\": [\"expressions_or_clauses\", \"statement$subexpression$1\"], \"postprocess\": \n        ([children, [delimiter]]) => ({\n          type: NodeType.statement,\n          children,\n          hasSemicolon: delimiter.type === TokenType.DELIMITER,\n          end: delimiter.start,\n          start: children[0]?.start,\n        })\n        },\n    {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": []},\n    {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": []},\n    {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": [\"expressions_or_clauses$ebnf$2\", \"clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expressions_or_clauses\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"expressions_or_clauses$ebnf$2\"], \"postprocess\": \n        ([expressions, clauses]) => [...expressions, ...clauses]\n        },\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"limit_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"select_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"other_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"set_operation\"]},\n    {\"name\": \"clause\", \"symbols\": [\"clause$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"free_form_sql\"]},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA), \"limit_clause$ebnf$1$subexpression$1$ebnf$1\"]},\n    {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1\"], \"postprocess\": id},\n    {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n    {\"name\": \"limit_clause\", \"symbols\": [(lexer.has(\"LIMIT\") ? {type: \"LIMIT\"} : LIMIT), \"_\", \"expression_chain_\", \"limit_clause$ebnf$1\"], \"postprocess\": \n        ([limitToken, _, exp1, optional]) => {\n          if (optional) {\n            const [comma, exp2] = optional;\n            return {\n              type: NodeType.limit_clause,\n              limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n              offset: exp1,\n              count: exp2,\n            };\n          } else {\n            return {\n              type: NodeType.limit_clause,\n              limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n              count: exp1,\n            };\n          }\n        }\n        },\n    {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": []},\n    {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": [\"select_clause$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"all_columns_asterisk\", \"select_clause$subexpression$1$ebnf$1\"]},\n    {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": []},\n    {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": [\"select_clause$subexpression$1$ebnf$2\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\", \"select_clause$subexpression$1$ebnf$2\"]},\n    {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT), \"select_clause$subexpression$1\"], \"postprocess\": \n        ([nameToken, [exp, expressions]]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children: [exp, ...expressions],\n          start: nameToken.start,\n        })\n        },\n    {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT)], \"postprocess\": \n        ([nameToken]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children: [],\n          start: nameToken.start,\n        })\n        },\n    {\"name\": \"all_columns_asterisk\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)], \"postprocess\": \n        () => ({ type: NodeType.all_columns_asterisk })\n        },\n    {\"name\": \"other_clause$ebnf$1\", \"symbols\": []},\n    {\"name\": \"other_clause$ebnf$1\", \"symbols\": [\"other_clause$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"other_clause\", \"symbols\": [(lexer.has(\"RESERVED_CLAUSE\") ? {type: \"RESERVED_CLAUSE\"} : RESERVED_CLAUSE), \"other_clause$ebnf$1\"], \"postprocess\": \n        ([nameToken, children]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children,\n          start: nameToken.start,\n        })\n        },\n    {\"name\": \"set_operation$ebnf$1\", \"symbols\": []},\n    {\"name\": \"set_operation$ebnf$1\", \"symbols\": [\"set_operation$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"set_operation\", \"symbols\": [(lexer.has(\"RESERVED_SET_OPERATION\") ? {type: \"RESERVED_SET_OPERATION\"} : RESERVED_SET_OPERATION), \"set_operation$ebnf$1\"], \"postprocess\": \n        ([nameToken, children]) => ({\n          type: NodeType.set_operation,\n          nameKw: toKeywordNode(nameToken),\n          children,\n        })\n        },\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1$subexpression$1\", \"symbols\": [\"expression_with_comments_\"]},\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1$subexpression$1\", \"symbols\": [\"between_predicate\"]},\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1\", \"symbols\": [\"between_predicate_expression_chain_$ebnf$1$subexpression$1\"]},\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1$subexpression$2\", \"symbols\": [\"expression_with_comments_\"]},\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1$subexpression$2\", \"symbols\": [\"between_predicate\"]},\n    {\"name\": \"between_predicate_expression_chain_$ebnf$1\", \"symbols\": [\"between_predicate_expression_chain_$ebnf$1\", \"between_predicate_expression_chain_$ebnf$1$subexpression$2\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"between_predicate_expression_chain_\", \"symbols\": [\"between_predicate_expression_chain_$ebnf$1\"], \"postprocess\": ([chain]) => chain.map((item: any[]) => item[0])},\n    {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_with_comments_\"]},\n    {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_chain_$ebnf$1\", \"expression_with_comments_\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expression_chain_\", \"symbols\": [\"expression_chain_$ebnf$1\"], \"postprocess\": id},\n    {\"name\": \"expression_chain$ebnf$1\", \"symbols\": []},\n    {\"name\": \"expression_chain$ebnf$1\", \"symbols\": [\"expression_chain$ebnf$1\", \"_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expression_chain\", \"symbols\": [\"expression\", \"expression_chain$ebnf$1\"], \"postprocess\": \n        ([expr, chain]) => [expr, ...chain]\n        },\n    {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": []},\n    {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": [\"andless_expression_chain$ebnf$1\", \"_andless_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"andless_expression_chain\", \"symbols\": [\"andless_expression\", \"andless_expression_chain$ebnf$1\"], \"postprocess\": \n        ([expr, chain]) => [expr, ...chain]\n        },\n    {\"name\": \"expression_with_comments_\", \"symbols\": [\"expression\", \"_\"], \"postprocess\": \n        ([expr, _]) => addComments(expr, { trailing: _ })\n        },\n    {\"name\": \"_expression_with_comments\", \"symbols\": [\"_\", \"expression\"], \"postprocess\": \n        ([_, expr]) => addComments(expr, { leading: _ })\n        },\n    {\"name\": \"_andless_expression_with_comments\", \"symbols\": [\"_\", \"andless_expression\"], \"postprocess\": \n        ([_, expr]) => addComments(expr, { leading: _ })\n        },\n    {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\"]},\n    {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asterisk\"]},\n    {\"name\": \"free_form_sql\", \"symbols\": [\"free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"between_predicate\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comma\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comment\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"other_keyword\"]},\n    {\"name\": \"asteriskless_free_form_sql\", \"symbols\": [\"asteriskless_free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"expression$subexpression$1\", \"symbols\": [\"andless_expression\"]},\n    {\"name\": \"expression$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n    {\"name\": \"expression\", \"symbols\": [\"expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n    {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asterisk\"]},\n    {\"name\": \"andless_expression\", \"symbols\": [\"andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"case_expression\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"function_call\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"property_access\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"parenthesis\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"curly_braces\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"square_brackets\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"operator\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"identifier\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"parameter\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"literal\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"keyword\"]},\n    {\"name\": \"asteriskless_andless_expression\", \"symbols\": [\"asteriskless_andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_IDENTIFIER\") ? {type: \"ARRAY_IDENTIFIER\"} : ARRAY_IDENTIFIER), \"_\", \"square_brackets\"], \"postprocess\": \n        ([arrayToken, _, brackets]) => ({\n          type: NodeType.array_subscript,\n          array: addComments({ type: NodeType.identifier, text: arrayToken.text}, { trailing: _ }),\n          parenthesis: brackets,\n        })\n        },\n    {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_KEYWORD\") ? {type: \"ARRAY_KEYWORD\"} : ARRAY_KEYWORD), \"_\", \"square_brackets\"], \"postprocess\": \n        ([arrayToken, _, brackets]) => ({\n          type: NodeType.array_subscript,\n          array: addComments(toKeywordNode(arrayToken), { trailing: _ }),\n          parenthesis: brackets,\n        })\n        },\n    {\"name\": \"function_call\", \"symbols\": [(lexer.has(\"RESERVED_FUNCTION_NAME\") ? {type: \"RESERVED_FUNCTION_NAME\"} : RESERVED_FUNCTION_NAME), \"_\", \"parenthesis\"], \"postprocess\": \n        ([nameToken, _, parens]) => ({\n          type: NodeType.function_call,\n          nameKw: addComments(toKeywordNode(nameToken), { trailing: _ }),\n          parenthesis: parens,\n        })\n        },\n    {\"name\": \"parenthesis\", \"symbols\": [{\"literal\":\"(\"}, \"expressions_or_clauses\", {\"literal\":\")\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"(\",\n          closeParen: \")\",\n          start: open.start, // 记录表达式的起止，用于获取子查询的起止范围\n          end: close.start,\n        })\n        },\n    {\"name\": \"curly_braces$ebnf$1\", \"symbols\": []},\n    {\"name\": \"curly_braces$ebnf$1\", \"symbols\": [\"curly_braces$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"curly_braces\", \"symbols\": [{\"literal\":\"{\"}, \"curly_braces$ebnf$1\", {\"literal\":\"}\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"{\",\n          closeParen: \"}\",\n        })\n        },\n    {\"name\": \"square_brackets$ebnf$1\", \"symbols\": []},\n    {\"name\": \"square_brackets$ebnf$1\", \"symbols\": [\"square_brackets$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"square_brackets\", \"symbols\": [{\"literal\":\"[\"}, \"square_brackets$ebnf$1\", {\"literal\":\"]\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"[\",\n          closeParen: \"]\",\n        })\n        },\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"identifier\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"all_columns_asterisk\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"literal\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"parameter\"]},\n    {\"name\": \"property_access\", \"symbols\": [\"expression\", \"_\", (lexer.has(\"DOT\") ? {type: \"DOT\"} : DOT), \"_\", \"property_access$subexpression$1\"], \"postprocess\": \n        // Allowing property to be <array_subscript> is currently a hack.\n        // A better way would be to allow <property_access> on the left side of array_subscript,\n        // but we currently can't do that because of another hack that requires\n        // %ARRAY_IDENTIFIER on the left side of <array_subscript>.\n        ([object, _1, dot, _2, [property]]) => {\n          return {\n            type: NodeType.property_access,\n            object: addComments(object, { trailing: _1 }),\n            property: addComments(property, { leading: _2 }),\n          };\n        }\n        },\n    {\"name\": \"between_predicate\", \"symbols\": [(lexer.has(\"BETWEEN\") ? {type: \"BETWEEN\"} : BETWEEN), \"_\", \"andless_expression_chain\", \"_\", (lexer.has(\"AND\") ? {type: \"AND\"} : AND), \"_\", \"andless_expression\"], \"postprocess\": \n        ([betweenToken, _1, expr1, _2, andToken, _3, expr2]) => ({\n          type: NodeType.between_predicate,\n          betweenKw: toKeywordNode(betweenToken),\n          expr1: addCommentsToArray(expr1, { leading: _1, trailing: _2 }),\n          andKw: toKeywordNode(andToken),\n          expr2: [addComments(expr2, { leading: _3 })],\n        })\n        },\n    {\"name\": \"case_expression$ebnf$1\", \"symbols\": [\"expression_chain_\"], \"postprocess\": id},\n    {\"name\": \"case_expression$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n    {\"name\": \"case_expression$ebnf$2\", \"symbols\": []},\n    {\"name\": \"case_expression$ebnf$2\", \"symbols\": [\"case_expression$ebnf$2\", \"case_clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"case_expression\", \"symbols\": [(lexer.has(\"CASE\") ? {type: \"CASE\"} : CASE), \"_\", \"case_expression$ebnf$1\", \"case_expression$ebnf$2\", (lexer.has(\"END\") ? {type: \"END\"} : END)], \"postprocess\": \n        ([caseToken, _, expr, clauses, endToken]) => ({\n          type: NodeType.case_expression,\n          caseKw: addComments(toKeywordNode(caseToken), { trailing: _ }),\n          endKw: toKeywordNode(endToken),\n          expr: expr || [],\n          clauses,\n        })\n        },\n    {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN), \"_\", \"between_predicate_expression_chain_\", (lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN), \"_\", \"between_predicate_expression_chain_\"], \"postprocess\": \n        ([whenToken, _1, cond, thenToken, _2, expr]) => ({\n          type: NodeType.case_when,\n          whenKw: addComments(toKeywordNode(whenToken), { trailing: _1 }),\n          thenKw: addComments(toKeywordNode(thenToken), { trailing: _2 }),\n          condition: cond,\n          result: expr,\n        })\n        },\n    {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE), \"_\", \"expression_chain_\"], \"postprocess\": \n        ([elseToken, _, expr]) => ({\n          type: NodeType.case_else,\n          elseKw: addComments(toKeywordNode(elseToken), { trailing: _ }),\n          result: expr,\n        })\n        },\n    {\"name\": \"free_form_sql_chain_$ebnf$1\", \"symbols\": [\"free_form_sql\"]},\n    {\"name\": \"free_form_sql_chain_$ebnf$1\", \"symbols\": [\"free_form_sql_chain_$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"free_form_sql_chain_\", \"symbols\": [\"free_form_sql_chain_$ebnf$1\"], \"postprocess\": id},\n    {\"name\": \"comma$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA)]},\n    {\"name\": \"comma\", \"symbols\": [\"comma$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.comma })},\n    {\"name\": \"asterisk$subexpression$1\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)]},\n    {\"name\": \"asterisk\", \"symbols\": [\"asterisk$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n    {\"name\": \"operator$subexpression$1\", \"symbols\": [(lexer.has(\"OPERATOR\") ? {type: \"OPERATOR\"} : OPERATOR)]},\n    {\"name\": \"operator\", \"symbols\": [\"operator$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"IDENTIFIER\") ? {type: \"IDENTIFIER\"} : IDENTIFIER)]},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_IDENTIFIER\") ? {type: \"QUOTED_IDENTIFIER\"} : QUOTED_IDENTIFIER)]},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"VARIABLE\") ? {type: \"VARIABLE\"} : VARIABLE)]},\n    {\"name\": \"identifier\", \"symbols\": [\"identifier$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.identifier, text: token.text })},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NAMED_PARAMETER\") ? {type: \"NAMED_PARAMETER\"} : NAMED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_PARAMETER\") ? {type: \"QUOTED_PARAMETER\"} : QUOTED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBERED_PARAMETER\") ? {type: \"NUMBERED_PARAMETER\"} : NUMBERED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"POSITIONAL_PARAMETER\") ? {type: \"POSITIONAL_PARAMETER\"} : POSITIONAL_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"CUSTOM_PARAMETER\") ? {type: \"CUSTOM_PARAMETER\"} : CUSTOM_PARAMETER)]},\n    {\"name\": \"parameter\", \"symbols\": [\"parameter$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.parameter, key: token.key, text: token.text })},\n    {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBER\") ? {type: \"NUMBER\"} : NUMBER)]},\n    {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"STRING\") ? {type: \"STRING\"} : STRING)]},\n    {\"name\": \"literal\", \"symbols\": [\"literal$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.literal, text: token.text })},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_KEYWORD\") ? {type: \"RESERVED_KEYWORD\"} : RESERVED_KEYWORD)]},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_PHRASE\") ? {type: \"RESERVED_PHRASE\"} : RESERVED_PHRASE)]},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_JOIN\") ? {type: \"RESERVED_JOIN\"} : RESERVED_JOIN)]},\n    {\"name\": \"keyword\", \"symbols\": [\"keyword$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"AND\") ? {type: \"AND\"} : AND)]},\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"OR\") ? {type: \"OR\"} : OR)]},\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"ON\") ? {type: \"ON\"} : ON)]},\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"XOR\") ? {type: \"XOR\"} : XOR)]},\n    {\"name\": \"logic_operator\", \"symbols\": [\"logic_operator$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"END\") ? {type: \"END\"} : END)]},\n    {\"name\": \"other_keyword\", \"symbols\": [\"other_keyword$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"_$ebnf$1\", \"symbols\": []},\n    {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", \"comment\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": ([comments]) => comments},\n    {\"name\": \"comment\", \"symbols\": [(lexer.has(\"LINE_COMMENT\") ? {type: \"LINE_COMMENT\"} : LINE_COMMENT)], \"postprocess\": \n        ([token]) => ({\n          type: NodeType.line_comment,\n          text: token.text,\n          precedingWhitespace: token.precedingWhitespace,\n        })\n        },\n    {\"name\": \"comment\", \"symbols\": [(lexer.has(\"BLOCK_COMMENT\") ? {type: \"BLOCK_COMMENT\"} : BLOCK_COMMENT)], \"postprocess\": \n        ([token]) => ({\n          type: NodeType.block_comment,\n          text: token.text,\n          precedingWhitespace: token.precedingWhitespace,\n        })\n        }\n  ],\n  ParserStart: \"main\",\n};\n\nexport default grammar;\n","import nearley from 'nearley';\n\nimport Tokenizer from '../lexer/Tokenizer.js';\nimport { disambiguateTokens } from '../lexer/disambiguateTokens.js';\nimport { ParamTypes } from '../lexer/TokenizerOptions.js';\nimport { StatementNode } from './ast.js';\nimport grammar from './grammar.js';\nimport LexerAdapter from './LexerAdapter.js';\nimport { createEofToken } from '../lexer/token.js';\n\nconst { Parser: NearleyParser, Grammar } = nearley;\n\nexport interface Parser {\n  parse(sql: string, paramTypesOverrides: ParamTypes): StatementNode[];\n}\n\n/**\n * Creates a parser object which wraps the setup of Nearley parser\n * 创建Parser，基于nearly库，unpacksize 75kb【https://nearley.js.org/docs/grammar】。常用库Chevrotain unpackSize3.5MB\n */\nexport function createParser(tokenizer: Tokenizer): Parser {\n  let paramTypesOverrides: ParamTypes = {};\n  const lexer = new LexerAdapter(chunk => [\n    ...disambiguateTokens(tokenizer.tokenize(chunk, paramTypesOverrides)),\n    createEofToken(chunk.length)\n  ]);\n\n  const parser = new NearleyParser(Grammar.fromCompiled(grammar), { lexer });\n\n  return {\n    parse: (sql: string, paramTypes: ParamTypes) => {\n      // share paramTypesOverrides with Tokenizer\n      paramTypesOverrides = paramTypes;\n\n      const { results } = parser.feed(sql);\n\n      // console.log(results);\n\n      if (results.length === 1) {\n        return results[0];\n      } else if (results.length === 0) {\n        // Ideally we would report a line number where the parser failed,\n        // but I haven't found a way to get this info from Nearley :(\n        throw new Error('Parse error: Invalid SQL');\n      } else {\n        throw new Error(`Parse error: Ambiguous grammar`);\n        // throw new Error(`Parse error: Ambiguous grammar\\n${JSON.stringify(results, undefined, 2)}`);\n      }\n    }\n  };\n}\n","import { CommaPosition } from '../FormatOptions.js';\nimport { maxLength } from '../utils.js';\n\nconst PRECEDING_WHITESPACE_REGEX = /^\\s+/u;\n\n/**\n * Handles comma placement - either before, after or tabulated\n */\nexport default function formatCommaPositions(query: string, commaPosition: CommaPosition, indent: string): string {\n  return groupCommaDelimitedLines(query.split('\\n'))\n    .flatMap(commaLines => {\n      if (commaLines.length === 1) {\n        return commaLines;\n      } else if (commaPosition === 'tabular') {\n        return formatTabular(commaLines);\n      } else if (commaPosition === 'before') {\n        return formatBefore(commaLines, indent);\n      } else {\n        throw new Error(`Unexpected commaPosition: ${commaPosition}`);\n      }\n    })\n    .join('\\n');\n}\n\n/**\n * Given lines like this:\n *\n *     [\n *       'SELECT',\n *       '  foo,',\n *       '  bar, --comment',\n *       '  baz',\n *       'FROM'\n *     ]\n *\n * Returns groups like this:\n *\n *     [\n *       ['SELECT'],\n *       ['  foo,', '  bar, --comment', '  baz'],\n *       ['FROM']\n *     ]\n */\nfunction groupCommaDelimitedLines(lines: string[]): string[][] {\n  const groups: string[][] = [];\n  for (let i = 0; i < lines.length; i++) {\n    const group = [lines[i]];\n    // when line ends with comma,\n    // gather together all following lines that also end with comma,\n    // plus one (which doesn't end with comma)\n    while (lines[i].match(/.*,(\\s*(--.*)?$)/)) {\n      i++;\n      group.push(lines[i]);\n    }\n    groups.push(group);\n  }\n  return groups;\n}\n\n// makes all lines the same length by appending spaces before comma\nfunction formatTabular(commaLines: string[]): string[] {\n  const commaPosition = maxLength(trimTrailingComments(commaLines)) - 1;\n  return commaLines.map((line, i) => {\n    if (i === commaLines.length - 1) {\n      return line; // do not add comma for last item\n    }\n    return indentComma(line, commaPosition);\n  });\n}\n\nfunction indentComma(line: string, commaPosition: number) {\n  const [, code, comment] = line.match(/^(.*?),(\\s*--.*)?$/) || [];\n\n  const spaces = ' '.repeat(commaPosition - code.length);\n  return `${code}${spaces},${comment ?? ''}`;\n}\n\nfunction formatBefore(commaLines: string[], indent: string): string[] {\n  return trimTrailingCommas(commaLines).map((line, i) => {\n    if (i === 0) {\n      return line; // do not add comma for first item\n    }\n    const [whitespace] = line.match(PRECEDING_WHITESPACE_REGEX) || [''];\n    return (\n      removeLastIndent(whitespace, indent) +\n      indent.replace(/ {2}$/, ', ') + // add comma to the end of last indent\n      line.trimStart()\n    );\n  });\n}\n\nfunction removeLastIndent(whitespace: string, indent: string): string {\n  return whitespace.replace(new RegExp(indent + '$'), '');\n}\n\nfunction trimTrailingCommas(lines: string[]): string[] {\n  return lines.map(line => line.replace(/,(\\s*(--.*)?$)/, '$1'));\n}\n\nfunction trimTrailingComments(lines: string[]): string[] {\n  return lines.map(line => line.replace(/\\s*--.*/, ''));\n}\n","import { last } from '../utils.js';\n\nexport const INDENT_TYPE_TOP_LEVEL = 'top-level';\nexport const INDENT_TYPE_BLOCK_LEVEL = 'block-level';\nexport const INDENT_TYPE_TABULAR_BLOCK_LEVEL = 'tabular-block-level';\n\n/**\n * Manages indentation levels.\n *\n * There are two types of indentation levels:\n *\n * - BLOCK_LEVEL : increased by open-parenthesis\n * - TOP_LEVEL : increased by RESERVED_CLAUSE words\n */\nexport default class Indentation {\n  private indentTypes: string[] = [];\n\n  /**\n   * @param {string} indent A string to indent with\n   */\n  constructor(private indent: string, private tabWidthIndent: string = ' '.repeat(4)) {}\n\n  /**\n   * Returns indentation string for single indentation step.\n   */\n  getSingleIndent(): string {\n    return this.indent;\n  }\n\n  /**\n   * Returns current indentation level\n   */\n  getLevel(): number {\n    return this.indentTypes.length;\n  }\n\n  getIndentItems(): Array<string> {\n    return this.indentTypes;\n  }\n\n  /**\n   * Increases indentation by one top-level indent.\n   */\n  increaseTopLevel() {\n    this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);\n  }\n\n  /**\n   * Increases indentation by one block-level indent.\n   */\n  increaseBlockLevel() {\n    this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);\n  }\n\n  /**\n   * In tabular style, increases block-level indent by tab width\n   */\n  increaseTabularBlockLevel() {\n    this.indentTypes.push(INDENT_TYPE_TABULAR_BLOCK_LEVEL);\n  }\n\n  /**\n   * Decreases indentation by one top-level indent.\n   * Does nothing when the previous indent is not top-level.\n   */\n  decreaseTopLevel() {\n    if (this.indentTypes.length > 0 && last(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {\n      this.indentTypes.pop();\n    }\n  }\n\n  /**\n   * Decreases indentation by one block-level indent.\n   * If there are top-level indents within the block-level indent,\n   * throws away these as well.\n   */\n  decreaseBlockLevel() {\n    while (this.indentTypes.length > 0) {\n      const type = this.indentTypes.pop();\n      if (type !== INDENT_TYPE_TOP_LEVEL) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * Decreases indentation by one block-level indent in tabular style.\n   * If there are top-level indents within the block-level indent,\n   * throws away these as well.\n   * 制表风格下，由于采用10格补全空格法（padEnd）。在BlockLevel场景下会导致缩进过多，在括号场景下，丢失缩进的问题。\n   * 这是因为没有更细粒度控制缩进导致。所以在制表风格下 结合TabWidth进一步控制\n   */\n  decreaseTabularBlockLevel() {\n    while (this.indentTypes.length > 0) {\n      const type = this.indentTypes.pop();\n      if (type !== INDENT_TYPE_TOP_LEVEL) {\n        break;\n      }\n    }\n  }\n}\n","/**\n * @file 布局相关，用于在堆栈中添加元素，最后通过toString生成文案\n * @author 天一\n */\nimport { last } from '../utils.js';\n\nimport Indentation, { INDENT_TYPE_TABULAR_BLOCK_LEVEL } from './Indentation.js';\n\n/** Whitespace modifiers to be used with add() method */\nexport enum WS {\n  SPACE, // Adds single space, 单空格\n  NO_SPACE, // Removes preceding horizontal whitespace (if any)，移除前方的空格\n  NO_NEWLINE, // Removes all preceding whitespace (whether horizontal or vertical)， 移除到上一个词前方的空格、换行符\n  NEWLINE, // Adds single newline (and removes any preceding whitespace)，换行\n  MANDATORY_NEWLINE, // Adds single newline that can't be removed by NO_NEWLINE，高优先级换行，不能被后续移除换行符影响\n  INDENT, // Adds indentation (as much as needed for current indentation level)， 根据level层级，添加对应层数的单缩进\n  SINGLE_INDENT, // Adds whitespace for single indentation step，单缩进\n  TAB_WIDTH_INDENT // additional whitespace instead of blockLevel case，补充空格，用于解决tabular风格下，BlockLevel导致过于宽的问题。如case when\n}\n\nexport type LayoutItem = WS.SPACE | WS.SINGLE_INDENT | WS.NEWLINE | WS.MANDATORY_NEWLINE | WS.TAB_WIDTH_INDENT | string;\n\n/**\n * API for constructing SQL string (especially the whitespace part).\n *\n * It hides the internal implementation.\n * Originally it used plain string concatenation, which was expensive.\n * Now it's storing items to array and builds the string only in the end.\n */\nexport default class Layout {\n  private items: LayoutItem[] = [];\n\n  constructor(public indentation: Indentation) {}\n\n  /**\n   * Appends token strings and whitespace modifications to SQL string.\n   */\n  public add(...items: (WS | string)[]) {\n    for (const item of items) {\n      switch (item) {\n        case WS.SPACE:\n          this.items.push(WS.SPACE);\n          break;\n        case WS.NO_SPACE:\n          this.trimHorizontalWhitespace();\n          break;\n        case WS.NO_NEWLINE:\n          this.trimWhitespace();\n          break;\n        case WS.NEWLINE:\n          this.trimHorizontalWhitespace();\n          this.addNewline(WS.NEWLINE);\n          break;\n        case WS.MANDATORY_NEWLINE:\n          this.trimHorizontalWhitespace();\n          this.addNewline(WS.MANDATORY_NEWLINE);\n          break;\n        case WS.INDENT:\n          this.addIndentation();\n          break;\n        case WS.SINGLE_INDENT:\n          this.items.push(WS.SINGLE_INDENT);\n          break;\n        default:\n          this.items.push(item);\n      }\n    }\n  }\n\n  // in tabular style, Tab Width should be added to block phrase\n  // 制表风格下，由于采用10格补全空格法（padEnd）。在BlockLevel场景下会导致缩进过多，在括号场景下，丢失缩进的问题。\n  // 这是因为没有更细粒度控制缩进导致。所以在制表风格下 结合TabWidth进一步控制\n  public increaseTabWidthIndent() {\n    this.items.push(WS.TAB_WIDTH_INDENT);\n  }\n\n  public decreaseTabWidthIndent() {\n    if (last(this.items) === WS.SPACE) {\n      this.items.pop();\n    }\n  }\n\n  public getItems() {\n    return this.items;\n  }\n\n  private trimHorizontalWhitespace() {\n    while (isHorizontalWhitespace(last(this.items))) {\n      this.items.pop();\n    }\n  }\n\n  private trimWhitespace() {\n    while (isRemovableWhitespace(last(this.items))) {\n      this.items.pop();\n    }\n  }\n\n  public isAfterNewLine() {\n    let index = this.items.length - 1;\n    while (index >= 0 && isHorizontalWhitespace(this.items[index])) {\n      index--;\n    }\n    return this.items[index] === WS.NEWLINE || this.items[index] === WS.MANDATORY_NEWLINE;\n  }\n\n  private addNewline(newline: WS.NEWLINE | WS.MANDATORY_NEWLINE) {\n    if (this.items.length > 0) {\n      switch (last(this.items)) {\n        case WS.NEWLINE:\n          this.items.pop();\n          this.items.push(newline);\n          break;\n        case WS.MANDATORY_NEWLINE:\n          // keep as is\n          break;\n        default:\n          this.items.push(newline);\n          break;\n      }\n    }\n  }\n\n  private addIndentation() {\n    const indentTypes = this.indentation.getIndentItems();\n    indentTypes.forEach(type => {\n      if (type === INDENT_TYPE_TABULAR_BLOCK_LEVEL) {\n        this.items.push(WS.TAB_WIDTH_INDENT);\n      } else {\n        this.items.push(WS.SINGLE_INDENT);\n      }\n    });\n  }\n\n  /**\n   * Returns the final SQL string.\n   */\n  public toString(): string {\n    return this.items.map(item => this.itemToString(item)).join('');\n  }\n\n  /**\n   * Returns the internal layout data\n   */\n  public getLayoutItems(): LayoutItem[] {\n    return this.items;\n  }\n\n  private itemToString(item: LayoutItem): string {\n    switch (item) {\n      case WS.SPACE:\n        return ' ';\n      case WS.TAB_WIDTH_INDENT:\n        return ' '.repeat(4); // TODO，暂时内部设置4格，后续可补充为Tab width自由配置\n      case WS.NEWLINE:\n      case WS.MANDATORY_NEWLINE:\n        return '\\n';\n      case WS.SINGLE_INDENT:\n        return this.indentation.getSingleIndent();\n      default:\n        return item;\n    }\n  }\n}\n\nconst isHorizontalWhitespace = (item: WS | string | undefined) =>\n  item === WS.SPACE || item === WS.SINGLE_INDENT || item === WS.TAB_WIDTH_INDENT;\n\nconst isRemovableWhitespace = (item: WS | string | undefined) =>\n  item === WS.SPACE || item === WS.SINGLE_INDENT || item === WS.NEWLINE;\n","// eslint-disable-next-line max-classes-per-file\nimport Indentation from './Indentation.js';\nimport Layout, { WS } from './Layout.js';\n\n/**\n * Like Layout, but only formats single-line expressions.\n *\n * Throws InlineLayoutError:\n * - when encountering a newline\n * - when exceeding configured expressionWidth\n */\nexport default class InlineLayout extends Layout {\n  private length = 0;\n  // Keeps track of the trailing whitespace,\n  // so that we can decrease length when encountering WS.NO_SPACE,\n  // but only when there actually is a space to remove.\n  private trailingSpace = false;\n\n  constructor(private expressionWidth: number) {\n    super(new Indentation('')); // no indentation in inline layout\n  }\n\n  public add(...items: (WS | string)[]) {\n    items.forEach(item => this.addToLength(item));\n    if (this.length > this.expressionWidth) {\n      // We have exceeded the allowable width\n      throw new InlineLayoutError();\n    }\n    super.add(...items);\n  }\n\n  private addToLength(item: WS | string) {\n    if (typeof item === 'string') {\n      this.length += item.length;\n      this.trailingSpace = false;\n    } else if (item === WS.MANDATORY_NEWLINE || item === WS.NEWLINE) {\n      // newlines not allowed within inline block\n      throw new InlineLayoutError();\n    } else if (item === WS.INDENT || item === WS.SINGLE_INDENT || item === WS.SPACE) {\n      if (!this.trailingSpace) {\n        this.length++;\n        this.trailingSpace = true;\n      }\n    } else if (item === WS.NO_NEWLINE || item === WS.NO_SPACE) {\n      if (this.trailingSpace) {\n        this.trailingSpace = false;\n        this.length--;\n      }\n    }\n  }\n}\n\n/**\n * Thrown when block of SQL can't be formatted as a single line.\n */\nexport class InlineLayoutError extends Error {}\n","/**\n * @file 单SQL语句格式化入口\n * @author 天一\n */\nimport { FormatOptions } from '../FormatOptions.js';\nimport { equalizeWhitespace, isMultiline } from '../utils.js';\n\nimport Params from './Params.js';\nimport { isTabularStyle } from './config.js';\nimport { TokenType } from '../lexer/token.js';\nimport {\n  AllColumnsAsteriskNode,\n  ArraySubscriptNode,\n  AstNode,\n  BetweenPredicateNode,\n  SetOperationNode,\n  ClauseNode,\n  FunctionCallNode,\n  LimitClauseNode,\n  NodeType,\n  ParenthesisNode,\n  LiteralNode,\n  IdentifierNode,\n  ParameterNode,\n  OperatorNode,\n  LineCommentNode,\n  BlockCommentNode,\n  CommaNode,\n  KeywordNode,\n  PropertyAccessNode,\n  CommentNode,\n  CaseExpressionNode,\n  CaseWhenNode,\n  CaseElseNode\n} from '../parser/ast.js';\n\nimport Layout, { WS } from './Layout.js';\nimport toTabularFormat, { isTabularToken } from './tabularStyle.js';\nimport InlineLayout, { InlineLayoutError } from './InlineLayout.js';\n\ninterface ExpressionFormatterParams {\n  cfg: FormatOptions;\n  dialectCfg: ProcessedDialectFormatOptions;\n  params: Params;\n  layout: Layout;\n  inline?: boolean;\n  // 是否AND、OR等连接词需要提升作用域。 当函数内、case when场景当普通文本即可。在where条件语句需要提升作用。默认为false\n  escapeOperatorSpace?: number;\n  // 强制当前SQL不换行，用于SET等语句，换行会执行失败的场景\n  forceOneline?: number;\n}\n\nexport interface DialectFormatOptions {\n  // List of operators that should always be formatted without surrounding spaces\n  alwaysDenseOperators?: string[];\n  // List of clauses that should be formatted on a single line\n  // 新启一行，但是后续内容不换行。用于DROP、Update等语法\n  onelineClauses: string[];\n  preserveClauses?: string[];\n}\n\n// Contains the same data as DialectFormatOptions,\n// but optimized for faster and more conventient lookup.\nexport interface ProcessedDialectFormatOptions {\n  alwaysDenseOperators: string[];\n  onelineClauses: Record<string, boolean>;\n  preserveClauses: Record<string, boolean>;\n}\n\n/** Formats a generic SQL expression */\nexport default class ExpressionFormatter {\n  private cfg: FormatOptions;\n  private dialectCfg: ProcessedDialectFormatOptions;\n  private params: Params;\n  private layout: Layout;\n\n  private inline = false;\n  private nodes: AstNode[] = [];\n  private index = -1;\n\n  // 跳过连接词And、or等提升作用域。用于表达式、函数等场景\n  private escapeOperatorSpace = 0;\n  // 强制当前SQL不换行，用于SET等语句，换行会执行失败的场景\n  private forceOneline = 0;\n\n  constructor({\n    cfg,\n    dialectCfg,\n    params,\n    layout,\n    inline = false,\n    escapeOperatorSpace = 0,\n    forceOneline = 0\n  }: ExpressionFormatterParams) {\n    this.cfg = cfg;\n    this.dialectCfg = dialectCfg;\n    this.inline = inline;\n    this.params = params;\n    this.layout = layout;\n    this.escapeOperatorSpace = escapeOperatorSpace;\n    this.forceOneline = forceOneline;\n  }\n\n  public format(nodes: AstNode[]): Layout {\n    this.nodes = nodes;\n    for (this.index = 0; this.index < this.nodes.length; this.index++) {\n      this.formatNode(this.nodes[this.index]);\n    }\n    return this.layout;\n  }\n\n  private formatNode(node: AstNode) {\n    this.formatComments(node.leadingComments);\n    this.formatNodeWithoutComments(node);\n    this.formatComments(node.trailingComments);\n  }\n\n  private formatNodeWithoutComments(node: AstNode) {\n    switch (node.type) {\n      case NodeType.function_call: // 函数\n        return this.formatFunctionCall(node);\n      case NodeType.array_subscript:\n        return this.formatArraySubscript(node);\n      case NodeType.property_access: // field.[0], a.b, fields.*\n        return this.formatPropertyAccess(node);\n      case NodeType.parenthesis: // 括号包裹SQL 或 表达式。如子查询、等通过括号表达作用域的语句\n        return this.formatParenthesis(node);\n      case NodeType.between_predicate: // between and\n        return this.formatBetweenPredicate(node);\n      case NodeType.case_expression: // CASE 语句， 紧跟case_when 或 case_else\n        return this.formatCaseExpression(node);\n      case NodeType.case_when: // when X then X场景\n        return this.formatCaseWhen(node);\n      case NodeType.case_else: // case 语句中，ELSE场景\n        return this.formatCaseElse(node);\n      case NodeType.clause:\n        return this.formatClause(node);\n      case NodeType.set_operation: // set 语句\n        return this.formatSetOperation(node);\n      case NodeType.limit_clause: // limit 作用域\n        return this.formatLimitClause(node);\n      case NodeType.all_columns_asterisk: // 星号（表示全量字段）\n        return this.formatAllColumnsAsterisk(node);\n      case NodeType.literal: // 字符（数字、字符串）\n        return this.formatLiteral(node);\n      case NodeType.identifier: // 字段元数据\n        return this.formatIdentifier(node);\n      case NodeType.parameter: // 变量场景\n        return this.formatParameter(node);\n      case NodeType.operator: // 操作符号\n        return this.formatOperator(node);\n      case NodeType.comma: // 逗号\n        return this.formatComma(node);\n      case NodeType.line_comment: // 行内注释\n        return this.formatLineComment(node);\n      case NodeType.block_comment: // 块级注释\n        return this.formatBlockComment(node);\n      case NodeType.keyword: // 非配置的关键词\n        return this.formatKeywordNode(node);\n    }\n  }\n\n  // UDF处理，\n  private formatFunctionCall(node: FunctionCallNode) {\n    // format function name and comments around function name\n    this.withComments(node.nameKw, () => {\n      this.layout.add(this.showKw(node.nameKw)); // tabular风格不会生效，UDF函数名\n    });\n    // format parenthesis after function name token\n    this.escapeOperatorSpace++;\n    this.formatNode(node.parenthesis);\n    this.escapeOperatorSpace--;\n  }\n\n  private formatArraySubscript(node: ArraySubscriptNode) {\n    this.withComments(node.array, () => {\n      this.layout.add(node.array.type === NodeType.keyword ? this.showKw(node.array) : node.array.text);\n    });\n    this.formatNode(node.parenthesis);\n  }\n\n  private formatPropertyAccess(node: PropertyAccessNode) {\n    this.formatNode(node.object);\n    this.layout.add(WS.NO_SPACE, '.');\n    this.formatNode(node.property);\n  }\n\n  private formatParenthesis(node: ParenthesisNode) {\n    // node.children is the expression inside parens。 Factory create formatter ins\n    // （ node.children ） => 括号中的内容。\n    // 1. 这里用工厂模式新建实例处理，避免indent污染\n    // 2. expression_or_clause为数组结构，formatter设计还是链表不回溯，所以创建新的formatter实例使用for循环处理\n    // 3. inline模式内部判断是否需要超长换行，这样处理会更清晰\n    const inlineLayout = this.formatInlineExpression(node.children);\n\n    if (inlineLayout) {\n      this.layout.add(node.openParen);\n      this.layout.add(...inlineLayout.getLayoutItems());\n      this.layout.add(WS.NO_SPACE, node.closeParen, WS.SPACE);\n    } else {\n      // multiline mode\n      this.layout.add(node.openParen, WS.NEWLINE);\n\n      if (isTabularStyle(this.cfg)) {\n        this.layout.indentation.increaseTabularBlockLevel();\n        this.layout.add(WS.INDENT); // TODO tabular style should add block level to indent\n        this.layout = this.formatSubExpression(node.children);\n        this.layout.indentation.decreaseTabularBlockLevel();\n      } else {\n        this.layout.indentation.increaseBlockLevel();\n        this.layout.add(WS.INDENT);\n        this.layout = this.formatSubExpression(node.children);\n        this.layout.indentation.decreaseBlockLevel();\n      }\n\n      this.layout.add(WS.NEWLINE, WS.INDENT, node.closeParen, WS.SPACE);\n    }\n  }\n\n  private formatBetweenPredicate(node: BetweenPredicateNode) {\n    this.layout.add(this.showKw(node.betweenKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.expr1);\n    this.layout.add(WS.NO_SPACE, WS.SPACE, this.showNonTabularKw(node.andKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.expr2);\n    this.layout.add(WS.SPACE);\n  }\n\n  // 处理case 表达式\n  private formatCaseExpression(node: CaseExpressionNode) {\n    this.formatNode(node.caseKw);\n\n    // TODO 判断node.expr是否存在，不存在时when可以使用tabular风格如Select\n    // 若存在则保留现有逻辑，换行缩进\n    if (isTabularStyle(this.cfg)) {\n      this.escapeOperatorSpace++;\n      this.layout.indentation.increaseTabularBlockLevel();\n      this.layout = this.formatSubExpression(node.expr); // case后的表达式\n      // 开启case when自适应换行\n      const inlineLayout = !this.cfg.forceNewlineCaseWhen && this.formatInlineExpression(node.clauses);\n      if (inlineLayout) {\n        this.layout.add(...inlineLayout.getLayoutItems());\n      } else {\n        this.layout = this.formatSubExpression(node.clauses); // 处理when 或 else语句\n      }\n      this.layout.indentation.decreaseTabularBlockLevel();\n      // 非行内，才增加End后的换行符\n      !inlineLayout && this.layout.add(WS.NEWLINE, WS.INDENT);\n\n      this.escapeOperatorSpace--;\n    } else {\n      this.layout.indentation.increaseBlockLevel();\n      this.layout = this.formatSubExpression(node.expr); // case后的表达式\n      this.layout = this.formatSubExpression(node.clauses); // 处理when 或 else语句\n      this.layout.indentation.decreaseBlockLevel();\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    }\n\n    this.formatNode(node.endKw);\n  }\n\n  private formatCaseWhen(node: CaseWhenNode) {\n    if (!this.inline) {\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    }\n    this.formatNode(node.whenKw);\n    this.escapeOperatorSpace++;\n    this.layout = this.formatSubExpression(node.condition);\n    this.escapeOperatorSpace--;\n    this.formatNode(node.thenKw);\n    this.layout = this.formatSubExpression(node.result);\n  }\n\n  private formatCaseElse(node: CaseElseNode) {\n    if (!this.inline) {\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    }\n    this.formatNode(node.elseKw);\n    this.layout = this.formatSubExpression(node.result);\n  }\n\n  private formatClause(node: ClauseNode) {\n    if (this.isPreserveClause(node)) {\n      this.formatClauseInPreserveStyle(node);\n    } else if (this.isOnelineClause(node)) {\n      this.formatClauseInOnelineStyle(node);\n    } else if (isTabularStyle(this.cfg)) {\n      this.formatClauseInTabularStyle(node);\n    } else {\n      this.formatClauseInIndentedStyle(node);\n    }\n  }\n\n  private isOnelineClause(node: ClauseNode): boolean {\n    return this.dialectCfg.onelineClauses[node.nameKw.text];\n  }\n\n  private isPreserveClause(node: ClauseNode): boolean {\n    return this.dialectCfg.preserveClauses[node.nameKw.text];\n  }\n\n  private formatClauseInIndentedStyle(node: ClauseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n    this.layout.indentation.increaseTopLevel();\n    this.layout.add(WS.INDENT);\n    this.layout = this.formatSubExpression(node.children);\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatClauseInOnelineStyle(node: ClauseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.children);\n  }\n\n  private formatClauseInPreserveStyle(node: ClauseNode) {\n    // preserve clause不处理。保留原来的大小写\n    this.layout.add(WS.NEWLINE, WS.INDENT, node.nameKw.raw, WS.SPACE);\n    this.forceOneline++;\n    this.layout = this.formatSubExpression(node.children);\n    this.forceOneline--;\n  }\n\n  private formatClauseInTabularStyle(node: ClauseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n    this.layout.indentation.increaseTopLevel();\n    if (this.isTabularNewlineKeyword(node.nameKw)) {\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    }\n    this.layout = this.formatSubExpression(node.children);\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatSetOperation(node: SetOperationNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n    this.layout.add(WS.INDENT);\n    this.layout = this.formatSubExpression(node.children);\n  }\n\n  private formatLimitClause(node: LimitClauseNode) {\n    this.withComments(node.limitKw, () => {\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.limitKw));\n    });\n    this.layout.indentation.increaseTopLevel();\n\n    if (isTabularStyle(this.cfg)) {\n      this.layout.add(WS.SPACE);\n    } else {\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    }\n\n    if (node.offset) {\n      this.layout = this.formatSubExpression(node.offset);\n      this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n      this.layout = this.formatSubExpression(node.count);\n    } else {\n      this.layout = this.formatSubExpression(node.count);\n    }\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatAllColumnsAsterisk(_node: AllColumnsAsteriskNode) {\n    this.layout.add('*', WS.SPACE);\n  }\n\n  private formatLiteral(node: LiteralNode) {\n    this.layout.add(node.text, WS.SPACE);\n  }\n\n  private formatIdentifier(node: IdentifierNode) {\n    this.layout.add(node.text, WS.SPACE);\n  }\n\n  private formatParameter(node: ParameterNode) {\n    this.layout.add(this.params.get(node), WS.SPACE);\n  }\n\n  private formatOperator({ text }: OperatorNode) {\n    if (this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(text)) {\n      this.layout.add(WS.NO_SPACE, text);\n    } else if (text === ':') {\n      this.layout.add(WS.NO_SPACE, text, WS.SPACE);\n    } else {\n      this.layout.add(text, WS.SPACE);\n    }\n  }\n\n  private formatComma(_node: CommaNode) {\n    // 逗号前紧跟换行符，则加入indent缩进\n    if (!this.layout.isAfterNewLine()) {\n      this.layout.add(WS.NO_SPACE);\n    }\n    if (!this.inline) {\n      // newline after comma\n      this.layout.add(',', WS.NEWLINE, WS.INDENT);\n    } else {\n      this.layout.add(',', WS.SPACE);\n    }\n  }\n\n  private withComments(node: AstNode, fn: () => void) {\n    this.formatComments(node.leadingComments);\n    fn();\n    this.formatComments(node.trailingComments);\n  }\n\n  //\n  private formatComments(comments: CommentNode[] | undefined) {\n    if (!comments) {\n      return;\n    }\n    comments.forEach(com => {\n      if (com.type === NodeType.line_comment) {\n        this.formatLineComment(com);\n      } else {\n        this.formatBlockComment(com);\n      }\n    });\n  }\n\n  // 行内注释block的处理，\n  private formatLineComment(node: LineCommentNode) {\n    if (isMultiline(node.precedingWhitespace || '')) {\n      // 多行注释则\n      this.layout.add(WS.NEWLINE, WS.INDENT, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    } else if (this.layout.getLayoutItems().length > 0) {\n      this.layout.add(WS.NO_NEWLINE, WS.SPACE, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    } else {\n      // comment is the first item in code - no need to add preceding spaces\n      this.layout.add(node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    }\n  }\n\n  // 块级注释处理\n  private formatBlockComment(node: BlockCommentNode) {\n    if (this.isMultilineBlockComment(node)) {\n      this.splitBlockComment(node.text).forEach(line => {\n        this.layout.add(WS.NEWLINE, WS.INDENT, line);\n      });\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    } else {\n      this.layout.add(node.text, WS.SPACE);\n    }\n  }\n\n  private isMultilineBlockComment(node: BlockCommentNode): boolean {\n    return isMultiline(node.text) || isMultiline(node.precedingWhitespace || '');\n  }\n\n  // Breaks up block comment to multiple lines.\n  // For example this comment (dots representing leading whitespace):\n  //\n  //   ..../**\n  //   .....* Some description here\n  //   .....* and here too\n  //   .....*/\n  //\n  // gets broken to this array (note the leading single spaces):\n  //\n  //   [ '/**',\n  //     '.* Some description here',\n  //     '.* and here too',\n  //     '.*/' ]\n  //\n  private splitBlockComment(comment: string): string[] {\n    return comment.split(/\\n/).map(line => {\n      if (/^\\s*\\*/.test(line)) {\n        return ' ' + line.replace(/^\\s*/, '');\n      } else {\n        return line.replace(/^\\s*/, '');\n      }\n    });\n  }\n\n  private formatSubExpression(nodes: AstNode[]): Layout {\n    return new ExpressionFormatter({\n      cfg: this.cfg,\n      dialectCfg: this.dialectCfg,\n      params: this.params,\n      layout: this.layout,\n      inline: this.inline,\n      escapeOperatorSpace: this.escapeOperatorSpace,\n      forceOneline: this.forceOneline\n    }).format(nodes);\n  }\n\n  private formatInlineExpression(nodes: AstNode[]): Layout | undefined {\n    const oldParamIndex = this.params.getPositionalParameterIndex();\n    try {\n      // inlinelayout, when longer than the preset size。throw InlineLayoutError\n      // 行内模式，expression。inlineLayout内部处理超出配置项后，抛出InlineLayoutError，后继续使用换行模式\n      return new ExpressionFormatter({\n        cfg: this.cfg,\n        dialectCfg: this.dialectCfg,\n        params: this.params,\n        layout: new InlineLayout(this.forceOneline ? Infinity : this.cfg.expressionWidth),\n        inline: true,\n        escapeOperatorSpace: this.escapeOperatorSpace\n      }).format(nodes);\n    } catch (e) {\n      // 预设的超长错误类型，采用换行模式处理即可\n      if (e instanceof InlineLayoutError) {\n        // While formatting, some of the positional parameters might have\n        // been consumed, which increased the current parameter index.\n        // We reset the index to an earlier state, so we can run the\n        // formatting again and re-consume these parameters in non-inline mode.\n        this.params.setPositionalParameterIndex(oldParamIndex);\n        return undefined;\n      } else {\n        // forward all unexpected errors\n        throw e;\n      }\n    }\n  }\n\n  private formatKeywordNode(node: KeywordNode): void {\n    switch (node.tokenType) {\n      case TokenType.RESERVED_JOIN:\n        return this.formatJoin(node);\n      case TokenType.AND:\n      case TokenType.OR:\n      case TokenType.XOR:\n      case TokenType.ON:\n        return this.formatLogicalOperator(node);\n      default:\n        return this.formatKeyword(node);\n    }\n  }\n\n  private formatJoin(node: KeywordNode) {\n    if (isTabularStyle(this.cfg)) {\n      // in tabular style JOINs are at the same level as clauses\n      this.layout.indentation.decreaseTopLevel();\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n      this.layout.indentation.increaseTopLevel();\n\n      // tabular style, add newline when keyword longer than 8 characters\n      if (this.isTabularNewlineKeyword(node)) {\n        this.layout.add(WS.NEWLINE, WS.INDENT);\n      }\n    } else {\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n    }\n  }\n\n  private formatKeyword(node: KeywordNode) {\n    this.layout.add(this.showKw(node), WS.SPACE);\n  }\n\n  private formatLogicalOperator(node: KeywordNode) {\n    if (this.cfg.logicalOperatorNewline === 'before') {\n      if (isTabularStyle(this.cfg)) {\n        // In tabular style AND/OR is placed on the same level as clauses\n        this.layout.indentation.decreaseTopLevel();\n        // 函数内、casewhen内AND作为普通文本处理，仅处理超长换行的逻辑\n        if (this.escapeOperatorSpace) {\n          this.layout.add(node.text, WS.SPACE);\n        } else {\n          this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n          this.layout.indentation.increaseTopLevel();\n        }\n      } else {\n        this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n      }\n    } else {\n      this.layout.add(this.showKw(node), WS.NEWLINE, WS.INDENT);\n    }\n  }\n\n  private showKw(node: KeywordNode): string {\n    if (isTabularToken(node.tokenType)) {\n      return toTabularFormat(this.showNonTabularKw(node), this.cfg.indentStyle);\n    } else {\n      return this.showNonTabularKw(node);\n    }\n  }\n\n  // Like showKw(), but skips tabular formatting\n  private showNonTabularKw(node: KeywordNode): string {\n    // 如clickhouse语法，函数大小写敏感，不可以随格式化改变\n    if (this.cfg.functionCase === 'preserve' && node.tokenType === TokenType.RESERVED_FUNCTION_NAME) {\n      return equalizeWhitespace(node.raw);\n    }\n\n    switch (this.cfg.keywordCase) {\n      case 'preserve':\n        return equalizeWhitespace(node.raw);\n      case 'upper':\n        return node.text;\n      case 'lower':\n        return node.text.toLowerCase();\n    }\n  }\n\n  // under tabular style, if keyword length longer than 8, start newline with indent for trailing identifier\n  private isTabularNewlineKeyword(node: KeywordNode): boolean {\n    // create 语句例外，无需换行\n    return this.showKw(node).length >= 8 && isTabularStyle(this.cfg) && !/^create/i.test(node.text);\n  }\n}\n","import { IndentStyle } from '../FormatOptions.js';\nimport { isLogicalOperator, TokenType } from '../lexer/token.js';\n\n/**\n * When tabular style enabled,\n * produces a 10-char wide version of token text.\n */\nexport default function toTabularFormat(tokenText: string, indentStyle: IndentStyle): string {\n  if (indentStyle === 'standard') {\n    return tokenText;\n  }\n\n  let tail = [] as string[]; // rest of keyword\n  if (tokenText.length >= 10 && tokenText.includes(' ')) {\n    // split for long keywords like INNER JOIN or UNION DISTINCT\n    [tokenText, ...tail] = tokenText.split(' ');\n  }\n\n  if (indentStyle === 'tabularLeft') {\n    tokenText = tokenText.padEnd(7, ' '); // 取10格，可修改为8格\n  } else {\n    tokenText = tokenText.padStart(7, ' ');\n  }\n\n  return tokenText + ['', ...tail].join(' ');\n}\n\n/**\n * True when the token can be formatted in tabular style\n * 制表风格的Token，指 是否拥有自身的作用域，如limit 作用域范围 limit 10\n */\nexport function isTabularToken(type: TokenType): boolean {\n  return (\n    isLogicalOperator(type) ||\n    type === TokenType.RESERVED_CLAUSE ||\n    type === TokenType.RESERVED_SELECT ||\n    type === TokenType.RESERVED_SET_OPERATION ||\n    type === TokenType.RESERVED_JOIN ||\n    type === TokenType.LIMIT\n  );\n}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { indentString } from './config.js';\nimport Params from './Params.js';\n\nimport { createParser } from '../parser/createParser.js';\nimport { StatementNode } from '../parser/ast.js';\nimport { Dialect } from '../dialect.js';\n\nimport formatCommaPositions from './formatCommaPositions.js';\nimport formatAliasPositions from './formatAliasPositions.js';\nimport formatCreateTypePositions from './formatCreateTypePositions.js';\nimport ExpressionFormatter from './ExpressionFormatter.js';\nimport Layout, { WS } from './Layout.js';\nimport Indentation from './Indentation.js';\n\n/** Main formatter class that produces a final output string from list of tokens */\nexport default class Formatter {\n  private dialect: Dialect;\n  private cfg: FormatOptions;\n  private params: Params;\n\n  constructor(dialect: Dialect, cfg: FormatOptions) {\n    this.dialect = dialect; // 词法方言\n    this.cfg = cfg;\n    this.params = new Params(this.cfg.params);\n  }\n\n  /**\n   * Formats an SQL query.\n   * 格式化入口函数，大致思路：\n   *  1. 词法解析，修正词法结果（基于正则的方案，因为词法定义优先级顺序导致误判，通常出现在字段与关键词、关键词与函数名等）【src/lexer/disambiguateTokens.ts】\n   *  2.\n   */\n  public format(query: string): string {\n    const ast = this.parse(query); // 构建AST\n    const formattedQuery = this.formatAst(ast);\n    const finalQuery = this.postFormat(formattedQuery);\n\n    return finalQuery.trimEnd();\n  }\n\n  public parse(query: string): StatementNode[] {\n    return createParser(this.dialect.tokenizer).parse(query, this.cfg.paramTypes || {});\n  }\n\n  private formatAst(statements: StatementNode[]): string {\n    return statements.map(stat => this.formatStatement(stat)).join('\\n'.repeat(this.cfg.linesBetweenQueries + 1));\n  }\n\n  private formatStatement(statement: StatementNode): string {\n    const layout = new ExpressionFormatter({\n      cfg: this.cfg,\n      dialectCfg: this.dialect.formatOptions,\n      params: this.params,\n      // indentString将配置转换为对应的空格数\n      layout: new Layout(new Indentation(indentString(this.cfg)))\n    }).format(statement.children);\n\n    if (!statement.hasSemicolon) {\n      // do nothing\n    } else if (this.cfg.newlineBeforeSemicolon) {\n      // 终结符是否换行。\n      layout.add(WS.NEWLINE, ';');\n    } else {\n      layout.add(WS.NO_NEWLINE, ';');\n    }\n    return layout.toString();\n  }\n\n  private postFormat(query: string): string {\n    try {\n      if (this.cfg.tabulateAlias) {\n        query = formatAliasPositions(query);\n      }\n\n      if (this.cfg.indentStyle !== 'standard') {\n        query = formatCreateTypePositions(query);\n      }\n\n      if (!this.cfg.newlineBeforeSet) {\n        query = query.replace(/\\n+(set)/gi, '\\n$1');\n      }\n\n      if (this.cfg.commaPosition === 'before' || this.cfg.commaPosition === 'tabular') {\n        query = formatCommaPositions(query, this.cfg.commaPosition, indentString(this.cfg));\n      }\n    } catch (e) {\n      console.log('error happend in postFormat');\n    }\n    return query;\n  }\n}\n","import { maxLength } from '../utils.js';\n\n/**\n * Handles select alias placement - tabulates if enabled\n * 手动别名对齐，思路：找到SELECT关键词，\n */\nexport default function formatAliasPositions(query: string): string {\n  const lines = query.split('\\n');\n\n  let newQuery: string[] = [];\n  for (let i = 0; i < lines.length; i++) {\n    // find SELECT rows with trailing comma, if no comma (only one row) - no-op\n    if (lines[i].match(/^\\s*SELECT/i)) {\n      let aliasLines: string[] = [];\n      if (lines[i].match(/.*,$/)) {\n        aliasLines = [lines[i]]; // add select to aliasLines in case of tabular formats\n      } else {\n        newQuery.push(lines[i]); // add select to new query\n        if (lines[i].match(/^\\s*SELECT\\s+.+(?!,$)/i)) {\n          continue;\n        }\n        aliasLines.push(lines[++i]);\n      }\n\n      // get all lines in SELECT clause\n      while (lines[i++].match(/.*,$/)) {\n        aliasLines.push(lines[i]);\n      }\n\n      // break lines into alias with optional AS, and all preceding text\n      const splitLines = aliasLines\n        .map(line => ({ line, matches: line.match(/(^.*?\\S) (AS )?([\\w$]+,?$)/i) }))\n        .map(({ line, matches }) => {\n          if (!matches) {\n            return { precedingText: line };\n          }\n          return {\n            precedingText: matches[1],\n            as: matches[2],\n            alias: matches[3]\n          };\n        });\n\n      // get longest of precedingText, trim trailing comma for non-alias columns\n      const aliasMaxLength = maxLength(splitLines.map(({ precedingText }) => precedingText.replace(/\\s*,\\s*$/, '')));\n      // re-construct line, aligning by inserting space before AS or alias\n      aliasLines = splitLines.map(\n        ({ precedingText, as, alias }) =>\n          precedingText + (alias ? ' '.repeat(aliasMaxLength - precedingText.length + 1) + (as ?? '') + alias : '')\n      );\n      newQuery = [...newQuery, ...aliasLines];\n    }\n    newQuery.push(lines[i]);\n  }\n\n  return newQuery.join('\\n');\n}\n","/**\n * Handles create fields type placement - tabulates if enabled\n * 手动字段类型，comment对齐，思路：找到CREATE TABLE关键词，\n */\nimport { maxLength } from '../utils.js';\nexport default function formatCreateTypePositions(query: string): string {\n  const lines = query.split('\\n');\n\n  let newQuery: string[] = [];\n  for (let i = 0; i < lines.length; i++) {\n    // find CREATE rows with trailing comma, if no comma (only one row) - no-op\n    if (lines[i].match(/^\\s*CREATE\\s*(EXTERNAL\\s+)?TABLE.+\\(/i)) {\n      let aliasLines: string[] = [];\n\n      newQuery.push(lines[i]); // add create table line to new query\n\n      aliasLines.push(lines[++i]); // add next fields definition to aliasLines\n\n      // get all lines in create table parenthesis, end with comma\n      while (lines[i++]?.match(/.*,$/)) {\n        aliasLines.push(lines[i]);\n      }\n      if (i >= lines.length) {\n        continue;\n      }\n\n      // break lines into alias with optional AS, and all preceding text\n      const splitLines = aliasLines.map(lineText => {\n        // end of parenthesis\n        if (/^\\s*\\)/.test(lineText)) {\n          return { precedingText: lineText, dataType: '' };\n        }\n\n        const [line, commentWord, comment] = lineText.split(/\\s(comment)\\s/i);\n\n        const matches = line.match(/(^\\s*\\S+)(.*?)?$/);\n\n        if (!matches) {\n          return { precedingText: line, dataType: '' };\n        }\n\n        return {\n          precedingText: matches[1],\n          dataType: matches[2] ?? '',\n          comment: comment ? commentWord + comment : undefined\n        };\n      });\n\n      // get longest of precedingText, trim trailing comma for non-alias columns\n      const fieldMaxLength = maxLength(\n        splitLines\n          .filter(({ dataType }) => Boolean(dataType))\n          .map(({ precedingText }) => precedingText.replace(/\\s*,\\s*$/, ''))\n      );\n      const dataTypeMaxLength = maxLength(\n        splitLines.filter(({ dataType }) => Boolean(dataType)).map(({ dataType }) => dataType.replace(/\\s*,\\s*$/, ''))\n      );\n\n      // re-construct line, aligning by inserting space before AS or alias\n      aliasLines = splitLines.map(({ precedingText, dataType, comment }) => {\n        let text = precedingText;\n        if (dataType || comment) {\n          text += ' '.repeat(fieldMaxLength - precedingText.length + 1) + (dataType ?? '');\n        }\n        if (comment) {\n          text += ' '.repeat(dataTypeMaxLength - dataType.length + 1) + (comment ?? '');\n        }\n        return text;\n      });\n      newQuery = [...newQuery, ...aliasLines];\n    }\n    newQuery.push(lines[i]);\n  }\n\n  return newQuery.join('\\n');\n}\n","import { FormatOptions } from './FormatOptions.js';\nimport { ParamItems } from './formatter/Params.js';\n\nexport class ConfigError extends Error {}\n\nexport function validateConfig(cfg: FormatOptions): FormatOptions {\n  if ('multilineLists' in cfg) {\n    throw new ConfigError('multilineLists config is no more supported.');\n  }\n  if ('newlineBeforeOpenParen' in cfg) {\n    throw new ConfigError('newlineBeforeOpenParen config is no more supported.');\n  }\n  if ('newlineBeforeCloseParen' in cfg) {\n    throw new ConfigError('newlineBeforeCloseParen config is no more supported.');\n  }\n  if ('aliasAs' in cfg) {\n    throw new ConfigError('aliasAs config is no more supported.');\n  }\n\n  if (cfg.expressionWidth <= 0) {\n    throw new ConfigError(`expressionWidth config must be positive number. Received ${cfg.expressionWidth} instead.`);\n  }\n\n  if (cfg.commaPosition === 'before' && cfg.useTabs) {\n    throw new ConfigError('commaPosition: before does not work when tabs are used for indentation.');\n  }\n\n  if (cfg.params && !validateParams(cfg.params)) {\n    // eslint-disable-next-line no-console\n    console.warn('WARNING: All \"params\" option values should be strings.');\n  }\n\n  return cfg;\n}\n\nfunction validateParams(params: ParamItems | string[]): boolean {\n  const paramValues = params instanceof Array ? params : Object.values(params);\n  return paramValues.every(p => typeof p === 'string');\n}\n","import * as allDialects from './allDialects.js';\n\nimport { FormatOptions } from './FormatOptions.js';\nimport { createDialect, DialectOptions } from './dialect.js';\nimport Formatter from './formatter/Formatter.js';\nimport { ConfigError, validateConfig } from './validateConfig.js';\nimport { StatementNode } from './parser/ast.js';\n\nconst dialectNameMap: Record<string, keyof typeof allDialects> = {\n  bigquery: 'bigquery',\n  db2: 'db2',\n  hive: 'hive',\n  mariadb: 'mariadb',\n  mysql: 'mysql',\n  n1ql: 'n1ql',\n  plsql: 'plsql',\n  postgresql: 'postgresql',\n  redshift: 'redshift',\n  spark: 'spark',\n  sqlite: 'sqlite',\n  sql: 'sql',\n  trino: 'trino',\n  transactsql: 'transactsql',\n  tsql: 'transactsql', // alias for transactsq\n  singlestoredb: 'singlestoredb',\n  snowflake: 'snowflake',\n  clickhouse: 'clickhouse'\n};\n\nexport const supportedDialects = Object.keys(dialectNameMap);\nexport type SqlLanguage = keyof typeof dialectNameMap;\n\nexport type FormatOptionsWithLanguage = Partial<FormatOptions> & {\n  language?: SqlLanguage;\n};\n\nexport type FormatOptionsWithDialect = Partial<FormatOptions> & {\n  dialect: DialectOptions;\n};\n\nconst defaultOptions: FormatOptions = {\n  tabWidth: 2,\n  useTabs: false,\n  keywordCase: 'preserve',\n  indentStyle: 'standard',\n  logicalOperatorNewline: 'before',\n  tabulateAlias: false,\n  commaPosition: 'after',\n  expressionWidth: 50,\n  linesBetweenQueries: 1,\n  denseOperators: false,\n  newlineBeforeSemicolon: false,\n  functionCase: 'preserve',\n  forceNewlineCaseWhen: true,\n  newlineBeforeSet: false\n};\n\n/**\n * Format whitespace in a query to make it easier to read.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithLanguage} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const format = (query: string, cfg: FormatOptionsWithLanguage = {}): string => {\n  if (typeof cfg.language === 'string' && !supportedDialects.includes(cfg.language)) {\n    throw new ConfigError(`Unsupported SQL dialect: ${cfg.language}`);\n  }\n\n  const canonicalDialectName = dialectNameMap[cfg.language || 'sql'];\n\n  return formatDialect(query, {\n    ...cfg,\n    dialect: allDialects[canonicalDialectName]\n  }).format(query);\n};\n\nexport const parse = (query: string, cfg: Partial<FormatOptionsWithLanguage> = {}): StatementNode[] => {\n  if (typeof cfg.language === 'string' && !supportedDialects.includes(cfg.language)) {\n    throw new ConfigError(`Unsupported SQL dialect: ${cfg.language}`);\n  }\n\n  const canonicalDialectName = dialectNameMap[cfg.language || 'sql'];\n\n  return formatDialect(query, {\n    ...cfg,\n    dialect: allDialects[canonicalDialectName]\n  }).parse(query);\n};\n\n/**\n * Like the above format(), but language parameter is mandatory\n * and must be a Dialect object instead of a string.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithDialect} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const formatDialect = (query: string, { dialect, ...cfg }: FormatOptionsWithDialect): Formatter => {\n  if (typeof query !== 'string') {\n    throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);\n  }\n\n  const options = validateConfig({\n    ...defaultOptions,\n    ...cfg\n  });\n\n  return new Formatter(createDialect(dialect), options);\n};\n\nexport type FormatFn = typeof format;\n"],"names":["root","factory","exports","module","define","amd","this","Rule","name","symbols","postprocess","id","highestId","State","rule","dot","reference","wantedBy","data","isComplete","length","Column","grammar","index","states","wants","scannable","completed","Grammar","rules","start","byName","forEach","hasOwnProperty","push","StreamLexer","reset","Parser","options","fromCompiled","key","keepHistory","lexer","lexerState","undefined","column","table","predict","process","current","getSymbolShortDisplay","symbol","type","literal","JSON","stringify","RegExp","toString","test","String","Error","prototype","withCursorAt","symbolSequence","map","join","slice","nextState","child","state","left","right","build","children","node","reverse","finish","fail","nextColumn","w","i","complete","exp","nulls","r","s","copy","Lexer","ParserStart","ParserRules","g","buffer","line","lastLineBreak","col","next","ch","value","save","formatError","token","message","lines","split","Math","max","nextLineBreak","indexOf","lastLineDigits","pad","n","Array","feed","chunk","e","err","reportLexerError","offset","text","constructor","expect","isToken","reportError","results","lexerError","tokenDisplay","lexerMessage","reportErrorCommon","lastColumnIndex","lastColumn","expectantStates","filter","nextSymbol","displayStateStack","buildFirstStateStack","stateStack","symbolDisplay","getSymbolDisplay","lastDisplay","sameDisplayCount","j","display","getSymbolLongDisplay","visited","prevState","childVisited","concat","childResult","restore","splice","rewind","considerations","t","c","nearley","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","obj","prop","Symbol","toStringTag","TokenType","createEofToken","EOF","raw","EOF_TOKEN","Infinity","testToken","compareToken","ARRAY","RESERVED_KEYWORD","BY","SET","RESERVED_CLAUSE","STRUCT","WINDOW","isReserved","RESERVED_FUNCTION_NAME","RESERVED_PHRASE","RESERVED_SELECT","RESERVED_SET_OPERATION","RESERVED_JOIN","ARRAY_KEYWORD","CASE","END","WHEN","ELSE","THEN","LIMIT","BETWEEN","ON","AND","OR","XOR","expandPhrases","phrases","flatMap","expandSinglePhrase","phrase","buildCombinations","parsePhrase","trim","REQUIRED_PART","REQUIRED_BLOCK","OPTIONAL_BLOCK","result","lastIndex","requiredMatch","exec","optionalBlockMatch","choices","requiredBlockMatch","first","rest","tail","head","last","arr","sortByLengthDesc","strings","sort","b","localeCompare","maxLength","reduce","cur","equalizeWhitespace","replace","flatKeywordList","dedupe","values","flat","Set","isMultiline","keywords","datatypes","stringFormat","misc","ddl","functions","aead","aggregateAnalytic","aggregate","approximateAggregate","array","bitwise","conversion","date","datetime","debugging","federatedQuery","geography","hash","hll","interval","json","math","navigation","net","numbering","security","statisticalAggregate","string","time","timestamp","uuid","conditional","legacyAggregate","legacyBitwise","legacyCasting","legacyComparison","legacyDatetime","legacyIp","legacyJson","legacyMath","legacyRegex","legacyString","legacyTableWildcard","legacyUrl","legacyWindow","legacyMisc","other","pivot","dataTypes","reservedSelect","reservedClauses","onelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","bigquery","tokenizerOptions","reservedKeywords","reservedFunctionNames","extraParens","stringTypes","quote","prefixes","requirePrefix","identTypes","identChars","dashes","paramTypes","positional","named","quoted","lineCommentTypes","operators","postProcess","tokens","prevToken","detectArraySubscripts","processed","_tokens","endIndex","findClosingAngleBracketIndex","typeDefTokens","IDENTIFIER","formatTypeDefToken","combineParameterizedTypes","formatOptions","COMMA","startIndex","level","scalar","row","olap","cast","standard","db2","paramChars","masking","window","nonReserved","reserved","fileTypes","preserveClauses","hive","variableTypes","all","mariadb","supportsXor","allowFirstCharNumber","regex","nextToken","mysql","n1ql","numbered","numeric","character","comparison","largeObject","collection","hierarchical","dataMining","xml","encoding","nullRelated","env","objectReference","model","plsql","previousReservedToken","alwaysDenseOperators","binary","bitstring","pattern","datatype","enum","geometry","network","textsearch","sequence","range","set","sysInfo","sysAdmin","trigger","eventTrigger","stats","postgresql","nestedBlockComments","dateTime","spatial","hyperLogLog","machineLearning","superType","dataType","dataConversionParams","dataLoadParams","dataFormatParams","copyAuthParams","copyCompressionParams","copyMiscParams","compressionEncodings","redshift","caseAbbrev","spark","OPEN_PAREN","sqlite","nonStandard","sql","rowPattern","types","trino","analytic","configuration","cryptographic","cursor","mathematical","metadata","ranking","system","statistical","odbc","transactsql","singlestoredb","snowflake","arithmetic","arrays","match","clickhouse","escapeRegExp","WHITESPACE_REGEX","patternToRegex","toCaseInsensitivePattern","prefix","char","toUpperCase","toLowerCase","parenthesis","kind","parens","pair","reservedWord","avoidIdentChars","rejectIdentCharsPattern","reservedKeywordsPattern","parameter","typesRegex","quotePatterns","$$","buildQStringPatterns","specialDelimiterMap","patternList","entries","specialDelimiters","keys","singleQuotePattern","quoteTypes","prefixesPattern","stringPattern","identifier","specialChars","identifierPattern","letter","number","firstChars","restChars","withDashes","lineColFromIndex","source","TokenizerEngine","input","tokenize","precedingWhitespace","getWhitespace","getNextToken","createParseError","matches","matchedText","START","MIDDLE","NestedComment","nestLevel","matchSection","Tokenizer","cfg","rulesBeforeParams","buildRulesBeforeParams","rulesAfterParams","buildRulesAfterParams","paramTypesOverrides","buildParamRules","validRules","BLOCK_COMMENT","LINE_COMMENT","QUOTED_IDENTIFIER","NUMBER","toCanonical","includes","VARIABLE","varTypes","varType","STRING","DELIMITER","CLOSE_PAREN","OPERATOR","ASTERISK","DOT","_cfg$paramTypes","_cfg$paramTypes2","_cfg$paramTypes3","_cfg$paramTypes4","_cfg$paramTypes5","custom","NAMED_PARAMETER","v","QUOTED_PARAMETER","tokenKey","quoteChar","NUMBERED_PARAMETER","POSITIONAL_PARAMETER","customParam","CUSTOM_PARAMETER","Boolean","cache","Map","processDialectFormatOptions","fromEntries","indentString","indentStyle","repeat","useTabs","tabWidth","isTabularStyle","Params","params","getPositionalParameterIndex","setPositionalParameterIndex","dotKeywordToIdent","prevNonCommentToken","nextNonCommentToken","funcNameToKeyword","isOpenParen","identToArrayIdent","isOpenBracket","ARRAY_IDENTIFIER","keywordToArrayKeyword","identToFunctionName","dir","isComment","LexerAdapter","_info","has","NodeType","unwrap","el","toKeywordNode","keyword","tokenType","addComments","leading","trailing","leadingComments","trailingComments","addCommentsToArray","nodes","lead","statements","hasSemicolon","delimiter","_children$","statement","end","expressions","clauses","limitToken","_","exp1","optional","comma","exp2","limit_clause","limitKw","count","nameToken","clause","nameKw","all_columns_asterisk","set_operation","chain","item","expr","arrayToken","brackets","array_subscript","function_call","open","close","openParen","closeParen","object","_1","_2","property","property_access","betweenToken","expr1","andToken","_3","expr2","between_predicate","betweenKw","andKw","caseToken","endToken","case_expression","caseKw","endKw","whenToken","cond","thenToken","case_when","whenKw","thenKw","condition","elseToken","case_else","elseKw","operator","comments","line_comment","block_comment","NearleyParser","PRECEDING_WHITESPACE_REGEX","INDENT_TYPE_TOP_LEVEL","INDENT_TYPE_TABULAR_BLOCK_LEVEL","Indentation","indentTypes","indent","tabWidthIndent","getSingleIndent","getLevel","getIndentItems","increaseTopLevel","increaseBlockLevel","increaseTabularBlockLevel","decreaseTopLevel","pop","decreaseBlockLevel","decreaseTabularBlockLevel","WS","Layout","items","indentation","add","SPACE","NO_SPACE","trimHorizontalWhitespace","NO_NEWLINE","trimWhitespace","NEWLINE","addNewline","MANDATORY_NEWLINE","INDENT","addIndentation","SINGLE_INDENT","increaseTabWidthIndent","TAB_WIDTH_INDENT","decreaseTabWidthIndent","getItems","isHorizontalWhitespace","isRemovableWhitespace","isAfterNewLine","newline","itemToString","getLayoutItems","InlineLayout","trailingSpace","expressionWidth","super","addToLength","InlineLayoutError","ExpressionFormatter","inline","escapeOperatorSpace","forceOneline","dialectCfg","layout","format","formatNode","formatComments","formatNodeWithoutComments","formatFunctionCall","formatArraySubscript","formatPropertyAccess","formatParenthesis","formatBetweenPredicate","formatCaseExpression","formatCaseWhen","formatCaseElse","formatClause","formatSetOperation","formatLimitClause","formatAllColumnsAsterisk","formatLiteral","formatIdentifier","formatParameter","formatOperator","formatComma","formatLineComment","formatBlockComment","formatKeywordNode","withComments","showKw","inlineLayout","formatInlineExpression","formatSubExpression","showNonTabularKw","forceNewlineCaseWhen","isPreserveClause","formatClauseInPreserveStyle","isOnelineClause","formatClauseInOnelineStyle","formatClauseInTabularStyle","formatClauseInIndentedStyle","isTabularNewlineKeyword","_node","denseOperators","fn","com","isMultilineBlockComment","splitBlockComment","comment","oldParamIndex","formatJoin","formatLogicalOperator","formatKeyword","logicalOperatorNewline","isLogicalOperator","tokenText","padEnd","padStart","toTabularFormat","functionCase","keywordCase","Formatter","dialect","query","ast","parse","formattedQuery","formatAst","postFormat","trimEnd","tokenizer","parser","createParser","stat","formatStatement","linesBetweenQueries","newlineBeforeSemicolon","tabulateAlias","newQuery","aliasLines","splitLines","precedingText","as","alias","aliasMaxLength","formatAliasPositions","_lines$i","lineText","commentWord","fieldMaxLength","dataTypeMaxLength","formatCreateTypePositions","newlineBeforeSet","commaPosition","groups","group","groupCommaDelimitedLines","commaLines","code","indentComma","formatTabular","whitespace","removeLastIndent","trimStart","formatBefore","formatCommaPositions","console","log","ConfigError","dialectNameMap","tsql","supportedDialects","defaultOptions","language","canonicalDialectName","formatDialect","allDialects","every","p","warn","validateConfig","dialectOptions","createDialect"],"sourceRoot":""}